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

[经验分享] nfs+drbd+heartbeat高可用(实验)

[复制链接]

尚未签到

发表于 2019-1-7 06:33:40 | 显示全部楼层 |阅读模式
一.环境介绍
master eth0:192.168.48.128  eth1:192.168.1.228   ---作为主服务器
slave eth0:192.168.48.129  eth1:192.168.1.229   ---作为从服务器
虚拟IP 192.168.48.130   ---通过Heartbeat来实现,对外提供服务的IP
两台服务器将 /dev/sdb4 作为镜像

1.两台都同步时钟(实践证明这个不同步关系不大,但是做下这步也无防)
yum install -y ntp
ntpdate ntp.api.bz

2.两台都设置hosts相互解析
在 /etc/hosts 文件中加入如下内容:
192.168.48.128     master
192.168.48.129     slave

yum 安装:
yum -y install drbd83 kmod-drbd83

2.加载模块
[root@master ~]# modprobe drbd
查看drbd模块是否已经加载到内核中了:
[root@master ~]# lsmod |grep drbd
drbd                  300440  0

先确认两台要镜像的机器是否正常, 之间的网络是否通畅, 需要加载的硬盘是否处于umount状态.

在两台主机上都创建硬件设备drbd.
mknod /dev/drbd0 b 147 0
//mknod /dev/drbd1 b 147 1
//mknod /dev/drbd2 b 147 2  如需多个drbd设备则依次去创建.

二台机器将/dev/sdb1互为镜相(两台机器配置相同).
yum -y install portmap
yum -y install nfs
mkdir /d      //创建共享目录.
vim /etc/exports
/d 192.168.48.0/255.255.255.0(rw,no_root_squash,no_all_squash,sync)
[root@master ~]# chkconfig --level 3 portmap on
[root@master ~]# chkconfig --level 3 nfs off
[root@master ~]# /etc/init.d/portmap start
启动 portmap:                                             [确定]

两台都配置drbd
[root@master ~]# mv /etc/drbd.conf /etc/drbd.conf.bak
[root@master ~]# vim /etc/drbd.conf
resource r0 {
protocol C;
#采用C协议,表示收到远程主机的写入确认后,则认为写入完成。
startup { wfc-timeout 0; degr-wfc-timeout 120; }
disk { on-io-error detach; }
net {
     timeout 60;
     connect-int 10;
     ping-int 10;
     max-buffers 2048;
     max-epoch-size 2048;
     }
syncer { rate 30M; }
#设置主备节点同步时的网络速率最大值
on master {
   device    /dev/drbd0;
   disk      /dev/sdb;
   address   192.168.48.128:7788;
   meta-disk internal;
}
on slave {
   device    /dev/drbd0;
   disk      /dev/sdb;
   address   192.168.48.129:7788;
   meta-disk internal;
}
}   

drbd的启动, 激活前面配置的drbd资源 “r0″. (两个节点都要执行)
[root@slave ~]# drbdadm create-md r0
出现提示:
* If you wish to opt out entirely, simply enter 'no'.
* To continue, just press [RETURN]
success

现在可以启动drbd了, 分别在两台主机上执行.
[root@master ~]# /etc/init.d/drbd start或者service drbd start
设置drbd开机自动启动.
[root@master ~]# chkconfig --add drbd
[root@slave ~]# chkconfig --add drbd

现在可以查看drbd当前的状态, 然后在master上执行:
[root@master ~]# cat /proc/drbd
version: 8.3.13 (api:88/proto:86-96)
GIT-hash: 83ca112086600faacab2f157bc5a9324f7bd7f77 build by mockbuild@builder10.centos.org, 2012-05-07 11:56:36
0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:2097052
第一行的’ro’表示两台主机的状态,都是”备机”状态.‘ds’是磁盘状态,都是”不一致”状态.
这是由于,DRBD无法判断哪一方为主机,以哪一方的磁盘数据作为标准数据.所以,我们需要初始化一个主机, 那么需要在centos1上执行.

初始化master(这步只要在主节点上操作)
[root@master ~]# drbdsetup /dev/drbd0 primary -o  //定义为主节点.
第一次设置主节点时用 drbdadm 命令会失败, 所以先用drbdsetup 来做, 以后就可以用drbdadm了.

再次查看drbd当前的状态.
[root@master ~]# cat /proc/drbd
version: 8.3.13 (api:88/proto:86-96)
GIT-hash: 83ca112086600faacab2f157bc5a9324f7bd7f77 build by mockbuild@builder10.centos.org, 2012-05-07 11:56:36
0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----
    ns:1649664 nr:0 dw:0 dr:1649664 al:0 bm:100 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:447388
        [==============>.....] sync'ed: 78.8% (447388/2097052)K
        finish: 0:00:13 speed: 32,096 (31,124) K/sec
现在主备机状态分别是’主/备’, 主机磁盘状态是’实时’, 备机状态是’不一致’.
在第3行, 可以看到数据正在同步中, 即主机正在将磁盘上的数据, 传递到备机上.
现在的进度是0.3%.
设置完之后的第一次同步耗时比较长, 因为需要把整个分区的数据全部同步一遍.
第一次同步完成之后, 就可以对drbd的设备创建文件系统了:
稍等一段时间, 在数据同步完后, 再查看一下两台机器的DRBD状态:
[root@master ~]# cat /proc/drbd
version: 8.3.13 (api:88/proto:86-96)
GIT-hash: 83ca112086600faacab2f157bc5a9324f7bd7f77 build by mockbuild@builder10.centos.org, 2012-05-07 11:56:36
0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
    ns:2097052 nr:0 dw:0 dr:2097052 al:0 bm:128 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0

[root@slave ~]# cat /proc/drbd
version: 8.3.13 (api:88/proto:86-96)
GIT-hash: 83ca112086600faacab2f157bc5a9324f7bd7f77 build by mockbuild@builder10.centos.org, 2012-05-07 11:56:36
0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r-----
    ns:0 nr:2097052 dw:2097052 dr:0 al:0 bm:128 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
现在磁盘状态都是’实时’, 表示数据同步完成了.
#查看drbd的实时状态,我喜欢用service drbd status

drbd的使用.
现在可以把主机上的DRBD设备挂载到一个目录上进行使用.
备机的DRBD设备无法被挂载, 因为它是用来接收主机数据的, 由DRBD负责操作.
在master主服务器上执行:
[root@master ~]# mkfs.ext3 /dev/drbd0
[root@master ~]# mount /dev/drbd0 /d
注意: secondary节点上不允许对drbd设备进行任何操作, 包括只读.
所有的读写操作只能在primary节点上进行.
只有当primary节点挂掉之后, secondary节点才能提升成为primary节点, 继续进行读写操作.
如在备服务器上
[root@slave ~]# mkfs.ext3 /dev/drbd0
mke2fs 1.39 (29-May-2006)
mkfs.ext3: 错误的介质类型 while trying to determine filesystem size

五、Heartbeat的配置过程
真实的服务器之间的连接用交叉线连接,本着简单高效的原则,直接购买即可。
1. 安装, 在两台主机都同样的安装.
yum -y install heartbeat
#奇怪的事,此命令要执行二次,不然heartbeat还真安装不上去,奇怪的问题。
其中Heartbeat配置共涉及3个文件.
/etc/ha.d/ha.cf
/etc/ha.d/haresources
/etc/ha.d/authkeys
/etc/ha.d/resource.d/killnfsd

2. 二个节的配置的配置文件ha.cf都是一样, 文件内容如下:
[root@master ha.d]# vim ha.cf
logfile         /var/log/ha-log
#定义HA的日志名字及存放位置
logfacility     local0
keepalive       2
#设定心跳(监测)时间为2秒
deadtime 10
warntime 10
deadtime        5
#死亡时间定义为5秒
ucast           eth1 192.168.1.229
#采用单播方式,IP地址指定为对方IP
auto_failback   off
#服务器正常后由主服务器接管资源,另一台服务器放弃该资源
node            master
node            slave
#定义节点

[root@slave ha.d]# vim ha.cf
logfile         /var/log/ha-log
#定义HA的日志名字及存放位置
logfacility     local0
keepalive       2
#设定心跳(监测)时间为2秒
deadtime 10
warntime 10
deadtime        5
#死亡时间定义为5秒
ucast           eth1 192.168.1.228
#采用单播方式,IP地址指定为对方IP从服务器心跳接口 IP,主从之间相互指定对方IP
auto_failback   off
#服务器正常后由主服务器接管资源,另一台服务器放弃该资源
node            master
node            slave
#定义节点

2. 编辑双机互联验证文件: authkeys
[root@master ha.d]# vim authkeys
auth 1
1 crc
[root@master ha.d]# chmod 600 authkeys //需要将 /etc/ha.d/authkeys设为600的权限.
[root@slave ha.d]# chmod 600 authkeys

3. 编辑集群资源文件: haresources
root@master ha.d]# vim haresources
master IPaddr::192.168.48.130/24/eth0 drbddisk::r0 Filesystem::/dev/drbd0::/d::ext3 killnfsd
[root@slave ha.d]# vim haresources
master IPaddr::192.168.48.130/24/eth0 drbddisk::r0 Filesystem::/dev/drbd0::/d::ext3 killnfsd
#为服务器加VIP,此文件二台机器上配置一样,千万不要自做聪明在另一台机器上配置成slave

4.编辑脚本文件killnfsd,目的其实就是为了重启nfs服务。这是因为NFS服务切换后,必须重新mount一下nfs共享出来的目录,否则会出现stale NFS file handle的错误。
[root@master ha.d]# vim /etc/ha.d/resource.d/killnfsd
killall -9 nfsd; /etc/init.d/nfs restart; exit 0
[root@master ha.d]# chmod 755 /etc/ha.d/resource.d/killnfsd
[root@slave ha.d]# vim  /etc/ha.d/resource.d/killnfsd
killall -9 nfsd; /etc/init.d/nfs restart; exit 0
[root@slave ha.d]# chmod 755 /etc/ha.d/resource.d/killnfsd

5. 在二个节点启动Heartbeat即可,先在主节点启动
[root@master ha.d]# service heartbeat start
[root@slave ha.d]# service heartbeat start
加到启动项
[root@master ~]# chkconfig --add heartbeat
[root@slave ~]# chkconfig --add heartbeat
#这时就可以在另外的机器上面,正常挂载192.168.4.194:/d到自己的/mnt/data下进行正常的读写了,client会认为这个就是一个提供NFS的机器。



生产环境测试:

测试一、在另一台centos下挂载192.168.48.130:/d,向里面写数据时,忽然重新启动主DRBD,看此时写数据有影响不,发现DRBD+Heartbeat正常切换还是需要些时间的;

测试二、正常状态下关机Primary机,然后看数据有无问题,观察DRBD的status;然后等主机启动后,再观察变化,然后再关机secondary,然后再启动,观察DRBD变化及Heartbeat起作用了没。

测试三、假设此时把primary的eth0 给ifdown了, 然后直接在secondary上进行主的提升,并也给mount了, 发现在primary上测试拷入的文件确实同步过来了。之后把primary的 eth0 恢复后, 发现没有自动恢复主从关系, 经过支持查询,发现出现了drbd检测出现了Split-Brain 的状况, 两个节点各自都standalone了,故障描术如下:Split-Brain detected, dropping connection!这个即时传说中的脑裂了,DRBD官方推荐手动恢复(生产环境下出现这个机率的机会很低的,谁会去故障触动生产中的服务器)
以下手动恢复Split-Brain状况:

i. 在secondary上:
drbdadm secondary r0  
drbdadm disconnect all  
drbdadmin -- --discard-my-data connect r0

ii.在primary上:
drbdadm disconnect all  
drbdadm connect r0

当主节点状态变成 primary/unknow 从节点此时是 secondary/unknow 时,可以采用以下步骤进行解决:
1.从节点操作: drbdadm -- --discard-my-data connect all
2.主节点操作: drbdadm connnect all
基本以上两步就OK了!

测试四、假设Primary因硬件损坏了,需要将Secondary提生成Primay主机,如何处理,方法如下:
在primaty主机上,先要卸载掉DRBD设备.
[root@centos1 /]# umount /d

将主机降级为”备机”
[root@centos1 /]# drbdadm secondary r0  
[root@centos1 /]# cat /proc/drbd  
1: cs:Connected st:Secondary/Secondary ds:UpToDate/UpToDate C r—
现在,两台主机都是”备机”.

在备机centos2上, 将它升级为”主机”.
[root@centos2 /]# drbdadm primary r0  
[root@centos2 /]# cat /proc/drbd  
1: cs:Connected st:Primary/Secondary ds:UpToDate/UpToDate C r—
现在centos2成为主机了.
还得把heartbeat重启下,把VIP移走。






运维网声明 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-660086-1-1.html 上篇帖子: 高可用集群软件Heartbeat介绍 下篇帖子: 浅析 Heartbeat
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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