[Mastodon] CentOS 7 に PgBouncer をインストールする
はじめに
PgBouncer というのは、PostgreSQL の軽量コネクションプーリングのツールで、インストールすると Mastodon のパフォーマンスが上がると言われています。
ですが、公式ドキュメントには Ubuntu のインストール方法しか載ってなかったので、CentOS 7 で PgBouncer をインストールする方法をまとめてみます。
私が管理しているマストドンインスタンスは、ほぼお一人様インスタンスなのでしばらく様子を見ています。
よろず屋ドンでは、ユーザー登録は大歓迎なので、興味があればユーザー登録してみてください。
PgBouncer のインストール
Ubuntu では直接 PgBouncer をインストールできるようですが、CentOS 7 で yum を使って PgBouncer をインストールするには、その前にリポジトリをインストールする必要があります。
まずは、インストールされている PostgreSQL のバージョンを確認します。
# psql --version
psql (PostgreSQL) 9.2.23
バージョン 9.2.23 ですね。このバージョンは PostgreSQL ではサポート外になっていますが、CentOS のサポート内のバージョンなのでこのバージョンを使用しています。
さて、次はこちらのサイトで、CentOS 7 と PostgreSQL 9.2.23 をインストールするリポジトリをダウンロードします。この組み合わせなら、https://download.postgresql.org/pub/repos/yum/9.2/redhat/rhel-7-x86_64/pgdg-centos92-9.2-3.noarch.rpm をダウンロードしてインストールします。
# wget https://download.postgresql.org/pub/repos/yum/9.2/redhat/rhel-7-x86_64/pgdg-centos92-9.2-3.noarch.rpm
# rpm -ivh pgdg-centos92-9.2-3.noarch.rpm
それでは、PgBouncer を yum コマンドでインストールします。
# yum -y pgbouncer
# systemctl restart pgbouncer
# systemctl enable pgbouncer
PgBouncder の設定
mastodon ユーザーのパスワードが設定されていないと PgBouncer を使うことができないので、まずはパスワードをリセットしてからパスワードを設定します。サンプルでは、パスワードを ‘password' としていますがちゃんとしたパスワードを設定してください。
# psql -p 5432 -U mastodon mastodon_production -w
ALTER USER "mastodon" WITH PASSWORD 'password';
>
¥q で PostgreSQLから抜けることができます。
PgBouncer には、/etc/pgbouncer/ のは以下に pgbouncer.ini と userlist.txt で設定ファイルが必要になります。なお、デフォルトでは userlist.txt は存在していませんでした。
まずは、mastodon ユーザーを userlist.txt に追加します。mastodon ユーザーのパスワードが ‘password’ だと、以下のような入力になります。
"mastodon" "md5d75bb2be2d7086c6148944261a00f605"
ここでは md5 でユーザーを追加しています。この時代に md5 ってどうなのと思わないことはないのですが、公式ドキュメントがそうなっているので仕方ないですね。
CentOS 7 では、以下のように ‘password’ + ‘ユーザー名’ で md5 をハッシュ値を得ます。くどいようですが、’password’ には正しいパスワードを設定してください。
# echo -n "passwordmastodon" | md5sum
d75bb2be2d7086c6148944261a00f605 -
出力結果の先頭に、’md5’ を付けて userlist.txt にユーザーを追加します。
同じ要領で、pgbouncer ユーザーで PgBouncer でログインしたい場合には、pgbouncer ユーザーも追加します。pgbouncer ユーザーは、PgBouncer をインストール時に追加されるのか既に存在していました。存在していない場合には、useradd コマンドで pgbouncer ユーザーを追加してください。
# useradd pgbouncer
pgbouncer ユーザーのパスワードも設定しておきます。
# passwd pgbouncer
これで userlist.txt の内容は以下のようになります(パスワード部分は実際と異なります)。
"mastodon" "md5d75bb2be2d7086c6148944261a00f605"
"pgbouncer" "md5a45753afaca0db833a6f7c7b2864b9d9"
次に、pgbouncer.ini の設定を行います。vi エディタなどでファイルを開き、編集をしてください。
最初は、[database] セクションに 以下のような設定を行います。’password’ には実際のパスワードを設定してください。生パスワードなのが気になりますが。
[databases]
mastodon_production = host=127.0.0.1 port=5432 dbname=mastodon_production user=mastodon password=password
listen_addr と listen_port はデフォルトのままで問題ありません。
listen_addr = 127.0.0.1
listen_port = 6432
auth_type には md5 を設定します。
auth_type = md5
admin_users には pgbouncer を設定します。
admin_users = pgbouncer
pool_mode には transaction を設定します。
pool_mode = transaction
max_client_conn と default_pool_size はデフォルトで問題なく、状況に合わせて増加させるのがよいみたいです。
max_client_conn = 100
default_pool_size = 20
設定を保存したら、一応 PgBouncer を再起動しておきます。
# systemctl restart pgbouncer
動作確認は、以下のように行います。これで mastodon ユーザーのパスワードを要求され、PostgreSQL にログインできれば OK です。公式ドキュメントでは、ここでホスト名がないことでうまく動作しないので、以下のようにコマンドを実行してください。
# psql -p 6432 -h 127.0.0.1 -U mastodon mastodon_production
¥q で PostgreSQL を抜けます。
Mastodon が PgBouncer とお話できるようにするためには、.env.production ファイルのプリペアドステートメントの設定を false にします。そうしないと動作しないそうです。
PREPARED_STATEMENTS=false
それから、DBの設定を以下のようにします。password は mastodon ユーザーのパスワードに変更してください。
DB_HOST=localhost
DB_USER=mastodon
DB_NAME=mastodon_production
DB_PASS=password
DB_PORT=6432
設定が終わったら、pgbouncer と mastodon サービスを再起動します。
# systemctl restart pgbouncer
# systemctl restart mastodon-*
これで Mastodon が PgBouncer で動作するようになります。
うまくいかない場合もあるかもしれませんが、頑張ってください。
おわりに
PgBouncer を動作させるだけで1日が終わってしまいましたが、それだけの価値はあったかと思います。
Mastodon でパフォーマンスに不安がでたら、PgBouncer を試すのもよいのではないでしょうか。
スポンサーリンク
Twitter ではブログにはない、いろんな情報を発信しています。
@fnyaさんをフォロー
コメント