一、DRBD数据不⼀致时如何⼿⼯同步

⼿⼯同步的策略⼀般是选择丢弃其中⼀个节点上的数据,把另⼀个节点的数据同步过来。

由于两个节点都有新的数据,丢弃⼀个节点的数据意味着会有部分数据的丢失,这是DRBD脑裂恢复必须付出的代价。

1.1、确定保留哪个节点的数据

在⼿⼯同步前,需要先确定保留哪个节点的数据。⼀般情况下,保留当前正在提供服务的节点的数据。

因为被放弃的数据是找不回来的,所以放弃数据时需要慎重。最好先检查⼀下,服务的数据是否正常,如果使⽤数据库,还需要检查⼀下,数据库的⽇志是否有错误。确保保留数据的节点是可以正常⼯作的。

这⾥假定保留数据的节点为ha01,放弃数据的节点为ha02。

1.2、将DRBD上的服务切换到保留的节点

  • 如果服务已经在保留数据的节点(ha01)上运⾏,跳过这个步骤,进⼊下⼀个步骤。

  • 如果服务在放弃数据的节点(ha02)上运⾏,那么需要先将其切换到保留数据的节点(ha01)上。

在HA网页上切换服务到ha01节点,检查服务状态,等待服务在ha01上启动成功(变为started 状态)

1.3、设置全局禁⽤

在ha01服务器上执⾏:

# hasvcadm --global --disable

  • 注意:您也可以在HA网页上设置全局禁用;

1.4、确保drbdx的primary端正处于WFConnection状态

在两个节点执⾏如下命令:

# cat /proc/drbd
version: 8.4.11-1 (api:1/proto:86-101)
GIT-hash: 98b5d02dac32c415c6089b7e8f6e3b4b1d716bf4 build by support@skybilityha.com, 2018-05-14 17:19:11
0: cs:WFConnection ro:Secondary/Unknown ds:UpToDate/DUnknown A r-----
ns:0 nr:0 dw:48116 dr:122880 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:d oos:0d

查看drbdx是否处于WFConnection状态,如果是,就直接进⼊下⼀个步骤。

如果不是,再在对应节点上执⾏如下命令,让drbdx资源变成WFConnection 状态,然后进⼊下⼀个步骤。

drbdadm disconnect drbd0 &>/dev/null
drbdadm connect drbd0

1.5、放弃secondary端的数据

在ha02节点上执⾏:

# hadmctl --forcesecondary drbd0

1.6、触发同步

在ha01节点上执⾏:

# drbdadm adjust drbd0

在ha01上检查drbd状态:

# cat /proc/drbd

这个时候,DRBD应该会触发同步,等待数据同步完成(UpToDate/UpToDate状态)。

如果DRBD⼀直⽆法连接上,还是DUnknown状态,则可能是两个节点上的数据经过多次变更, 已经⽆法同步了,参照如何处理Unrelated data,aborting错误处理

1.7、取消全局禁⽤

DRBD完成数据同步后,需要取消全局禁⽤,使服务再次接受HA的管理。

# hasvcadm --enable --global

  • 注意:您也可以在HA网页上设置全局禁用;

二、如何处理Unrelated data,aborting错误

本章节假定需要保留ha01节点上的数据,放弃ha02节点上的数据。

2.1、设置全局禁⽤

如果HA在运⾏,则需要设置全局禁⽤,避免drbd/dev⾃动启动,也防⽌在恢复的过程中,发⽣服务切换。 在ha01上执⾏:

# hasvcadm --global --disable

2.2、放弃备机DRBD数据

(1)在ha02上执⾏drbdadm down命令,将drbdX停⽌下来:

# drbdadm down drbd0

(2)在ha02上放弃原有的数据

# dd if=/dev/zero of=/dev/drbd/lower/disk bs=1M count=10

  • 备注: /dev/drbd/lower/disk为DRBD底层设备,通过drbdadm sh-ll-dev drbd0查询。

  • 注意:dd误操作会破坏设备上的数据,⼀定要查清楚drbd0对应的底层设备才操作,千万不要在预定保留数据的节点上执⾏,以防⽌破坏正确的数据。

(3)在ha02节点上重建DRBD:

# drbdadm create-md drbd0

2.3、触发DRBD同步

(1)在ha02节点上发起连接

# drbdadm adjust drbd0

(2)在ha01节点上发起连接,触发同步

# drbdadm adjust drbd0

(3)在ha02节点上查询drbd状态,看是否触发了数据同步(连接状态为Connected或SyncSource),如果触发了配置同步, 则说明操作成功,等待同步完成(变为Connected状态)

# cat /proc/drbd

2.4、取消全局禁⽤

待DRBD同步完成后,取消全局禁⽤

# hasvcadm --enable --global