winDRBD Beta3
winDRBD とは
winDRBD は Windows 版の DRBD であり、
https://github.com/LINBIT/windrbd
で OpenSource として開発が進んでいます。ただ、実際に自分でビルドして使ってみるには、Windows の EWDK や cygwin, さらにドライバのサイン問題もクリアしなくてはならず手間がかかります。さらにここで作成されるバイナリは、DRBD 用のドライバのみであるので、drbd-utils の windrbd branch も必要なりますがまだオープンになっていません。そこで、LINBIT にインストーラを作成してもらったので、我々の評価結果を紹介します。
なお、ここで公開する内容は Beta3 時点のものであり将来のリリースで変更される可能性があることに注意してください。
制限事項
Beta3 では今のところいくつか制限があります。主要なものをリリースノートから抜粋します。
- Windows のエクスプローラーから DRBD デバイスが見えるようになるためには一旦 logout/login しないといけない。この問題は fix 中である。
- 現在は NTFS のみサポートである。
以下は Release 1.0 でも継続される制限である。
- 自動プロモーションはサポートされない。
- C: ドライブは DRBD デバイスに使用できない。
- 32bit バージョンはサポートされない、64bit だけである。
- Windown 7 以降がサポート
- インストール後、リブートが必要である。ただし、これは 1.0 前に fix されるかもしれない。
インストール
では実際に Windows7, 10 にインストールしてみます。紹介する手順、イメージ画像は Windows 7 のものですが、Windows 10 でも手順は同じです。インストーラを起動すると次のメッセージが表示され、その後リブートします。
リブート後、おなじみの drbdadm コマンドなどにアクセスできます。
ファイル構成
winDRBD 関連の主要なファイルは C:\windrbd にインストールされます。以下に主要なファイルのパスを示します。
# winDRBD driver C:\Windows\System32\drivers\drbd.sys # winDRBD 固有の設定ツール C:\Windows\System32\windrbd.exe # ユーザランドのバイナリ(cygwin で動作) C:\Windows\System32\drbdadm.exe C:\Windows\System32\drbdmeta.exe C:\Windows\System32\drbdsetup.exe C:\windrbd\usr\sbin\drbd-overview C:\windrbd\usr\sbin\drbdadm.exe C:\windrbd\usr\sbin\drbdmeta.exe C:\windrbd\usr\sbin\drbdsetup.exe C:\Windows\System32\cygwin1.dll # 構成ファイル C:\windrbd\etc\drbd.conf C:\windrbd\etc\drbd.d\global_common.conf C:\windrbd\etc\drbd.d\w0.res # crm-fence-peer.sh などのスクリプト C:\windrbd\usr\lib\drbd\*.sh # man pages C:\windrbd\usr\share\man\...
DRBD 設定
では実際に winDRBD を構成してみます。
winDRBD 固有の設定ツール
winDRBD の特徴として windrbd.exe という設定ツールがあります。
ここでよく使用するサブコマンドは以下になります。
- log-server
windrbd driver の log message を表示する
- hide-filesystem <drive>
<drive> を winDRBD の下位デバイスとして使用するので直接アクセスできないようにする。
- show-filesystem <drive>
<drive> にアクセスできるようにする。
実際に作業するときは2つのコマンドプロンプトを開き、一方で
$ windrbd.exe log-server
としログを表示しながら、もう一方でコマンドを入力するという使い方になります。Linux だと tail -f /var/log/messages を見ながら作業するのと同じです。
DRBD 構成ファイル
DRBD 構成ファイルは C:\windrbd\etc\drbd.d\*.res を編集していくことになります。winDRBD は DRBD9 のソースをベースにしてますので、設定方法も DRBD9 の構成ファイルと基本的には同じです。ただ、disk, device key に Windows 固有のドライブ指定を使います。この例では下位デバイスがドライブ E:, DRBD デバイスが H: になり、ユーザはH: ドライブを介して DRBD デバイスを使用します。minor 番号はノードで一意なものを指定します。
disk "E:"; device "H:" minor 5 # meaning H:
構築例
ここでは、Windows7, 10 と CentOS7.5 を用いた 2node 構成を作成し、Windows上のパーティッションを Linux 側に複製します。Windows 上のパーティッションが壊れても Linux 側の複製から復活できることを確認します。Windows 側、Linux 側ともに VirtualBox を使用しました。
Windows 側 | Linux 側 | |
ホスト名, IP アドレス | tate-z2, 10.30.103.2 | tate-z4, 10.30.103.4 |
ディスク | E: NTFS 2G F: MetaDisk area 10M (未フォーマット) | /dev/sdb1 2G+10M = 2058M (internal metadisk) |
Windows 側の設定
- Firewall
テスト目的なのでとりあえず firewall は無効にしました。 - partition 準備
E: に 2G partition を切り NTFS でフォーマットしておきます。ここに適当なファイルをコピーしておきます。この例では C:\windrbd をコピーしました。F: にメタデータ領域を用意しておきます。概算のサイズは Cmb / 32768 + 1 = 2048/32768 + 1 = 2M なので 10M partition を準備しておきます。
コマンドプロンプトの管理者権限で C:\windrbd\etc\w0.res を編集します。サンプルがインストールされるのでそれをベースに環境に合わせて変更するだけです。
include "global_common.conf"; resource "w0" { protocol A; net { use-rle no; verify-alg crc32c; } on tate-z4 { address 10.30.103.4:7600; node-id 1; volume 17 { disk /dev/sdb1; device /dev/drbd1; flexible-meta-disk internal; } } on tate-z2 { address 10.30.103.2:7600; node-id 2; volume 17 { disk "E:"; device "H:" minor 5; # meaning H: meta-disk "F:"; } } }
あとは Linux 版同様に構成します。
$ drbdadm.exe create-md w0
$ drbdadm.exe up w0
$ drbdadm.exe --force primary w0
ここで一旦 logout/login すると H: に DRBD 用のファイルシステムが見えるようになり、E: ドライブにあったファイルが確認できます。
Linux 側の設定
- Firewall
テスト目的なのでとりあえず firewall は無効にしました。 - partition 準備
DRBD9 をインストールし、/dev/sdb1 に2048+10=2058M の partition を準備しました。
端末から、 /etc/drbd.d/w0.res を構成します。基本的に Windowns のものといっしょですが、まだ、device の新形式に対応していないので、旧形式で書きました。以下が diff になります。
# diff w0.res.win7 w0.res 1,2d0 < include "global_common.conf"; < 26c24 < device "H:" minor 5; # meaning H: --- > device "/dev/drbd5";
あとは通常どおり、以下を実行します。
# drbdam create-md w0 # drbdam up w0
up した後、同期が始まりますので、別端末の drbdtop で監視します。
これで構築完了です。
Windows 側でファイルシステムを破壊し、再同期をかけてみる
同期が終わったら、Windows 側のファイルシステムを壊し、Linux 側の複製から復活できるか確認してみます。
$ drbdadm.exe secondary w0 $ drbdadm.exe down w0 $ windrbd.exe show-filesystem e:
エクスプローラーから E: ドライブを NTFS で再フォーマットします。
フォーマット後、再コネクトしファイルシステムを復活させます。
$ drbdadm.exe create-md w0 $ drbdadm.exe up w0
up した後に、同期が始まります。
同期完了後、プライマリにし
$ drbdadm.exe primary w0
H: にアクセスすると最初に作成したファイルが復活してます。
*) リブートした場合は、再度 logout/login で H: が見えるようになります。
また、detach を使うことで H: ドライブをディスクレスで動作継続させながらの復活も Linux 版と同様です。
$ drbdadm.exe detach w0 $ windrbd.exe show-filesystem e:
ここで、ディスクレスになるので、H: ドライブを Linux 側のディスクのみで使用しながらローカルディスクを復活できます。
再フォーマット後、
# drbdadm.exe create-md w0 # drbdadm.exe attach w0
で同期が始まります。
Windows 10 build 1809 から使えなくなっちゃいましたね。
こちらの環境では先週金曜PMに1809が降ってくるまで(1803)は使えたのに、1809にしたら起動してなくて、むりくりupしたらOSごとご臨終される始末・・・。
うーむ。困った。
最新のwinDRBD 0.9.1を試してみてください。
よろしくお願いします。