DRBD接続障害

  • 現象パターン1

突然次のような状態になってしまい、どうしても相手を認識しない

# cat /proc/drbd
version: 8.3.8 (api:88/proto:86-94)
GIT-hash: d78846e52224fd00562f7c225bcc25b2d422321d build by [email protected], 2010-06-04 08:04:16
 0: cs:StandAlone ro:Secondary/Unknown ds:UpToDate/DUnknown   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:12

そんなとき、DRBD+Keepalived+iscsi 障害 復旧 - メモに従い

[root@z151 ~]# drbdadm down all
[root@z151 ~]# drbdadm attach all
[root@z151 ~]# drbdadm invalidate all
[root@z151 ~]# drbdadm connect all
[root@z152 ~]# drbdadm connect all

を実行すると見事につながった

[root@z151 ~]# cat /proc/drbd
version: 8.3.8 (api:88/proto:86-94)
GIT-hash: d78846e52224fd00562f7c225bcc25b2d422321d build by [email protected], 2010-06-04 08:04:16
 0: cs:SyncTarget ro:Secondary/Primary ds:Inconsistent/UpToDate C r----
    ns:0 nr:58304 dw:58240 dr:0 al:0 bm:3 lo:3 pe:2 ua:2 ap:0 ep:1 wo:b oos:5178720
        [>....................] sync'ed:  1.2% (5056/5112)M queue_delay: 0.0 ms
        finish: 0:07:23 speed: 11,648 (11,648) want: 10,240 K/sec

(追記)
StandAloneになるのは、単にスプリットブレインからデータを保護するための措置らしい。
トラブルシューティングFAQ

Q. コネクト状態が「StandAlone」と表示されてしまいます
スプリットブレインが検知され、DRBDがどちらのHDDが最新のデータが保存されているかを判断できなくなったため、同期しない状態で動作しています。これは障害ではなくDRBDがデータを保護するための「安全装置」ですので、古い(捨てても良い)データの入っているHDDが搭載されているノードで「# drbdadm invalidate <リソース名> 」を実行して接続しなおします。

  • 現象パターン2

どういうわけか両ノードで次のような状態になり、相手を認識しない。

[root@z151 ~]# service drbd status
drbd driver loaded OK; device status:
version: 8.3.8 (api:88/proto:86-94)
GIT-hash: d78846e52224fd00562f7c225bcc25b2d422321d build by [email protected], 2010-06-04 08:04:16
m:res  cs            ro                 ds                 p  mounted  fstype
0:r0   WFConnection  Secondary/Unknown  Outdated/DUnknown  C
[root@z152 ~]# service drbd status
drbd driver loaded OK; device status:
version: 8.3.8 (api:88/proto:86-94)
GIT-hash: d78846e52224fd00562f7c225bcc25b2d422321d build by [email protected], 2010-06-04 08:04:16
m:res  cs            ro                 ds                 p  mounted  fstype
0:r0   WFConnection  Secondary/Unknown  UpToDate/DUnknown  C

そこで下記に従ったら見事につながった。

[root@z152 ~]# drbdadm -- --discard-my-data connect r0
[root@z151 ~]# drbdadm disconnect r0
[root@z151 ~]# drbdadm connect r0
[root@z151 ~]# service drbd status
drbd driver loaded OK; device status:
version: 8.3.8 (api:88/proto:86-94)
GIT-hash: d78846e52224fd00562f7c225bcc25b2d422321d build by [email protected], 2010-06-04 08:04:16
m:res  cs         ro                   ds                 p  mounted  fstype
0:r0   Connected  Secondary/Secondary  UpToDate/UpToDate  C

DRBD アドバンスド・チュートリアルP23

・データを破棄するノードで

drbdadm -- --discard-my-data connect <リソース>

・他ノードで

drbdadm disconnect <リソース>
drbdadm connect <リソース>

・DRBD間の接続が回復し、データ同期が始まる