分类: 系统运维
2008-01-02 13:43:43
如果主服务器宕机,造成的损失是不可估量的。要保证主服务器不间断服务,就需要对服务器实现冗余。在众多的实现服务器冗余的解决方案中,heartbeat为我们提供了廉价的、可伸缩的高可用集群方案。我们通过heartbeat+drbd在Linux下创建一个高可用(HA)的集群服务器。
DRBD是一种块设备,可以被用于高可用(HA)之中。它类似于一个网络RAID-1功能。当你将数据写入本地文件系统时,数据还将会被发送到网络中另一台主机上。以相同的形式记录在一个文件系统中。本地(主节点)与远程主机(备节点)的数据可以保证实时同步。当本地系统出现故障时,远程主机上还会保留有一份相同的数据,可以继续使用。在高可用(HA)中使用DRBD功能,可以代替使用一个共享盘阵。因为数据同时存在于本地主机和远程主机上。切换时,远程主机只要使用它上面的那份备份数据,就可以继续进行服务了。本文就是用这种方式来搭建nfs高可用集群的。
2 服务器说明
172.20.67.130 ----主机名drbdzhu------角色drbd的主服务器
172.20.67.131 ----主机名drbdcong ---------角色 drbd的辅助服务期
172.20.67.132 ----主机名 nfsclient ---角色 nfs的客户端
3 drbd的安装和配置
3.1 drbd主机上的操作
[root@drbdzhu local]#tar zxvf drbd-8.2.1.tar.tar
[root@drbdzhu local]#cd drbd-8.2.1
[root@drbdzhu drbd-8.2.1]#make
如果编译顺利可以看到Module build was successful.
[root@drbdzhu drbd-8.2.1]#make install
可以编辑配置文件了
[root@drbdzhu drbd-8.2.1]# vi /etc/drbd.conf 内容如下:
skip {
As you can see, you can also comment chunks of text
with a 'skip[optional nonsense]{ skipped text }' section.
This comes in handy, if you just want to comment out
some 'resource
just precede it with 'skip'.
The basic format of option assignment is
It should be obvious from the examples below,
but if you really care to know the details:
valid options in the respective scope
depending on the set of allowed values
for the respective option.
}
global {
usage-count yes; (是否参加使用者统计,yes为参加)
}
common {
syncer { rate 10M; }
}
resource r0 { (可以有多个资源,如r1,r2等)
protocol C; (数据同步协议,C为收到数据并写入后返回,确认成功)
handlers {
pri-on-incon-degr "echo o > /proc/sysrq-trigger ; halt -f";
pri-lost-after-sb "echo o > /proc/sysrq-trigger ; halt -f";
local-io-error "echo o > /proc/sysrq-trigger ; halt -f";
outdate-peer "/usr/sbin/drbd-peer-outdater";
}
startup {
degr-wfc-timeout 120;
}
disk {
on-io-error detach;
#size 100G; (由于实验环境下两台服务器硬盘大小不同,所以需要设置drbd的大小)
}
net {
after-sb-0pri disconnect;
after-sb-1pri disconnect;
after-sb-2pri disconnect;
rr-conflict disconnect;
}
syncer {
rate 10M; (设置网络同步速率)
al-extents 257;
}
on drbdzhu { (drbdzhu是指服务器的主机名)
device /dev/drbd0;
disk /dev/sdb1;
address 172.20.67.132:7788;
meta-disk internal;
}
on drbd { (drbd是指服务器的主机名)
device /dev/drbd0;
disk /dev/sdb1;
address 172.20.67.159:7788;
meta-disk internal;
}
}
[root@drbdzhu drbd-8.2.1]#chkconfig --level 35 drbd on #自动启动服务
[root@drbdzhu drbd-8.2.1]#fdisk /dev/sdb #创建分区
[root@drbdzhu drbd-8.2.1]#drbdadm create-md r0 #创建drbd资源
[root@drbdzhu drbd-8.2.1]#drbdsetup /dev/drbd0 primary -o #把drbd0设为主
[root@drbdzhu drbd-8.2.1]#service drbd start #启动服务
[root@drbdzhu drbd-8.2.1]#mkfs.ext3 /dev/drbd0 (有时候下一步mount不上就需要做这一步)
[root@drbdzhu drbd-8.2.1]#mount /dev/drbd0 /mnt #挂载
[root@ drbdzhu drbd-8.2.1]# cat /proc/drbd
version: 8.2.1 (api:86/proto:86-87)
GIT-hash: 318925802fc2638479ad090b73d7af45503dd184 build by , 2007-12-28 17:30:46
0: cs:Connected st: Primary/Secondary ds:UpToDate/UpToDate C r---
ns:104427 nr:42 dw:7946 dr:110895 al:15 bm:28 lo:0 pe:0 ua:0 ap:0
resync: used:0/31 hits:6515 misses:7 starving:0 dirty:0 changed:7
act_log: used:0/257 hits:2021 misses:15 starving:0 dirty:0 changed:15
3.2 drbd从机上的操作
[root@drbdzhu local]#tar zxvf drbd-8.2.1.tar.tar
[root@drbdzhu local]#cd drbd-8.2.1
[root@drbdzhu drbd-8.2.1]#make
如果编译顺利可以看到Module build was successful.
[root@drbdzhu drbd-8.2.1]#make install
可以编辑配置文件了
[root@drbdzhu drbd-8.2.1]# vi /etc/drbd.conf 内容如下:
skip {
As you can see, you can also comment chunks of text
with a 'skip[optional nonsense]{ skipped text }' section.
This comes in handy, if you just want to comment out
some 'resource
just precede it with 'skip'.
The basic format of option assignment is
It should be obvious from the examples below,
but if you really care to know the details:
valid options in the respective scope
depending on the set of allowed values
for the respective option.
}
global {
usage-count yes; (是否参加使用者统计,yes为参加)
}
common {
syncer { rate 10M; }
}
resource r0 { (可以有多个资源,如r1,r2等)
protocol C; (数据同步协议,C为收到数据并写入后返回,确认成功)
handlers {
pri-on-incon-degr "echo o > /proc/sysrq-trigger ; halt -f";
pri-lost-after-sb "echo o > /proc/sysrq-trigger ; halt -f";
local-io-error "echo o > /proc/sysrq-trigger ; halt -f";
outdate-peer "/usr/sbin/drbd-peer-outdater";
}
startup {
degr-wfc-timeout 120;
}
disk {
on-io-error detach;
#size 100G; (由于实验环境下两台服务器硬盘大小不同,所以需要设置drbd的大小)
}
net {
after-sb-0pri disconnect;
after-sb-1pri disconnect;
after-sb-2pri disconnect;
rr-conflict disconnect;
}
syncer {
rate 10M; (设置网络同步速率)
al-extents 257;
}
on drbdzhu { (drbdzhu是指服务器的主机名)
device /dev/drbd0;
disk /dev/sdb1;
address 172.20.67.130:7788;
meta-disk internal;
}
on drbdcong { (drbd是指服务器的主机名)
device /dev/drbd0;
disk /dev/sdb1;
address 172.20.67.131:7788;
meta-disk internal;
}
}
[root@drbdcong drbd-8.2.1]#chkconfig --level 35 drbd on #自动启动服务
[root@drbdcong drbd-8.2.1]#fdisk /dev/sdb #创建分区
[root@drbdcong drbd-8.2.1]#drbdadm create-md r0 #创建drbd资源
[root@drbdcong drbd-8.2.1]#service drbd start #启动服务
注意:drbd 从机不需要mount
[root@ drbdcong drbd-8.2.1]# cat /proc/drbd
version: 8.2.1 (api:86/proto:86-87)
GIT-hash: 318925802fc2638479ad090b73d7af45503dd184 build by , 2007-12-28 17:23:06
0: cs:Connected st: Secondary/Primary ds:UpToDate/UpToDate C r---
ns:42 nr:104427 dw:104469 dr:86 al:2 bm:9 lo:0 pe:0 ua:0 ap:0
resync: used:0/31 hits:6515 misses:7 starving:0 dirty:0 changed:7
act_log: used:0/257 hits:40 misses:2 starving:0 dirty:0 changed:2
4 heartbeat的安装和配置
[root@drbdzhu local]#rpm –ivh heartbeat-pils-2.0.4-1.el4.i386.rpm
[root@drbdzhu local]#rpm –ivh heartbeat-stonith-2.0.4-1.el4.i386.rpm
[root@drbdzhu local]#rpm –ivh heartbeat-2.0.4-1.el4.i386.rpm
[root@drbdzhu local]#cd /usr/share/doc/heartbeat-2.0.4
[root@drbdzhu heartbeat-2.0.4]# cp authkeys ha.cf haresources /etc/ha.d/
[root@drbdzhu heartbeat-2.0.4]#cd /etc/ha.d
[root@drbdzhu ha.d]#vi ha.cf
debugfile /var/log/ha-debug
logfile /var/log/ha-log
keepalive 2
deadtime 30
warntime 10
initdead 120
udpport 694
ucast eth0 172.20.67.131 //ucast方式 心跳线网卡 ,对端ip
auto_failback on
node drbdzhu
node drbdcong {//HA的两个节点,机器名要在hosts中定义(机器名可以自己指定只要在hosts中有定义就行)
vi /etc/hosts添加如下两行:
172.20.67.130 drbdzhu
172.20.67.131 drbdcong
[root@drbdzhu ha.d]# vi authkeys
auth 1
1 crc
#2 sha1 HI!
#3 md5 Hello!
[root@drbdzhu ha.d]#vi haresources
drbdzhu 172.20.67.220 drbddisk::r0 Filesystem::/dev/drbd0::/mnt::ext3 nfs
[root@drbdzhu ha.d]#service heartbeat start
5 drbd服务器上的nfs 服务的配置 (drbd的主机和从机上的操作都一样)
[root@drbdzhu ha.d]# vi /etc/exports
/mnt 172.20.67.132(rw, no_root_squash,async)
[root@drbdzhu ha.d]#chkconfig --del nfs
6 nfs 客户端的配置 ----172.20.67.132
#service nfs start
#mount -t nfs 172.20.67.220:/mnt /usr/local/src
7 整体的测试
在drbd的主机上
#cd /mnt
#touch test0
#ls
Test0
在nfs 的客户端
# cd /usr/local/src
#ls
Test0
在drbd的主机上
#service heartbeat stop
在drbd的从机上
#cd /mnt
#ls
test
#touch test1
在nfs 的客户端
# cd /usr/local/src
#ls
Test0 test1 (说明配置成功)
8 补充说明
在没有heartbeat 的情况下,要想看到drbd的效果,做法如下:
在drbd的主机上
#cd /mnt
#touch test0
#ls
test0
在drbd的从机上
#cd /mnt
#ls
空的
此时应该把drbd的主地位将为从#drbdsetup /dev/drbd0 secondary----主机上操作
在把从机的drbd 升为主地位 # drbdsetup /dev/drbd0 primary –o --------从机上操作
在drbd的从机上
#cd /mnt
#ls
test0
这样就说明drbd 主从备份成功!