[DRBD新手上路] -- 节点切换

4.2. 节点切换

我们来演示一下主节点挂掉,然后重新恢复连接的情况。这里我们已经事先设定好 s1.yejr.com 为 primary 节点了。

[root@s1.yejr.com ~]# ifdown eth1
[root@s1.yejr.com ~]# cat /proc/drbd 
version: 8.2.5 (api:88/proto:86-88)
GIT-hash: 9faf052fdae5ef0c61b4d03890e2d2eab550610c build by root@s1.yejr.com, 2008-03-11 17:09:17
 0: cs:StandAlone st:Primary/Unknown ds:UpToDate/DUnknown   r---
[root@s1.yejr.com ~]# drbdadm state db
Primary/Unknown

可以看到,在primary节点上找不到secondary节点了。再来看看secondary节点上的状态:

[root@s1.yejr.com ~]# cat /proc/drbd 
version: 8.2.5 (api:88/proto:86-88)
GIT-hash: 9faf052fdae5ef0c61b4d03890e2d2eab550610c build by root@s1.yejr.com, 2008-03-11 17:09:17
 0: cs:StandAlone st:Secondary/Unknown ds:UpToDate/DUnknown   r---
[root@s1.yejr.com ~]# drbdadm state db
Secondary/Unknown

在secondary节点上也找不到primary了。
现在,让prmary节点的网卡启动:

[root@s1.yejr.com ~]# ifup eth1
[root@s1.yejr.com ~]# cat /proc/drbd 
version: 8.2.5 (api:88/proto:86-88)
GIT-hash: 9faf052fdae5ef0c61b4d03890e2d2eab550610c build by root@s1.yejr.com, 2008-03-12 13:59:38
 0: cs:WFConnection st:Primary/Unknown ds:UpToDate/DUnknown C r---

还是未连接状态。
在刚才关闭网卡的primary节点上执行如下命令:

[root@s1.yejr.com ~]# drbdadmin connect db

意思是让drbd主动去连接另一个节点。

[root@s1.yejr.com ~]# cat /proc/drbd
version: 8.2.5 (api:88/proto:86-88)
GIT-hash: 9faf052fdae5ef0c61b4d03890e2d2eab550610c build by root@s1.yejr.com, 2008-03-12 13:59:38
 0: cs:Connected st:Primary/Secondary ds:UpToDate/UpToDate C r---
[root@s1.yejr.com ~]# drbdadm state db
Primary/Secondary

可以看到,已经呈连接状态。
如果是secondary节点挂掉了,它恢复正常后,想要再次连接primary节点的话,考虑到可能会有数据丢失,可以采用以下方式来连接:

[root@s1.yejr.com ~]# drbdadmin -- --discard-my-data connect db

它告诉drbd,secondary节点上的数据可能是不正确的,要以primary节点上的为准。这个命令只能在secondary节点上使用,毕竟数据是以primary节点为准的,而非secondry节点。
不过,如果是primary节点挂掉了,这个时候就应该把原来的secondary节点提升为primary的角色,等原来的primary恢复之后,只能先降级成为secondary节点了,否则是无法再次正确连接另一个节点的。

技术相关: