読者です 読者をやめる 読者になる 読者になる

/var/log/laughingman7743.log

I thought what I'd do was, I'd pretend I was one of those deaf-mutes or should I?

HAProxyとPgBouncerを利用したRDS(PostgreSQL)の負荷分散

AWS RDS PostgreSQL

HAProxyは1.5系を使いたいのでRPMのビルド環境を作る。*1

HAProxyのRPMを作成してインストールする。*2

PgBouncerはPGDG*3からyumでインストールする。

HAProxyの設定は以下

PgBouncerの設定は以下

WebアプリからはPgBouncer(5433)に接続、PgBouncerがHAProxy(5434)に接続、HAProxyがRDSへのリクエストを振り分ける構成にしています。
RDSの認証方式はサポートに確認したところMD5とのこと。
PgBouncerのserver_lifetimeは短めにし、server_round_robin設定を有効にしておきます。*4

PlayframeworkでWebアプリを作ることが多く、デフォルトのDBPoolがBoneCPで使い物にならないので、 PgBouncerを利用する形にしていますが、HikariCP*5に変更すればPgBouncerはいらないかもしれません。 ただ、PgBouncerはPgPoolのようにプールプロセス数を設定する必要はなく、 イベントループアーキテクチャのようで軽快に動作するのでかなりオススメです。
APサーバ内で動かすような構成でも問題ない感じです。 (AWSだとHAProxyとPgBouncerを別サーバで動かすような構成にすると単一障害点になりやすいので)

PostgreSQLにはPgPoolの豊富な機能と、PgBouncerの軽快さを併せ持つようなProxyの登場が待たれますね。。。

Enjoy!