设为首页 收藏本站
查看: 1702|回复: 0

[经验分享] DRBD+HeartBeat+NFS 架构

[复制链接]

尚未签到

发表于 2019-1-6 15:27:17 | 显示全部楼层 |阅读模式
   昨天做了单独的DRBD,还存在一些疑问,今天通过这个DRBD+HeartBeat+NFS架构,并可以清楚的解答昨天的疑问了。实际上,DRBD只是作为磁盘冗余,而并不是像我之前理解的那样,同时提供2份一模一样的数据,它需要借助HeartBeat 虚拟出一个虚拟IP,并通过NFS挂载,才能完成。
【实验环境】
virtual box
centos 6.4  最小化
【实验拓扑图】
DSC0000.gif
【实验步骤】
1、配置主机名
[root@localhost ~]# vim /etc/sysconfig/network
HOSTNAME=node1


[root@localhost ~]# vim /etc/hosts
192.168.56.120  node1
192.168.56.121  node2


[root@localhost ~]# hostname node1
===============================
[root@localhost ~]# vim /etc/sysconfig/network
HOSTNAME=node2


[root@localhost ~]# vim /etc/hosts
192.168.56.120  node1
192.168.56.121  node2


[root@localhost ~]# hostname node2





2、配置DRBD
    参照前面的配置过程

[root@node1 ~]# 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上即可)
[root@node1 ~]# yum -y install nfs nfs-utils rpcbind openssh-clients
[root@node1 ~]# vim /etc/exports
/db     *(rw,sync,insecure,no_root_squash,no_wdelay)



修改nfs启动脚本
[root@node1 ~]# vim /etc/init.d/nfs
找到    killproc nfsd –2  相关行,并改为:killproc nfsd –9



启动nfs
[root@node1 ~]# service rpcbind start
Starting rpcbind:                                          [  OK  ]
[root@node1 ~]# service nfs start


Starting NFS services:                                        [  OK  ]
Starting NFS mountd:                                       [  OK  ]
Starting NFS daemon:                                       [  OK  ]



[root@node1 ~]# scp /etc/exports /etc/init.d/nfs 192.168.56.121:/etc/exports


4、安装配置HeartBeat(node2配置同node1)
[root@node1 ~]# yum -y install heartbeat heartbeat-pils heartbeat-stonith libnet perl-MailTools


注:有些版本可能并没有heartbeat相关的rpm包,如果没有,可以下载源码包编译安装,或者通过配置epel软件仓库在线yum安装
[root@node1 ~]# wget http://mirrors.hust.edu.cn/epel/6/i386/epel-release-6-8.noarch.rpm
[root@node1 ~]# rpm -ivh epel-release-6-8.noarch.rpm

[root@node1 ~]#  yum clean all
[root@node1 ~]#  yum list
重新执行yum命令安装heartbeat
[root@node1 ~]#  yum -y install heartbeat heartbeat-pils heartbeat-stonith libnet perl-MailTools


确认已经安装heartbeat
[root@node1 ~]# rpm -qa |grep heartbeat
heartbeat-libs-3.0.4-1.el6.i686
heartbeat-3.0.4-1.el6.i686



复制模版文件

[root@node1 ~]# cd /usr/share/doc/heartbeat-3.0.4/
[root@node1 heartbeat-3.0.4]# cp authkeys ha.cf haresources /etc/ha.d/



配置heartbeat主配置文件
[root@node1 heartbeat-3.0.4]# cd /etc/ha.d/
[root@node1 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                                //声明备服务器


修改资源文件
[root@node1 ha.d]# 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配置唯一一处不同)即:
[root@node2 ha.d]# vim haresources
node2IPaddr::192.168.56.130/24/eth0 drbddisk::r0 Filesystem::/dev/drbd1::/db::ex
t3 killnfsd



[root@node1 ha.d]# vim authkeys
auth 1
1 crc




[root@node1 ha.d]# vim resource.d/killnfsd      //加入以下内容
killall -9 nfsd ; /etc/init.d/nfs restart ; exit 0


修改相关文件的权限
[root@node1 ha.d]# chmod 600 /etc/ha.d/authkeys
[root@node1 ha.d]# chmod 755 /etc/ha.d/resource.d/killnfsd
[root@node1 ha.d]# service heartbeat start
Starting High-Availability services: INFO:  Resource is stopped
Done.





node2 上的配置与node1的配置基本上完全一样,可以从node1上直接拷贝过去,稍作修改即可
[root@node1 ha.d]# scp ha.cf authkeys haresources 192.168.56.121:/etc/ha.d/
[root@node1 ha.d]# scp resource.d/killnfsd 192.168.56.121:/etc/ha.d/resource.d


启动node1和node2的heartbeat
[root@node1 ha.d]# service heartbeat start


两个节点都启动heartbeat后,可以看到VIP在node1上:




5、测试
在客户端上测试:
[root@localhost ~]# yum install nfs nfs-utils


确保客户端能ping通VIP: 192.168.56.130


注意:我做实验的时候,发现ping这个Vip 时通时不通,而且heartbeat 频繁切换,但是node1与node2之间网络是通的,于是查看日志,发现有一个错误:
ResourceManager(default)[4917]: 2013/07/29_16:27:13 ERROR: Cannot locate resource script drbddisk
ResourceManager(default)[4917]: 2013/07/29_16:27:14 info: Retrying failed stop operation [drbddisk::r0]



仔细一看,发现/etc/ha.d/resource.d/ 目录下居然没有drbddisk这个脚本...
[root@node1 ha.d]# vim /etc/ha.d/resource.d/drbddisk


这里顺便附上drbddisk脚本: http://down.运维网.com/data/892360

[root@localhost ~]# 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
[root@localhost ~]# mount -t nfs 192.168.56.130:/db /mnt/nfs/
[root@localhost ~]# 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)



[root@localhost ~]# ls /mnt/nfs/
hello.txt  hw.txt  lost+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



[root@localhost ~]# chmod +x test.sh
[root@localhost ~]# ./test.sh


停掉node1的heartbeat
[root@node1 ha.d]# service heartbeat stop


打开客户端的另一个终端,通过tailf观察写入情况
[root@localhost ~]# 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、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-660035-1-1.html 上篇帖子: DRBD+heartbeat+httpd实现HA群集 下篇帖子: Heartbeat+Haproxy实现负载均衡高可用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表