# drbd常见状态以及维护 drbd1 为主服务器 drbd2 为备服务器 ## 正常情况下 a) 主服务器drbd1显示: ![img](/images/posts/20150720105943185.png) b) 备服务器drbd2显示: ![img](/images/posts/20150720110122605.png) ## 主服务器drbd1的网络出现故障,备服务器处于正常状态 a) 当前状态 主服务器drbd1此时显示为: ![img](/images/posts/20150720110138387.png) 主服务器处于StandAlone状态,表示网络配置不可用,资源还没有被连接或者是被管理断开。 备服务器drbd2此时显示为: ![img](/images/posts/20150720110146384.png) 当drbd2探测到对等节点宕机(无论是真正的硬件故障还是人工干预),drbd2都将其连接状态有Connected变为WFConnection,直到对等节点恢复。Drbd资源会在此时运行disconnected模式下。在disconnected模式下,资源以及和棋相关的块设备都是可用的,并可以在必要时进行升降级,但是并不能将修改复制到对等节点。 b) 处理方法 将备服务器drbd2提升为主服务器,提供服务,操作如下: ![img](/images/posts/20150720110220230.png) 新数据将写入drbd2服务器中保存。 c) drbd1节点恢复正常后 drbd1当前状态为StandAlone,此时,drbd1是不会和drbd2互相联系的。 将drbd1节点降级为备服务器,然后连接当前主服务器drbd2,操作如下: ![img](/images/posts/20150720110227873.png) ## 备服务器drbd2的网络出现故障,主服务器处于正常状态 a) 当前状态 主服务器drbd1此时显示为: ![img](/images/posts/20150720110308696.png) 备服务器drbd2此时显示为: ![img](/images/posts/20150720110317676.png) b) 处理方法 不做处理,还是由主服务器提供服务,数据还是写入主服务器drbd1中,但数据未被同步到drbd2中。 c) drbd2节点恢复后 在drbd2服务器上操作如下,能清楚看到drbd2节点与drbd1主服务器连接上了,会进行同步,将主服务器上drbd1的数据同步过来,最后达到一致状态。 ![img](/images/posts/20150720110343758.png) drbd1主服务器状态变化如下: ![img](/images/posts/20150720110355365.png) ## 主服务器drbd1和备服务器drbd2都出现故障 a) 当前状态 主服务器drbd1此时显示为: ![img](/images/posts/20150720110517331.png) 备服务器drbd2此时显示为: ![img](/images/posts/20150720110525042.png) 表示主备节点都处于单机状态,互相失去联系。 b) 处理方法 当所有节点都处于宕机状态时,不能继续提供服务,只能手动恢复一个或者多个节点。 c) 当只有一个节点(主服务器drbd1或者备服务器drbd2)可恢复故障 此时处于单机状态,不用其他操作,单机提供服务即可,可往磁盘读取数据,等待另一个节点的恢复后再进行后续操作。 d) 当主服务器drbd1节点先恢复故障,备服务器drbd2后恢复故障。 主节点恢复后,提供服务,数据存于drbd1节点的磁盘中,而后drbd2节点也恢复后,互相不能联系,此时处于脑裂状态,两节点都处于standalone状态,如下所示: ![img](/images/posts/15586799263277.png) ![img](/images/posts/15586799637680.png) 恢复步骤为: 第一步,在drbd2备服务器上操作: ![img](/images/posts/15586800014711.png) ![img](/images/posts/15586800299222.png) 第二步,在drbd1主服务器上操作后,连接上drbd2: ![img](/images/posts/15586800663590.png) 第三步,在drbd2备服务器上状态变化为: ![img](/images/posts/15586800964780.png) 此时,主备节点都相互联系上,drbd1主服务器上的数据会同步到drbd2备服务器上。 e) 当备服务器drbd2节点先恢复故障,主服务器drbd1后恢复故障。 备服务器先恢复,则将备服务器drbd2升级为主服务器,提供服务,待原来的主节点drbd1恢复后则降为备服务器节点,drbd2上的数据将会同步到drbd1上。 ![img](/images/posts/1558680131136.png) 备节点恢复后,如果之前主节点有挂载磁盘,则先卸载掉,在drbd1节点上操作如下: ![img](/images/posts/15586801999780.png) ![img](/images/posts/15586801759034.png) ![img](/images/posts/15586802484963.png) 在drbd2节点(当前主服务器)操作如下: ![img](/images/posts/15586802779106.png) 此时,drbd1节点成为备服务器,联系上主节点drbd2,主节点drbd2的数据将同步到drbd1上。 ![img](/images/posts/15586803042670.png) ``` 查看资源的连接状态 [root@node1 ~]# drbdadm cstate r1 Connected 资源的连接状态;一个资源可能有以下连接状态中的一种 StandAlone 独立的:网络配置不可用;资源还没有被连接或是被管理断开(使用 drbdadm disconnect 命令),或是由于出现认证失败或是脑裂的情况 Disconnecting 断开:断开只是临时状态,下一个状态是StandAlone独立的 Unconnected 悬空:是尝试连接前的临时状态,可能下一个状态为WFconnection和WFReportParams Timeout 超时:与对等节点连接超时,也是临时状态,下一个状态为Unconected悬空 BrokerPipe:与对等节点连接丢失,也是临时状态,下一个状态为Unconected悬空 NetworkFailure:与对等节点推动连接后的临时状态,下一个状态为Unconected悬空 ProtocolError:与对等节点推动连接后的临时状态,下一个状态为Unconected悬空 TearDown 拆解:临时状态,对等节点关闭,下一个状态为Unconected悬空 WFConnection:等待和对等节点建立网络连接 WFReportParams:已经建立TCP连接,本节点等待从对等节点传来的第一个网络包 Connected 连接:DRBD已经建立连接,数据镜像现在可用,节点处于正常状态 StartingSyncS:完全同步,有管理员发起的刚刚开始同步,未来可能的状态为SyncSource或PausedSyncS StartingSyncT:完全同步,有管理员发起的刚刚开始同步,下一状态为WFSyncUUID WFBitMapS:部分同步刚刚开始,下一步可能的状态为SyncSource或PausedSyncS WFBitMapT:部分同步刚刚开始,下一步可能的状态为WFSyncUUID WFSyncUUID:同步即将开始,下一步可能的状态为SyncTarget或PausedSyncT SyncSource:以本节点为同步源的同步正在进行 SyncTarget:以本节点为同步目标的同步正在进行 PausedSyncS:以本地节点是一个持续同步的源,但是目前同步已经暂停,可能是因为另外一个同步正在进行或是使用命令(drbdadm pause-sync)暂停了同步 PausedSyncT:以本地节点为持续同步的目标,但是目前同步已经暂停,这可以是因为另外一个同步正在进行或是使用命令(drbdadm pause-sync)暂停了同步 VerifyS:以本地节点为验证源的线上设备验证正在执行 VerifyT:以本地节点为验证目标的线上设备验证正在执行 查看资源角色的命令 [root@node1 ~]# drbdadm role r1 Primary/Secondary (在前面为当前节点) Parimary 主:资源目前为主,并且可能正在被读取或写入,如果不是双主只会出现在两个节点中的其中一个节点上 Secondary 次:资源目前为次,正常接收对等节点的更新 Unknown 未知:资源角色目前未知,本地的资源不会出现这种状态 查看硬盘状态 [root@node1 ~]# drbdadm dstate r1 UpToDate/UpToDate 本地和对等节点的硬盘有可能为下列状态之一: Diskless 无盘:本地没有块设备分配给DRBD使用,这表示没有可用的设备,或者使用drbdadm命令手工分离或是底层的I/O错误导致自动分离 Attaching:读取无数据时候的瞬间状态 Failed 失败:本地块设备报告I/O错误的下一个状态,其下一个状态为Diskless无盘 Negotiating:在已经连接的DRBD设置进行Attach读取无数据前的瞬间状态 Inconsistent:数据是不一致的,在两个节点上(初始的完全同步前)这种状态出现后立即创建一个新的资源。此外,在同步期间(同步目标)在一个节点上出现这种状态 Outdated:数据资源是一致的,但是已经过时 DUnknown:当对等节点网络连接不可用时出现这种状态 Consistent:一个没有连接的节点数据一致,当建立连接时,它决定数据是UpToDate或是Outdated UpToDate:一致的最新的数据状态,这个状态为正常状态 查看同步进度 [root@node1 ~]# cat /proc/drbd 或者 执行/usr/local/drbd/sbin/drbd-overview version: 8.4.3 (api:1/proto:86-101) GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by root@localhost.localdomain, 2016-04-24 20:16:24 0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r----- ns:2767088 nr:0 dw:0 dr:2774680 al:0 bm:168 lo:0 pe:1 ua:7 ap:0 ep:1 wo:f oos:18202972 [=>..................] sync'ed: 13.3% (17776/20476)M finish: 0:12:59 speed: 23,344 (22,492) K/sec 由此可见:进度已经完成了13.3%,传输速度大概22M/S 注: ds是磁盘状态信息 dw是磁盘写信息 dr是磁盘读信息 ###########################测试验证################################### 格式化文件系统(文件格式根据自己的系统环境选择) [root@node1 ~]# mkfs.ext4 /dev/drbd0 挂载此文件系统 [root@node1 ~]# mkdir /data [root@node1 ~]# mount /dev/drbd0 /data/ 在挂载data目录中创建一个测试文件,然后卸载挂载目录,然后切换主备节点,在备用节点上查看刚刚建立的测试文件还是否存在 Node1: [root@node1 ~]# mkdir /data/test [root@node1 ~]# umount /data/ 将node1变为备用节点 [root@node1 ~]# drbdadm secondary r1 [root@node1 ~]# drbdadm role r1 Secondary/Secondary Node2上: 将node2变为主节点 [root@node2 ~]# drbdadm primary r1 [root@node2 ~]# drbdadm role r1 Primary/Secondary 挂载设备,然后看文件是否存在 [root@node2 ~]# mount /dev/drbd0 /mnt/ [root@node2 ~]# cd /mnt/ [root@node2 mnt]# ls test OK! 到这里已经算是完成了! ```