この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
ディスクが壊れている?
起動中の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から新規にインスタンスを立ち上げるという方法もありますが、サーバー自体が動いているのであればディスクの作り直しのみで済みますので簡単ですね。今日から君もサーバー運用担当者!?