非推奨な構成とはわかりつつも、ネットワーク構成と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.