drbdをスイッチ経由で接続した(クロスで直結しない)ときの性能劣化

非推奨な構成とはわかりつつも、ネットワーク構成とNICの都合でやってみたんだけど、予想以上に性能落ちてる気がする。

普通drbd(+ heartbeat)とかする場合はデータ同期用のEthernetはクロスで直結すると思うんですが、諸事情によりL2SWを2個はさんでdrbd + PostgreSQLしてみました。drbdの設定は一番安全性の高いProtocol Cで設定。

Postgresqlの性能

で、ポスグレがやっぱり遅いんす。"性能"と言えるような真面目なベンチマーク測ってないのでアレですが、time create databaseの時間が6秒程度。同じpostgresql.confの設定で、data directoryをlocal diskに変更したら0.2~0.3秒程度。
ちなみに別サーバでスペックは多少違うけど、クロス直結のdrbd(Protocol C) + postgresqlのサーバではtime create databaseが1~2秒程度。pgbenchもしたけど、同じぐらいの比率で性能差が。

試しにdrbdの設定をProcotol Aにしてみたら、time create databaseは1~2秒と改善した。その分、障害時のデータ消失の可能性もあがるけど。

pingのrttはクロス直結:SW経由は1:8ぐらいだったけど。そんなに変わるもんかなぁと意外だった。

また、単純にddとかbonnie++でシーケンシャルに書き込んだ場合は、drbdのProtocolで違いはほとんどなく、どれもlocal diskの半分程度だった。(約80MB/s => 約40M/s)

ディスク構成 time create database hoge
クロス直結 + drbd Protocol C 1~2秒
SW2個経由 + drbd Protoco C 6~7秒
SW2個経由 + drbd Protoco A 1~2秒
local disk 0.2~0.3秒


ref.