近い将来、データベースの負荷分散が必要になるPython/Djangoアプリがあります。その間、ローカル仮想マシンのセットアップにpgpoolを実装する方法を学ぼうとしています。
私は4つのUbuntu12.04VMを持っています:
192.168.1.80 <- pool, pgppool2 installed and accessible
192.168.1.81 <- db1 master
192.168.1.82 <- db2 slave
192.168.1.83 <- db3 slave
pgpool-IIバージョン3.1.1を使用しており、データベースサーバーはPostgreSQL9.1を実行しています。
アプリのデータベース接続が192.168.1.80:9999を指しているので、正常に動作します。
問題は、Apache abを使用して負荷をかけると、SELECTクエリのいずれもバランスが取れていないように見えることです。すべての負荷は私のdb1マスターに行きます。また、プールサーバー自体の負荷が非常に懸念されます。これは、db1と比較して非常に高く、おそらく平均で8〜10倍高くなります。一方、私のdb2およびdb3サーバーの負荷はほぼゼロであり、db1からのみ複製しているように見えます。これは、abを使用したテストではそれほど負荷がかかりません。
ab -n 300 -c 4 -C 'sessionid=80a5fd3b6bb59051515e734326735f80' http://192.168.1.17:8000/contacts/
これにより、プールサーバーの負荷が最大約2.3になります。db1の負荷は約0.4で、db2とdb3の負荷はほぼゼロです。
誰かが私の設定を見て、私が間違っているかどうかを確認できますか?
backend_hostname0 = '192.168.1.81'
backend_port0 = 5432
backend_weight0 = 1
backend_data_directory0 = '/var/lib/postgresql/9.1/main'
backend_flag0 = 'ALLOW_TO_FAILOVER'
backend_hostname1 = '192.168.1.82'
backend_port1 = 5433
backend_weight1 = 1
backend_data_directory1 = '/var/lib/postgresql/9.1/main'
backend_flag1 = 'ALLOW_TO_FAILOVER'
backend_hostname2 = '192.168.1.83'
backend_port2 = 5434
backend_weight2 = 1
backend_data_directory2 = '/var/lib/postgresql/9.1/main'
backend_flag2 = 'ALLOW_TO_FAILOVER'
load_balance_mode = on
私の全体の設定はここにあります:
http://pastebin.com/raw.php?i=wzBc0aSp