DRBDのパフォーマンスを評価する機会があったのでメモしておきます。
DRBDはTCP/IPネットワーク越しにディスクのミラーリングを行うソフトウェアで、Linuxのカーネルモジュールとして実装されています。ネットワーク経由のRAID1と考えるとわかりやすいと思います。Heartbeatなどと組み合わせると擬似的な共有ディスクを持ったクラスタを構築することができます。
5年くらい前に話に聞いたときは(主にネットワークが)遅すぎて使えない印象でしたが、今日ではGigabit Ethernetが当たり前に使えるのでどのくらいのパフォーマンスが出るのか興味深いところです。
環境
以下のような環境を用いました。
サーバハードウェア
機種 | IBM x3650 2台 |
CPU | Intel Xeon 1.6GHz |
Memory | 5GB |
HDD | SAS HDD 146GB RAID1 |
ネットワーク構成 | 1000BASE-T クロスケーブルで直結 |
ソフトウェア
OS | Red Hat Enterprise Linux 5.1 |
DRBD | Version 8.2.1 |
予備テスト
クロスケーブルで直結したネットワーク経由でFTPを使ってスループットを計測したところ、118MBites/secでした。1000BASE-Tの理論値は1Gbit/sec=125MBytes/secなので理論値に近い速度が出ています。
これは一般的なHDDよりも速いのでネットワークがボトルネックになることはなさそうです。
テスト内容
以下の条件でベンチマークを行いました。計測はBonnie++を用いて行いました。
DRBDのプロトコルは書き込み時の挙動を変えるものです。挙動の違いは以下のようになります。
- A: ローカルのディスクとローカルのTCP送信バッファに書き込んだ時点で書き込み完了とみなす
- B: ローカルのディスクとリモートのバッファキャッシュに書き込んだ時点で書き込み完了とみなす
- C: ローカルとリモート両方のディスクに書き込んだ時点で書き込み完了とみなす
信頼性はC>B>Aの順になり、理論上パフォーマンスはその逆になるはずです。
テスト結果
Bonnie++で測定したシーケンシャルリードとシーケンシャルライトの性能をまとめます。
条件 | Read(KB/sec) | Write(KB/sec) |
---|---|---|
DRBDなし | 77394 | 77029 |
DRBD片系 | 71354 | 54634 |
DRBD A | 85821 | 31885 |
DRBD B | 85018 | 35459 |
DRBD C | 82589 | 36727 |
考察
Read性能
DRBDではRead時はローカルのディスクのみから読み込むのでDRBDなしのときと比べて性能は大きく悪化しないはずです。
DRBDなしとDRBD片系のときを比べると1割弱の性能低下が見られますが、両系運転のときはむしろDRBDなしのときより性能が向上するという結果になりました。いずれも1割前後の差なので誤差と言えなくもないですが直感に反する結果となりました。
Write性能
DRBDなしとDRBD片系では25%程度性能が低下しました。片系運転のときはリモートに書き込むべきデータをローカルのバッファに持つのでそのオーバヘッドのためと考えられます。
両系運転のときはDRBDなしのときの半分程度の性能になりました。
プロトコル間の比較では、理論上はAが最も速くCが最も遅いという結果になるはずですが全く逆の結果になりました。
DRBDの設定ファイルの中にも「予想に反してBよりもCの方が速い」というような記述があるのでたまたまではないようです。
結論
DRBDありの場合、Read性能はDRBDなしの場合と同等かそれよりも速く、Write性能は半分程度になることがわかりました。シビアなWrite性能を要求する場合でなければ十分に実用的と言えそうです。
また、プロトコルについてはCが最も速いという結果が得られている以上Cを使っておけばよさそうです。レイテンシの大きなネットワークなどではまた違った結果が得られるかもしれません。
生データ
DRBDなし
Version 1.03b ------Sequential Output------ --Sequential Input- --Random- -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks-- Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP drbd-a 10G 77029 26 34822 11 77394 12 417.2 0 ------Sequential Create------ --------Random Create-------- -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete-- files /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP 16 52789 99 320313 99 63843 100 53663 99 459707 100 64637 100
DRBD片系状態
Version 1.03b ------Sequential Output------ --Sequential Input- --Random- -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks-- Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP drbd-a 10G 54634 19 29561 10 71354 12 269.8 0 ------Sequential Create------ --------Random Create-------- -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete-- files /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP 16 50618 95 321557 100 63323 100 53794 99 447638 101 52863 81
DRBD Protocol A
Version 1.03b ------Sequential Output------ --Sequential Input- --Random- -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks-- Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP drbd-a 10G 31885 13 26860 9 85821 15 352.2 0 ------Sequential Create------ --------Random Create-------- -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete-- files /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP 16 51042 96 325428 101 47300 74 53406 100 460755 101 64530 100
DRBD Protocol B
Version 1.03b ------Sequential Output------ --Sequential Input- --Random- -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks-- Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP drbd-a 10G 35459 13 27878 9 85018 15 383.3 0 ------Sequential Create------ --------Random Create-------- -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete-- files /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP 16 50618 96 320143 99 62851 100 53202 100 475973 98 45312 71
DRBD Protocol C
Version 1.03b ------Sequential Output------ --Sequential Input- --Random- -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks-- Machine Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP /sec %CP drbd-a 10G 36727 13 27039 9 82589 14 353.3 0 ------Sequential Create------ --------Random Create-------- -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete-- files /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP /sec %CP 16 43380 82 325401 99 62912 100 53580 99 458653 97 64301 100