2017/12/16

[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
    経歴:
    SE としての経験は15年以上。様々な言語と環境で業務系システム開発を行い、セキュリティ対策などもしていました。なんちゃってSE。

    フリーウェア、Webサービス開発のためにEntyで支援を受け付けています。ご支援のほどよろしくお願いいたします。

    Twitter では、ブログでは取り上げない情報も公開しています。


    ブログについて

    このブログは、IT、スマートフォン、タブレット、システム開発などに関するさまざまな話題を取り上げたり、雑感などをつづっています。


    >>自作ツール
    >>運営サイト
    >>Windows 10 まとめ
    >>ブログ詳細

    Twitter のフォローはこちらから Facebook ページはこちら Google+ページはこちら RSSフィードのご登録はこちらから


最近の記事