Amazon LinuxでDRBDが起動しない場合の復旧方法

ディスクが壊れている?

起動中のDRBDのステータスを見ていたらDisklessという表示に出くわしました。今までは両方ともUpToDateだったのにいつの間に変わってしまったのでしょうか。

$ sudo service drbd status
drbd driver loaded OK; device status:
version: 8.3.11 (api:88/proto:86-96)
srcversion: 2D876214BAAD53B31ADC1D6 
m:res        cs         ro                 ds                 p  mounted  fstype
0:drbd_res0  Connected  Primary/Secondary  Diskless/UpToDate  C  /data    xfs

メタディスクの作り直し

もとに戻すためにまずは障害があるサーバーをセカンダリに降格させます。Heartbeatを使っていればすぐですね。

$ sudo service heartbeat stop                           
Stopping High-Availability services: Done.

ループバックデバイスを作り直してメタディスクを作成します。これでセカンダリの中身が空になっています。

$ sudo dd if=/dev/zero of=/var/drbd-meta bs=1M count=128
128+0 records in
128+0 records out
134217728 bytes (134 MB) copied, 4.01294 s, 33.4 MB/s

$ sudo losetup /dev/loop0 /var/drbd-meta

$ sudo drbdadm create-md drbd_res0
Writing meta data...
initializing activity log
NOT initialized bitmap
New drbd meta data block successfully created.
success

DRBDの再起動

再起動をしてステータスを更新します。

$ sudo service drbd stop
Stopping all DRBD resources: .

$ sudo service drbd start
  --==  Thank you for participating in the global usage survey  ==--
The server's response is:

node already registered
Starting DRBD resources: [ d(drbd_res0) s(drbd_res0) n(drbd_res0) ].

$ sudo service drbd status
drbd driver loaded OK; device status:
version: 8.3.11 (api:88/proto:86-96)
srcversion: 2D876214BAAD53B31ADC1D6 
m:res        cs          ro                 ds                     p        mounted  fstype
0:drbd_res0  SyncTarget  Secondary/Primary  Inconsistent/UpToDate  C
...          sync'ed:    3.5%               (4948/5120)Mfinish:    0:06:50  12,312   (12,312)  want:  51,200  K/sec

$ sudo service drbd status
drbd driver loaded OK; device status:
version: 8.3.11 (api:88/proto:86-96)
srcversion: 2D876214BAAD53B31ADC1D6 
m:res        cs          ro                 ds                     p        mounted  fstype
0:drbd_res0  SyncTarget  Secondary/Primary  Inconsistent/UpToDate  C
...          sync'ed:    76.9%              (1188/5120)Mfinish:    0:02:17  8,856    (8,744)  want:  51,200  K/sec

$ sudo service drbd status
drbd driver loaded OK; device status:
version: 8.3.11 (api:88/proto:86-96)
srcversion: 2D876214BAAD53B31ADC1D6 
m:res        cs         ro                 ds                 p  mounted  fstype
0:drbd_res0  Connected  Secondary/Primary  UpToDate/UpToDate  C

Inconsistentを経て、プライマリとセカンダリが共にUpToDateになりましたね。データが同期されたと思います!

まとめ

以前、Heartbeatによって障害が発生した際にマスターからスレーブに切り替える方法を学びましたが、今回は、障害が発生したディスクを復旧させる方法について学びました。EC2の場合、障害が起きたらインスタンスごとターミネートしてAMIから新規にインスタンスを立ち上げるという方法もありますが、サーバー自体が動いているのであればディスクの作り直しのみで済みますので簡単ですね。今日から君もサーバー運用担当者!?

参考情報

第7章 トラブルシューティングとエラーからの回復