DRBD+HeartBeat+NFS 架构
昨天做了单独的DRBD,还存在一些疑问,今天通过这个DRBD+HeartBeat+NFS架构,并可以清楚的解答昨天的疑问了。实际上,DRBD只是作为磁盘冗余,而并不是像我之前理解的那样,同时提供2份一模一样的数据,它需要借助HeartBeat 虚拟出一个虚拟IP,并通过NFS挂载,才能完成。【实验环境】
virtual box
centos 6.4最小化
【实验拓扑图】
【实验步骤】
1、配置主机名
# vim /etc/sysconfig/network
HOSTNAME=node1
# vim /etc/hosts
192.168.56.120node1
192.168.56.121node2
# hostname node1
===============================
# vim /etc/sysconfig/network
HOSTNAME=node2
# vim /etc/hosts
192.168.56.120node1
192.168.56.121node2
# hostname node2
2、配置DRBD
参照前面的配置过程
# cat /proc/drbd
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by root@node1, 2013-07-29 08:48:43
1: cs:Connected ro:Primary/Secondaryds:UpToDate/UpToDate C r-----
ns:0 nr:0 dw:0 dr:664 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
确保两个节点为一主一从即可。
3、安装配置NFS(node2的配置与node1一致,可以通过scp命令将相关配置文件拷贝到node2上即可)
# yum -y install nfs nfs-utils rpcbind openssh-clients
# vim /etc/exports
/db *(rw,sync,insecure,no_root_squash,no_wdelay)
修改nfs启动脚本
# vim /etc/init.d/nfs
找到 killproc nfsd –2相关行,并改为:killproc nfsd –9
启动nfs
# service rpcbind start
Starting rpcbind:
# service nfs start
Starting NFS services:
Starting NFS mountd:
Starting NFS daemon:
# scp /etc/exports /etc/init.d/nfs 192.168.56.121:/etc/exports
4、安装配置HeartBeat(node2配置同node1)
# yum -y install heartbeat heartbeat-pils heartbeat-stonith libnet perl-MailTools
注:有些版本可能并没有heartbeat相关的rpm包,如果没有,可以下载源码包编译安装,或者通过配置epel软件仓库在线yum安装
# wget http://mirrors.hust.edu.cn/epel/6/i386/epel-release-6-8.noarch.rpm
# rpm -ivh epel-release-6-8.noarch.rpm
#yum clean all
#yum list
重新执行yum命令安装heartbeat
#yum -y install heartbeat heartbeat-pils heartbeat-stonith libnet perl-MailTools
确认已经安装heartbeat
# rpm -qa |grep heartbeat
heartbeat-libs-3.0.4-1.el6.i686
heartbeat-3.0.4-1.el6.i686
复制模版文件
# cd /usr/share/doc/heartbeat-3.0.4/
# cp authkeys ha.cf haresources /etc/ha.d/
配置heartbeat主配置文件
# cd /etc/ha.d/
# vim ha.cf
找到下面相关内容,去掉前面的#注释,并修改为如下内容:
debugfile /var/log/ha-debug //打开错误日志报告
logfile /var/log/ha-log // heartbeat 日志
logfacility local0
keepalive 2 //两秒检测一次心跳线连接
deadtime 10 //10 秒测试不到主服务器心跳线为有问题出现
warntime 6 //警告时间(最好在 2 ~ 10 之间)
#initdead 120 //初始化启动时 120 秒无连接视为正常,或指定heartbeat。在启动时,需要等待120秒才去启动任何资源(最少应该设置为deadtime的两倍)
udpport 694 //使用udp 694端口
bcast eth0 //广播方式
#ucast eth0 192.168.1.20 //单播方式连接(主从都写对方的 ip 进行连接)
auto_failback off //自动切换(主服恢复后可自动切换回来)这个不要开启
node node1 //声明主服务器
node node2 //声明备服务器
修改资源文件
# vim haresources
node1 IPaddr::192.168.56.130/24/eth0 drbddisk::r0 Filesystem::/dev/drbd1::/db::ex
t3 killnfsd
注意:这里的192.168.56.130 便是VIP
修改node2资源文件的时候节点名字应改为node2(node2与node1配置唯一一处不同)即:
# vim haresources
node2IPaddr::192.168.56.130/24/eth0 drbddisk::r0 Filesystem::/dev/drbd1::/db::ex
t3 killnfsd
# vim authkeys
auth 1
1 crc
# vim resource.d/killnfsd //加入以下内容
killall -9 nfsd ; /etc/init.d/nfs restart ; exit 0
修改相关文件的权限
# chmod 600 /etc/ha.d/authkeys
# chmod 755 /etc/ha.d/resource.d/killnfsd
# service heartbeat start
Starting High-Availability services: INFO:Resource is stopped
Done.
node2 上的配置与node1的配置基本上完全一样,可以从node1上直接拷贝过去,稍作修改即可
# scp ha.cf authkeys haresources 192.168.56.121:/etc/ha.d/
# scp resource.d/killnfsd 192.168.56.121:/etc/ha.d/resource.d
启动node1和node2的heartbeat
# service heartbeat start
两个节点都启动heartbeat后,可以看到VIP在node1上:
5、测试
在客户端上测试:
# yum install nfs nfs-utils
确保客户端能ping通VIP: 192.168.56.130
注意:我做实验的时候,发现ping这个Vip 时通时不通,而且heartbeat 频繁切换,但是node1与node2之间网络是通的,于是查看日志,发现有一个错误:
ResourceManager(default): 2013/07/29_16:27:13 ERROR: Cannot locate resource script drbddisk
ResourceManager(default): 2013/07/29_16:27:14 info: Retrying failed stop operation
仔细一看,发现/etc/ha.d/resource.d/ 目录下居然没有drbddisk这个脚本...
# vim /etc/ha.d/resource.d/drbddisk
这里顺便附上drbddisk脚本: http://down.运维网.com/data/892360
# ping 192.168.56.130
PING 192.168.56.130 (192.168.56.130) 56(84) bytes of data.
64 bytes from 192.168.56.130: icmp_seq=1 ttl=64 time=2.37 ms
64 bytes from 192.168.56.130: icmp_seq=2 ttl=64 time=0.394 ms
64 bytes from 192.168.56.130: icmp_seq=3 ttl=64 time=0.342 ms
在客户端挂载nfs
# mount -t nfs 192.168.56.130:/db /mnt/nfs/
# mount
/dev/mapper/VolGroup-lv_root on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")
/dev/sda1 on /boot type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
192.168.56.130:/db on /mnt/nfs type nfs (rw,vers=4,addr=192.168.56.130,clientaddr=192.168.56.113)
# ls /mnt/nfs/
hello.txthw.txtlost+found
可以看到现在nfs可以正常读写了。
在客户端看来,它只知道192.168.56.130 提供了nfs 网络共享目录,并不知道实际上,nfs是跑在node1和node2上,如果node1 宕机,node2可以通过heartbeat很快接管服务,而对于用户体验来说,无需做其他更改。
下面模拟node1宕机的情况:
通过一个脚本对nfs 不断的写入数据,并从另外一个终端通过tailf 查看,与此同时,停止node1的服务
这里,网上很多资料都是用这个脚本,通过这个脚本不断的touch x ,我觉得应该有问题。但不是脚本本身问题。
while true
do
echo ---\> trying touch x:`date`
touch x
echo \ trying touch x:2012年 07月 25日 星期三 05:29:40 CST
> /mnt/nfs/date
sleep 1
done
# chmod +x test.sh
# ./test.sh
停掉node1的heartbeat
# service heartbeat stop
打开客户端的另一个终端,通过tailf观察写入情况
# tailf /mnt/nfs/date
Tue Jul 30 11:42:41 CST 2013
Tue Jul 30 11:42:42 CST 2013
Tue Jul 30 11:42:43 CST 2013
Tue Jul 30 11:42:44 CST 2013
Tue Jul 3011:42:45CST 2013
Tue Jul 3011:44:42CST 2013
Tue Jul 30 11:44:43 CST 2013
Tue Jul 30 11:44:44 CST 2013
从上面可以看到,node1宕机之后,会有一小段时间停止服务,过后自动服务自动恢复,即node2接管服务。
疑问:
停掉node1之后,通过日志可以看到node2很快接管了vip,但是在客户端,对挂载的nfs目录写入,却需要差不多2分钟的停止服务时间,为什么会那么久?理论上不是应该只有短暂的几秒吗?
上述问题,还望高手出面帮忙解答一下。
页:
[1]