LCL Engineers' Blog

バス比較なび・格安移動・バスとりっぷを運営する LCLの開発者ブログ

pgpool-IIでストリーミング・レプリケーションへ対応する

以下の記事に続いて、pgpool-II+ストリーミング・レプリケーション構成について紹介致します。 (だいぶ時間が空いてしまいましたが。。)

pgpool-II 入門(インストールと簡易設定) - LCL エンジニアブログ

説明に利用する環境

  • PostgreSQL 9.4
  • pgpool-II 3.5.2

pgpool-IIのストリーミング・レプリケーション対応

ストリーミング・レプリケーション自体は、Web上で有用な記事が多く出てきているので説明を割愛します。特に以下の記事を参考にさせていただきました。

pgpool-IIをストリーミング・レプリケーションへ対応するには、pgpool.confを次のように設定します。

load_balance_modeをonにします。

load_balance_mode = on

master_slave_modをonにし、master_slave_sub_modeをstreamに指定します。

master_slave_mode = on
master_slave_sub_mode = 'stream'

backend_hostnameに各DBサーバの接続情報を設定します。

backend_hostname0 = '192.168.56.100'
backend_port0 = 5432
backend_weight0 = 5
backend_flag0 = 'ALLOW_TO_FAILOVER'

上記がDBサーバ1台分の接続情報のセットです。 末尾の数字を1,2,3と増やしていくことで、接続させるDBサーバを増やすことができます。

backend_weightで指定した値が、SQLを振り分ける比率となります。 例えば、以下のように設定すると、5:6:7の比率で振り分けが行われます。

backend_hostname0 = '192.168.56.100'
backend_weight0 = 5

backend_hostname1 = '192.168.56.101'
backend_weight1 = 6

backend_hostname2 = '192.168.56.102'
backend_weight2 = 7

上記で一通りの設定は完了です。

pgpool-IIを起動し、pgpool_statusファイルを確認すると、各ノードへの接続ステータスが確認できます。 設定したノードの行数だけステータスが表示され、全て「up」になっていれば正常です。

# cat /var/log/pgpool/pgpool_status
up
up
up

md5認証への対応

PostgreSQLの認証に md5認証を利用していると、pgpool-II側で更に追加設定が必要となります。

まず、pgpoo.confのenable_pool_hbaをonにします。

enable_pool_hba = on

pg_md5というコマンドで、認証ファイルを生成します。 usernameの引数には、PostgreSQLへ接続するユーザ・パスワードを指定します。

pg_md5 --md5auth --username=test password

実行すると、pool_passwdファイルが生成されます。

#  cat /etc/pgpool-II/pool_passwd
test:md587f77988ccb5aa917c93201ba314fcd4

続いて、pool_hba.confにPostgreSQLへの接続情報を定義します。

host    testdb           test         127.0.0.1/32       md5
host    testdb           test         ::1/128               md5

以上で完了です。

まとめ

pgpool-IIでのストリーミングレプリケーション対応には、今回紹介しなかった「オンラインリカバリ」など他に有用な機能がありますので、より詳しく知りたい人は公式マニュアルもご参照ください。