Chinaunix

标题: linux高可用(HA)集群笔记heartbeat+drbd+nfs (原创) [打印本页]

作者: okzb    时间: 2007-12-10 16:10
标题: linux高可用(HA)集群笔记heartbeat+drbd+nfs (原创)
heartbeat+drbd
    如果主服务器宕机,造成的损失是不可估量的。要保证主服务器不间断服务,就需要对服务器实现冗余。在众多的实现服务器冗余的解决方案中,heartbeat为我们提供了廉价的、可伸缩的高可用集群方案。我们通过heartbeat+drbdLinux下创建一个高可用(HA)的集群服务器。
         DRBD是一种块设备,可以被用于高可用(HA)之中。它类似于一个网络RAID-1功能。当你将数据写入本地文件系统时,数据还将会被发送到网络中另一台主机上。以相同的形式记录在一个文件系统中。本地(主节点)与远程主机(备节点)的数据可以保证实时同步。当本地系统出现故障时,远程主机上还会保留有一份相同的数据,可以继续使用。在高可用(HA)中使用DRBD功能,可以代替使用一个共享盘阵。因为数据同时存在于本地主机和远程主机上。切换时,远程主机只要使用它上面的那份备份数据,就可以继续进行服务了。

安装heartbeat
[root@manager src]# rpm -ivh e2fsprogs-1.35-7.1.i386.rpm
[root@manager src]# tar zxvf libnet.tar.gz
[root@manager libnet]# ./configure
[root@manager libnet]# make
[root@manager libnet]# make install
[root@manager src]# tar zxvf heartbeat-2.1.2.tar.tar
[root@manager src]# cd heartbeat-2.1.2
[root@manager heartbeat-2.1.2]# ./ConfigureMe configure
[root@manager heartbeat-2.1.2]# make
[root@manager heartbeat-2.1.2]# make install
[root@manager heartbeat-2.1.2]# cp doc/ha.cf /etc/ha.d/
[root@manager heartbeat-2.1.2]# cp doc/haresources /etc/ha.d/
[root@manager heartbeat-2.1.2]# cp doc/authkeys /etc/ha.d/
[root@manager heartbeat-2.1.2]# cd /etc/ha.d/
开始编辑配置文件(两台机器上都需要安装和配置)
(heartbeat的配置比较简单,网上也有很多例子,这里就不多废话了)





[ 本帖最后由 okzb 于 2007-12-24 16:45 编辑 ]
作者: okzb    时间: 2007-12-10 16:11
开始编译安装DRBD

[root@manager root]# cp drbd-8.2.1.tar.tar /usr/src/

[root@manager root]# cd /usr/src/

[root@manager src]# tar zxvf drbd-8.2.1.tar.tar

[root@manager src]# cd drbd-8.2.1

[root@manager src]# make KERNVER=2.6.17.11 KDIR=/usr/src/linux-2.6.17.11

如果编译顺利可以看到Module build was successful.

[root@manager drbd-8.2.1]# make install

可以编辑配置文件了

[root@manager drbd-8.2.1]# vi /etc/drbd.conf

在manager和manage_bak上都需要安装drbd服务。

分别在两台机器上配置好/etc/drbd.conf

[root@manager_bak root]# grep -v "#" /etc/drbd.conf

global {

    usage-count yes;                  (是否参加使用者统计,yes为参加)

}

common {

  syncer { rate 300M; }

}

resource r0 {

  protocol C;                            (数据同步协议,C为收到数据并写入后返回,确认成功)

  disk {

    on-io-error   detach;

     size 100G;                         (由于实验环境下两台服务器硬盘大小不同,所以需要设置drbd的大小)

  }

  net {

    after-sb-0pri disconnect;

    rr-conflict disconnect;

  }

  syncer {

    rate 300M;                           (设置网络同步速率)

    al-extents 257;

  }

  on manager_bak {

    device     /dev/drbd0;

    disk       /dev/sda3;

    address    192.168.0.2:7788;

    meta-disk  internal;

  }

  on manager {

    device    /dev/drbd0;

    disk      /dev/sdc;

    address   192.168.0.1:7788;

    meta-disk internal;

  }

}

在启动DRBD之前,需要创建供DRBD记录信息的数据块.分别在两台主机上执行:

[root@manager ha.d]# drbdadm create-md r0

[root@manager ha.d]#mknod /dev/drbd0 b 147 0

[root@manager ha.d]# /etc/init.d/drbd srart

现在两台主机都是备机状态,都是”不一致”状态,这是由于DRBD无法判断哪一方为主机,以哪一方的磁盘数据作为标准数据。所以我们需要初始化,在manager上执行:

[root@manager /]#drbdsetup /dev/drbd0 primary –o

现在数据开始同步,可以用cat /proc/drbd查看数据同步的进度

等数据同步完查看DRBD的状态

[root@manager /]# cat /proc/drbd

version: 8.2.1 (api:86/proto:86-87)

GIT-hash: 318925802fc2638479ad090b73d7af45503dd184 build by root@manager, 2007-12-05 16:40:14

0: cs:Connected st Primary/Secondary ds:UpToDate/UpToDate C r---

    ns:1514 nr:1110 dw:2616 dr:2259 al:0 bm:482 lo:0 pe:0 ua:0 ap:0

        resync: used:0/31 hits:2 misses:2 starving:0 dirty:0 changed:2

        act_log: used:0/257 hits:202 misses:0 starving:0 dirty:0 changed:0

磁盘状态都是”实时”,表示数据同步完成了。

[root@manager /]# mkfs.xfs /dev/drbd0

现在可以把manager上的DRBD设备挂载到/export目录上进行使用。备机的DRBD设备无法被挂载,因为它是用来接收主机数据的,由DRBD负责操作。

[root@manager /]# mount /dev/drbd0 /export

[root@manager /]# df

Filesystem           1K-blocks      Used Available Use% Mounted on

/dev/sda1             10229696   3019636   7210060  30% /

/dev/drbd0           104806400   3046752 101759648   3% /export

现在把之前备份的/export中的所有内容再恢复回去。

如果不使用heartbeat的情况下,DRBD只能手工切换主从关系

现在修改heartbeat的配置文件,使DRBD可以通过heartbeat自动切换

[root@manager /]# vi /etc/ha.d/haresources

manager 192.168.0.3 drbddisk::r0 Filesystem::/dev/drbd0::/export::xfs  dhcpd xinetd portmap nfs

注释:上面那行

manager                                              定义manager为heartbeat的主机

192.168.0.3                                         定义对外服务的IP地址,这个IP自动在主从机之间切换

drbddisk::r0                                         定义使用的drbd资源

Filesystem::/dev/drbd0::/export::xfs     定义挂载文件系统

dhcpd xinetd portmap nfs                    定义其他需要切换的服务(用空格隔开)



现在我们可以测试一下了

(dhcpd portmap nfs等需要切换的服务,应该先在两台服务器上都配置好)

[root@manager root]# chkconfig –list

确定heartbeat和DRBD开机自启动

确定需要由heartbeat切换的服务,开机不自启动(由heartbeat来启用相关的服务)

给link1接通电源,通过pxe启动系统(link1是一组服务器中的一台,是一台无盘服务器,启动后挂载在manager上保存的系统)

在manager上rlogin link1

[root@manager root]# rlogin link1

-bash-2.05b#

-bash-2.05b# arp -a

? (192.168.0.3) at 00:19:B9:E4:7D:22 [ether] on eth0

-bash-2.05b# ls

-bash-2.05b# touch test

-bash-2.05b# ls

test

现在在manager上关机或停止heartbeat服务

[root@manager root]# /etc/init.d/heartbeat stop

Stopping High-Availability services:

                                                           [  OK  ]

到manager_bak上ifconfig

[root@manager_bak root]# ifconfig

可以看到eth1:0起来了,IP地址是192.168.0.3

[root@manager_bak root]# rlogin link1

-bash-2.05b#

-bash-2.05b# arp -a

? (192.168.0.3) at 00:19:B9:E5:3B:FC [ether] on eth0 (可以看到192.168.0.3的mac地址变了)

-bash-2.05b# ls

test

可以看到在manager上rlogin上link1后建立的test文件

-bash-2.05b# echo "this is test" > test

-bash-2.05b# cat test

this is test

可以看到现在link1可以正常读写manager_bak上nfs出来的磁盘

现在把manager上的heartbeat服务启动起来

[root@manager root]# /etc/init.d/heartbeat start

Starting High-Availability services:

2007/12/06_12:46:08 INFO:  Resource is stopped

                                                           [  OK  ]

-bash-2.05b# cat test

this is test

现在终于大功告成了,之前在不使用drbd的情况下,heartbeat也可以切换apache、dhcpd、portmap、nfs等等服务,但是nfs服务切换后,必须重新mount一下nfs共享出来的目录,否则会报 Stale NFS file handle 的错误。现在heartbeat+drbd配合使用后,nfs等等服务可以无缝切换,不必再重新mount一下nfs目录了

两栖生物体原创
66zhoubin@163.com

[ 本帖最后由 okzb 于 2007-12-10 16:13 编辑 ]
作者: achlice    时间: 2007-12-10 17:32
收了先,  有空慢慢 看,呵呵~~~ 谢谢楼主,也~~
作者: mdjhaitao    时间: 2007-12-21 14:32
要珍惜别人的劳动成果。看了就要回帖。呵呵。写的不错。很详细了。
作者: vrlinux.cn    时间: 2007-12-21 14:51
不错,转到我的网站了 http://vrlinux.cn
作者: cnbaby    时间: 2008-01-02 16:51
[root@manager ha.d]# drbdadm create-md r0

[root@manager ha.d]#mknod /dev/drbd0 b 147

可以省略的

直接执行/etc/rc.d/init.d/drbd start  就会出现create-md
作者: johnsonyoung    时间: 2008-01-03 13:32
感谢楼主的无私分享,正在学习中.
作者: 5iwww    时间: 2008-01-15 14:28
按照LZ的说明把  drbd+heartbeat+nfs 建立起来了,但是发现如果主失败,nfs可以正常切换到从,但是主一旦恢复了,ipfail打开后,nfs又切回主,但是这个时候第三方挂载nfs还是会出现 Stale NFS file handle, 这该怎么办呢?
作者: showmoney    时间: 2008-01-18 17:59
arp 问题怎么解决?貌似 要耽误蛮长时间
作者: troyme    时间: 2008-01-18 21:44
楼主做的不错,但是有两个疑问
1.如果客户端在写入nfs共享的时候,manager当机,请问如何保证写入的数据正确性,请问有没有测试

2.不知道楼主有没有做failback,如果做了failback,manager正常的时候,由于drbd分区的不一致性,如何保证两者的数据统一性
作者: molecar    时间: 2008-01-19 10:59
楼上的疑问也是我所担心的。
作者: troyme    时间: 2008-01-19 11:16
在网上找到一些资料 http://www.linux-ha.org/HaNFS

Make sure you are using a shared disk device, either shared by hardware between your two servers or by DRBD.

Mount your shared device in one of the machines. For example, if the device is /dev/sdb1 and the directory you want to mount to is /data:

mount -t ext3 /dev/sdb1 /data

If the directory you will export is /data/userdata, create it if it is not there yet:

mkdir /data/userdata

Move /var/lib/nfs to your shared disk, make a link (/var/lib/nfs) to it:

mv /var/lib/nfs /data
ln -s /data/nfs /var/lib/nfs

On the other machine, remove the /var/lib/nfs directory and create a link instead:

rm -fr /var/lib/nfs
ln -s /data/nfs /var/lib/nfs

这一步估计可以保证数据写入正确性的问题,

http://www.linux-ha.org/DRBD/NFS
这里还一些资料
Note that auto_failback is off; we should not fail back unless a human has confirmed that the DRBD state is consistent.
We use the Delay script to create a brief pause during failover operations. It was proposed by Jens Dreger in a post at

看来failback需要人手工来做了
作者: xpingtn    时间: 2008-01-19 13:48
我启动DRBD时出现这种错误,楼主知道是什么原因不?
[root@web01 ~]# /etc/init.d/drbd start
Starting DRBD resources:    [ d0 n0 ].
..........
***************************************************************
DRBD's startup script waits for the peer node(s) to appear.
- In case this node was already a degraded cluster before the
   reboot the timeout is 0 seconds. [degr-wfc-timeout]
- If the peer was available before the reboot the timeout will
   expire after 0 seconds. [wfc-timeout]
   (These values are for resource 'r0'; 0 sec -> wait forever)
To abort waiting enter 'yes' [  11]:yes
作者: xpingtn    时间: 2008-01-19 13:53
我第一次使用#drbdadm create-md r0没有问题,第二次把drbd停止,再运行此命令就出现以下错误
[root@web01 ~]# drbdadm create-md r0

Valid meta-data already in place, recreate new?
[need to type 'yes' to confirm] yes

Creating meta data...
initialising activity log
NOT initialized bitmap (256 KB)
New drbd meta data block sucessfully created.
作者: troyme    时间: 2008-01-20 17:00
原帖由 xpingtn 于 2008-1-19 13:53 发表
我第一次使用#drbdadm create-md r0没有问题,第二次把drbd停止,再运行此命令就出现以下错误
[root@web01 ~]# drbdadm create-md r0

Valid meta-data already in place, recreate new?
[need to type 'yes' ...


drbdadm create-md r0
这个只要做一次就可以了,是初始化资源用的,如果你第二次做的话相当于格式化了
作者: xpingtn    时间: 2008-01-20 19:06
明白了,谢谢!!!!
作者: wy13    时间: 2008-02-19 15:43
顶下先,虽然不甚明白
作者: w_jia82102    时间: 2008-02-19 18:12
看帖 回帖 中华美德
作者: llxj    时间: 2008-03-17 15:55
正在研究这个东西.
作者: luoriddr    时间: 2008-03-17 18:03
我在执行drbdadm create-md r0的时候出错,提示如下:

Found ext3 filesystem which uses 2048256 kB
current configuration leaves usable 2048156 kB

Device size would be truncated, which
would corrupt data and result in
'access beyond end of device' errors.
You need to either
   * use external meta data (recommended)
   * shrink that filesystem first
   * zero out the device (destroy the filesystem)
Operation refused.

Command 'drbdmeta /dev/drbd1 v08 /dev/sda12 internal create-md' terminated with exit code 40
drbdadm aborting

就是如果设置元数据在分区内部即设置为 internal,提示的三种解决方法我倒是看懂了。第一种将 元数据设置在别的分区,我不想。第二种缩小文件系统,不会 ,第三种 破坏文件系统,也不太会,不过最后用dd命令搞定了。也不知道对不对,反正最后能用。
测试了主备转换什么的都成功了。
这个分区是我装系统的时候划分的,于是就自动格式化成ext3了。不知道有人解决了这个问题吗?赐教一下!

[ 本帖最后由 luoriddr 于 2008-3-17 18:06 编辑 ]
作者: dyingcc    时间: 2008-03-18 16:47
收下先。。。。。。。。。。
作者: 很平凡的Man    时间: 2008-05-13 07:36
感谢,感觉上有点乱。。。
作者: rainbow    时间: 2008-07-01 11:17
关注drbd的失败切换问题,抽个时间测试一下先,对了,除了测试之外,有人在商用drbd么?
作者: zly888    时间: 2008-07-07 15:43
谢谢楼主
很实用
作者: dingxianpei    时间: 2008-09-10 17:04
感谢楼主分享,有时间试验一下
作者: alan.song    时间: 2008-09-11 09:23
标题: 回复 #1 okzb 的帖子
做的非常不错,相当好的资料
作者: dingxianpei    时间: 2008-10-29 17:38
原帖由 luoriddr 于 2008-3-17 18:03 发表
我在执行drbdadm create-md r0的时候出错,提示如下:

Found ext3 filesystem which uses 2048256 kB
current configuration leaves usable 2048156 kB

Device size would be truncated, which
would c ...


我出现跟你一样的问题,我用得是两台不同的计算机,两个硬盘大小也不一样,一个是IDE硬盘,另一个是SATA硬盘,我准备找两个容易相同的硬盘做测试
作者: zly888    时间: 2008-11-06 15:28
今天才看到.谢谢楼主.
作者: nhuczp    时间: 2008-11-07 14:44
这个性能怎么样???
作者: e590921    时间: 2010-05-26 17:45
哇,怎沒Document啊?
殘念。
{:3_193:}
作者: surpass_li    时间: 2010-05-28 09:55
感谢楼主的分享,正在学习中.
作者: hmily36    时间: 2010-05-29 12:57
支持原创!
作者: surpass_li    时间: 2010-06-02 11:25
正在学习中.谢谢




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2