第12章 DRBD Proxyの使用

目次

12.1. DRBD Proxyの使用においての検討事項
12.2. インストール
12.3. ライセンスファイル
12.4. LINSTORを使用した設定
12.5. リソースファイルを使用した設定
12.6. DRBD Proxyの制御
12.7. DRBD Proxyプラグインについて
12.7.1. WAN側の帯域幅制限を使用する
12.8. トラブルシューティング

12.1. DRBD Proxyの使用においての検討事項

DRBD Proxyプロセスは、DRBDが設定されているマシン上に直接配置するか、個別の専用サーバに配置することができます。DRBD Proxyインスタンスは、複数のノードの複数のDRBDデバイスのプロキシとして機能することができます。

DRBD ProxyはDRBDに対して完全に透過的です。通常は大量のデータパケットがDRBD Proxyを含む転送経路に溜まるため、アクティビティログがかなり大きくなります。これは、プライマリノードのクラッシュ後の長い再同期の実行を引き起こす可能性があるので、それはDRBDの csums-alg 設定を有効にすることをお勧めします。

DRBD Proxyのより詳細な情報については「DRBD Proxyによる遠距離レプリケーション」をご参照ください。

DRBD Proxy 3ではLiunxカーネル2.6.26以降からのカーネルの機能を使用しています。そのため、RHEL5などの古いシステムでは使用できません。なお、現在でもDRBD Proxy1のパッケージは提供しています。[11].

12.2. インストール

DRBD Proxyを入手するには、(日本では)サイオステクノロジー株式会社またはその販売代理店に連絡してください。特別な理由がない限り、常に最新バージョンのDRBD Proxyを使用してください。

DebianとDebianベースのシステム上でDRBD Proxyをインストールするには、dpkgを次のように使用します(DRBD Proxyのバージョンとアーキテクチャは、ターゲットのアーキテクチャに合わせてください)。

# dpkg -i drbd-proxy_3.2.2_amd64.deb

RPMベースのシステム(SLESやRedhat)にDRBD Proxyをインストールする場合は、次のコマンドを使用します(DRBD Proxyのバージョンとアーキテクチャは、ターゲットのアーキテクチャに合わせてください)。

# rpm -i drbd-proxy-3.2.2-1.x86_64.rpm

DRBD Proxyの設定にはdrbdadmが必要なので、これもインストールします。

DRBD Proxyバイナリだけでなく、/etc/init.d に通常に入る起動スクリプトもインストールします。このスクリプトは単に起動/停止するだけでなく、drbdadm を使ってDRBD Proxyの動作も設定します。

12.3. ライセンスファイル

DRBD Proxyの実行には、ライセンスファイルが必要です。DRBD Proxyを実行したいマシンにライセンスファイルを設定してくださいこのファイルは drbd-proxy.license と呼ばれ、対象マシンの /etc ディレクトリにコピーされ、また drbdpxy ユーザー/グループに所有されている必要があります。

# cp drbd-proxy.license /etc/

12.4. LINSTORを使用した設定

DRBD Proxyは、「LINSTORによるDRBD Proxy」 で説明しているようにLINSTORを使って構成できます

12.5. リソースファイルを使用した設定

DRBD Proxyもまたリソースファイルを編集して構成します。設定は、追加のオプションセクション proxy とホストセクション内の proxy on セクションで行います。

DRBDノードで直接実行されるプロキシのDRBD Proxyの設定例を次に示します。

resource r0 {
        protocol A;
        device     /dev/drbd15;
        disk       /dev/VG/r0;
        meta-disk  internal;

        proxy {
                memlimit 512M;
                plugin {
                        zlib level 9;
                }
        }

        on alice {
                address 127.0.0.1:7915;
                proxy on alice {
                        inside 127.0.0.1:7815;
                        outside 192.168.23.1:7715;
                }
        }

        on bob {
                address 127.0.0.1:7915;
                proxy on bob {
                        inside 127.0.0.1:7815;
                        outside 192.168.23.2:7715;
                }
        }
}

inside IPアドレスはDRBDとDRBD Proxyとの通信に使用し、outside IPアドレスはプロキシ間の通信に使用します。後者はファイヤーウォール設定で許可する必要があります。

12.6. DRBD Proxyの制御

drbdadm には proxy-up および proxy-down サブコマンドがあり、名前付きDRBDリソースのローカルDRBD Proxyプロセスとの接続を設定したり削除したりできます。これらのコマンドは、/etc/init.d/drbdproxy が実装する start および stop アクションによって使用されます。

DRBD Proxyには drbd-proxy-ctl という下位レベル構成ツールがあります。このツールをオプションを指定せずに呼び出した場合は、対話型モードで動作します。

対話型モードをにせずコマンドを直接渡すには、'-c' パラメータをコマンドに続けて使用します。

使用可能なコマンドを表示するには次のようにします。

# drbd-proxy-ctl -c "help"

コマンドの周りのダブルクォートは読み飛ばされる点に注意ください。

以下にコマンドを列挙します。最初のいくつかのコマンドは通常は直接使用することはありません(drbdadm proxy-updrbdadm proxy-down コマンド経由で使用されます)。それ以降のものは様々なステータスや情報を表示します。

add connection _<name>_ _lots of arguments_通信経路を作成します。これは drbdadm proxy-up コマンド経由で使用されるものなので、長い構文は省略しています。

del connection _<name>_通信経路を削除します。

set memlimit _<name>_ _<memlimit-in-bytes>_コネクションにメモリ制限を設けます。これは新規に設定したときのみ有効で、稼働中に変更することはできません。このコマンドでは通常使用する単位の kMG を使用できます。

show現在設定されている通信経路を表示します。

show memusage各コネクションでのメモリ使用量を表示します。

例:

# watch -n 1 'drbd-proxy-ctl -c "show memusage"'

メモリ使用を監視します。上記に挙げているように、クォートが必要である点にご注意ください。

show [h]subconnections現在接続中の各コネクションを種々の情報と共に表示します。h をつけると、人間が可読のバイト単位のフォーマットで出力します。

show [h]connections現在接続中のコネクションをステータスと共に表示します。h をつけると、人間が可読のバイト単位のフォーマットで出力します。

Status の行では以下のうちいずれかのステータスを表示します。

  • Off: 対向のDRBD Proxyプロセスとの通信経路がない。
  • Half-up: 対向のDRBD Proxyプロセスとの接続はおそらく確立しているものの、ProxyとDRBD間の経路がまだ確立していない。
  • DRBD-conn: 最初の数パケットをコネクションを通じて送信してはいるものの、まだスプリットブレインなどの状態にある。
  • Up: DRBDのコネクションが完全に確立された状態。

shutdowndrbd-proxy プログラムをシャットダウンする。Attention: 本操作を行うと、DRBD Proxyを使ったすべてのDRBDコネクションが終了します。

quitdrbd-proxy-ctlプログラムを終了します(プログラムとの接続を閉じます)。※DRBD Proxy自体は動作したままです。

print statistics現在アクティブなコネクションの読みやすいフォーマットでの詳細な統計情報を表示します。この機能をご使用の監視方法に統合して利用するのもよいでしょう。

[注記]注記

上述のコマンド群はすべて root ユーザーなどのUID0のユーザーだけが実行できますが、このコマンドは全ユーザが使用できます( /var/run/drbd-proxy/drbd-proxy-ctl.socket へのアクセス権があれば)。 /etc/init.d/drbdproxy の権限を設定している箇所をご確認ください。

12.7. DRBD Proxyプラグインについて

DRBD proxy3以降のプロキシではWANコネクション用のプラグインを使用できます。現在使用できるプラグインは lz4zliblzma (すべてのソフトウェア圧縮)、aha (ハードウェア圧縮サポート。詳細はhttp://www.aha.com/data-compression/参照)です。

lz4 は非常に高速な圧縮アルゴリズムです。通常データを1/2から1/4に圧縮でき、使用するネットワーク帯域も1/2から3/2程度になります。

zlib プラグインはGZIPアルゴリズムを圧縮に使用します。lz4 よりも多少CPUを消費しますが、1/3から1/5になります。

lzma プラグインは liblzma2 ライブラリを使用します。数百MiBの辞書を使って、小さな変更であっても非常に効率的な繰り返しデータの差分符号化を行います。lzma はより多くCPUとメモリを必要としますが、zlib よりも高い圧縮率になります。DRBD上にVMを置いた実際の環境でテストしたところ、1/10から1/40になりました。lzma プラグインはライセンスで有効化する必要があります。

aha はAHA367PCIe (10Gbit/sec)やAHA372 (20GBit/sec)などのハードウェア圧縮カードを使用します。現在のハードウェアではこれがもっとも高速な圧縮です。ahaプラグインはライセンスで有効化する必要があります。

ご利用の環境に最適な設定についてはLINBIT(またはサイオステクノロジー)へご相談ください。性能はCPU(速度、スレッド数)、メモリ、帯域幅の入出力、CPUスパイクなどに依存します。一週間分の sysstat データがあれば、設定を決定するのに役立ちます。

proxy セクションの compression on は現在使用していません。近いうちに廃止する予定です。現在は zlib level 9 として扱います。

12.7.1. WAN側の帯域幅制限を使用する

DRBD Proxyの実験的な bwlimit は壊れていますので、使わないでください。DRBDを使うアプリケーションがIOでブロックするかもしれません。これは将来削除されます。

代わって、Linuxカーネルのトラフィック制御フレームワークを使ってください。

以下の例で、インターフェース名、ソースのポート、IPアドレスを変更して使ってください。

# tc qdisc add dev eth0 root handle 1: htb default 1
# tc class add dev eth0 parent 1: classid 1:1 htb rate 1gbit
# tc class add dev eth0 parent 1:1 classid 1:10 htb rate 500kbit
# tc filter add dev eth0 parent 1: protocol ip prio 16 u32 \
        match ip sport 7000 0xffff \
        match ip dst 192.168.47.11 flowid 1:10
# tc filter add dev eth0 parent 1: protocol ip prio 16 u32 \
        match ip dport 7000 0xffff \
        match ip dst 192.168.47.11 flowid 1:10

この帯域幅制限は以下のコマンドで削除できます。

# tc qdisc del dev eth0 root handle 1

12.8. トラブルシューティング

DRBD proxyのログはsyslogの LOG_DAEMON ファシリティに記録されます。通常ログは /var/log/daemon.log に記録されます。

DRBD Proxyでデバッグモードを有効にするには次のようにします。

# drbd-proxy-ctl -c 'set loglevel debug'

たとえば、DRBD Proxyが接続に失敗すると、Rejecting connection because I can’t connect on the other side というようなメッセージがログに記録されます。その場合は、DRBDが(スタンドアローンモードでなく)両方のノードで動作していて、両方ノードでプロキシが動作していることを確認してください。また、両方のノードで設定値を確認してください。



[11] バージョン1では異なるスケジューリングモデルを使用しており、そのためバージョン3と同じようなパフォーマンスを得ることはできません。そのため、もし本番環境がRHEL5の場合には、RHEL6/7の仮想マシンを各データセンターに置いてみるのはいかがでしょうか。