DRBDは, ブロックレベルでのデータ冗長化を実現するソフトウェアである.
仕組みはよくわからない. 一番実直に作るとすると, デバイスを固定セグメントで分割して, それぞれについて同期しているのか/していないのかを記録しておくという仕組みだろう. たぶんそうなってるんだろう.
こういうソフトウェアは, 直感的にすごく危険な気がするが, 少なくともユーザの誤った操作については安全弁が働く. 例えば, セカンダリにはライトはおろかリードすら許されないなど. だけど, 電断した場合などはどうなるのか?というのは大変気になる. いかにも破綻しそうだ. まぁいい. はっきり言ってこんなレガシーでしょぼいソフトウェアにはテンションが上がらない.
使い方は簡単で,
- 設定ファイルを両ノードにコピーする. これはAnsibleのcopyでも使えばいいだろう. 設定ファイルは全く同じであることを前提にしているので, 実直にコピーした方がいい.
- 両ノードでメタデータを作る.
drbdadm create-md
- プライマリ(となるノード)とセカンダリ両方で,
drbdadm up
する. これは,service drbd start
に相当することもしてくれる. たぶん, drbdデーモンを直接いじるべきではない. "となる"と言ったのは, セカンダリが初期値だからである. - 同期の状態を知りたいのであれば,
drbd-overview
を使うといい. 詳しく知りたい場合は,cat /proc/drbd
とかservice drbd status
を使う. - upすると, とりあえず繋がる.
- この状態で, Inconsistent/Inconsistentなので, セカンダリ側を
drbdadm invalidate
して同期を開始する. 終わると, UpToDate/UpToDateとなる. - プライマリ(となるノード)を実際にプライマリに昇格させる
drbdadm primary
- この時点でひとまずの設定は完了した
- drbdデバイスの上にファイルシステムをマウントした場合, ファイルシステムをアンマウントしないとセカンダリに降格することすら出来ないので注意(ここでも安全弁が働いてる)
運用がとても簡単で助かる.