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.2tate-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

で同期が始まります。