- フォールトトレラントなGitLabインストールの一部としてのPgBouncer
- フォールトトレラントでないGitLabインストールの一部としてのPgBouncer
- バックアップ
- モニタリングの有効化
- 管理コンソール
- PgBouncerをバイパスする手順
- 微調整
- トラブルシューティング
バンドルされているPgBouncerサービスでの作業
gitlab-ee
パッケージにバンドルされていますが、使用は無料です。サポートについては、Premiumサブスクリプションが必要です。PgBouncerは、フェイルオーバーシナリオでサーバー間のデータベース接続をシームレスにマイグレーションするために使用されます。さらに、フォールトトレラントでない設定で接続をプールし、リソースの使用量を減らしながら応答時間を短縮するために使用することもできます。
GitLab Premiumには、/etc/gitlab/gitlab.rb
で管理できるPgBouncerがバンドルされています。
フォールトトレラントなGitLabインストールの一部としてのPgBouncer
このコンテンツは新しい場所に移動しました。
フォールトトレラントでないGitLabインストールの一部としてのPgBouncer
-
コマンドで
PGBOUNCER_USER_PASSWORD_HASH
。gitlab-ctl pg-password-md5 pgbouncer
-
gitlab-ctl pg-password-md5 gitlab
コマンドでSQL_USER_PASSWORD_HASH
を生成します。平文のSQL_USER_PASSWORDは後で入力してください。 -
データベース・ノードの
/etc/gitlab/gitlab.rb
postgresql['pgbouncer_user_password'] = 'PGBOUNCER_USER_PASSWORD_HASH' postgresql['sql_user_password'] = 'SQL_USER_PASSWORD_HASH' postgresql['listen_address'] = 'XX.XX.XX.Y' # Where XX.XX.XX.Y is the ip address on the node postgresql should listen on postgresql['md5_auth_cidr_addresses'] = %w(AA.AA.AA.B/32) # Where AA.AA.AA.B is the IP address of the pgbouncer node
-
走る
gitlab-ctl reconfigure
データベースがすでに実行されている場合は、再設定後にgitlab-ctl restart postgresql
を実行して再起動する必要があります。 -
PgBouncerを実行しているノード上で、以下が設定されていることを確認してください。
/etc/gitlab/gitlab.rb
pgbouncer['enable'] = true pgbouncer['databases'] = { gitlabhq_production: { host: 'DATABASE_HOST', user: 'pgbouncer', password: 'PGBOUNCER_USER_PASSWORD_HASH' } }
データベースごとに追加の設定パラメータを渡すことができます:
pgbouncer['databases'] = { gitlabhq_production: { ... pool_mode: 'transaction' } }
これらのパラメータは注意して使用してください。パラメータの完全なリストはPgBouncerのドキュメントを参照してください。
-
走る
gitlab-ctl reconfigure
-
Pumaが稼動しているノードで、以下が設定されていることを確認します。
/etc/gitlab/gitlab.rb
gitlab_rails['db_host'] = 'PGBOUNCER_HOST' gitlab_rails['db_port'] = '6432' gitlab_rails['db_password'] = 'SQL_USER_PASSWORD'
-
走る
gitlab-ctl reconfigure
-
この時点で、インスタンスはPgBouncerを通してデータベースに接続するはずです。イシューがある場合は、トラブルシューティングセクションを参照してください。
バックアップ
PgBouncer接続を通してGitLabのバックアップやリストアをしないでください:GitLabが停止してしまいます。
バックアップの再設定方法についてはこちらをご覧ください。
モニタリングの有効化
GitLab 12.0から導入されました。
モニタリングを有効にする場合、全てのPgBouncerサーバーで有効にする必要があります。
-
/etc/gitlab/gitlab.rb
を作成/編集し、以下の設定を追加します:# Enable service discovery for Prometheus consul['enable'] = true consul['monitoring_service_discovery'] = true # Replace placeholders # Y.Y.Y.Y consul1.gitlab.example.com Z.Z.Z.Z # with the addresses of the Consul server nodes consul['configuration'] = { retry_join: %w(Y.Y.Y.Y consul1.gitlab.example.com Z.Z.Z.Z), } # Set the network addresses that the exporters will listen on node_exporter['listen_address'] = '0.0.0.0:9100' pgbouncer_exporter['listen_address'] = '0.0.0.0:9188'
-
sudo gitlab-ctl reconfigure
を実行して設定をコンパイルします。
管理コンソール
Linuxパッケージのインストールでは、PgBouncer管理コンソールに自動的に接続するコマンドが提供されています。コンソールの詳しい操作方法はPgBouncerのドキュメントを参照してください。
セッションを開始するには以下を実行し、pgbouncer
ユーザーのパスワードを入力してください:
sudo gitlab-ctl pgb-console
インスタンスに関する基本情報を取得します:
pgbouncer=# show databases; show clients; show servers;
name | host | port | database | force_user | pool_size | reserve_pool | pool_mode | max_connections | current_connections
---------------------+-----------+------+---------------------+------------+-----------+--------------+-----------+-----------------+---------------------
gitlabhq_production | 127.0.0.1 | 5432 | gitlabhq_production | | 100 | 5 | | 0 | 1
pgbouncer | | 6432 | pgbouncer | pgbouncer | 2 | 0 | statement | 0 | 0
(2 rows)
type | user | database | state | addr | port | local_addr | local_port | connect_time | request_time | ptr | link
| remote_pid | tls
------+-----------+---------------------+--------+-----------+-------+------------+------------+---------------------+---------------------+-----------+------
+------------+-----
C | gitlab | gitlabhq_production | active | 127.0.0.1 | 44590 | 127.0.0.1 | 6432 | 2018-04-24 22:13:10 | 2018-04-24 22:17:10 | 0x12444c0 |
| 0 |
C | gitlab | gitlabhq_production | active | 127.0.0.1 | 44592 | 127.0.0.1 | 6432 | 2018-04-24 22:13:10 | 2018-04-24 22:17:10 | 0x12447c0 |
| 0 |
C | gitlab | gitlabhq_production | active | 127.0.0.1 | 44594 | 127.0.0.1 | 6432 | 2018-04-24 22:13:10 | 2018-04-24 22:17:10 | 0x1244940 |
| 0 |
C | gitlab | gitlabhq_production | active | 127.0.0.1 | 44706 | 127.0.0.1 | 6432 | 2018-04-24 22:14:22 | 2018-04-24 22:16:31 | 0x1244ac0 |
| 0 |
C | gitlab | gitlabhq_production | active | 127.0.0.1 | 44708 | 127.0.0.1 | 6432 | 2018-04-24 22:14:22 | 2018-04-24 22:15:15 | 0x1244c40 |
| 0 |
C | gitlab | gitlabhq_production | active | 127.0.0.1 | 44794 | 127.0.0.1 | 6432 | 2018-04-24 22:15:15 | 2018-04-24 22:15:15 | 0x1244dc0 |
| 0 |
C | gitlab | gitlabhq_production | active | 127.0.0.1 | 44798 | 127.0.0.1 | 6432 | 2018-04-24 22:15:15 | 2018-04-24 22:16:31 | 0x1244f40 |
| 0 |
C | pgbouncer | pgbouncer | active | 127.0.0.1 | 44660 | 127.0.0.1 | 6432 | 2018-04-24 22:13:51 | 2018-04-24 22:17:12 | 0x1244640 |
| 0 |
(8 rows)
type | user | database | state | addr | port | local_addr | local_port | connect_time | request_time | ptr | link | rem
ote_pid | tls
------+--------+---------------------+-------+-----------+------+------------+------------+---------------------+---------------------+-----------+------+----
--------+-----
S | gitlab | gitlabhq_production | idle | 127.0.0.1 | 5432 | 127.0.0.1 | 35646 | 2018-04-24 22:15:15 | 2018-04-24 22:17:10 | 0x124dca0 | |
19980 |
(1 row)
PgBouncerをバイパスする手順
Linux パッケージのインストール
データベースの変更はPgBouncerを通さずに直接行う必要があります。
主に影響を受ける作業は、データベースのリストアと データベースのマイグレーションを伴うGitLabのアップグレードです。
-
プライマリノードを見つけるには、データベースノード上で以下を実行してください:
sudo gitlab-ctl patroni members
-
タスクを実行するアプリケーションノードで
/etc/gitlab/gitlab.rb
を編集し、gitlab_rails['db_host']
とgitlab_rails['db_port']
をデータベースのプライマリノードのホストとポートで更新します。 -
reconfigure を実行します:
sudo gitlab-ctl reconfigure
タスクまたはプロシージャを実行した後、PgBouncerの使用に戻ります:
-
/etc/gitlab/gitlab.rb
、PgBouncerを指すように戻してください。 -
reconfigure を実行します:
sudo gitlab-ctl reconfigure
Helmチャートのインストール
高可用性デプロイもLinuxパッケージベースと同じ理由でPgBouncerをバイパスする必要があります。Helmチャートのインストールの場合:
- データベースのバックアップとリストアタスクはツールボックスコンテナによって実行されます。
- マイグレーションタスクは migrations コンテナによって実行されます。
各サブチャートで PostgreSQL ポートをオーバーライドして、これらのタスクが実行され、PostgreSQL に直接接続できるようにしてください:
微調整
PgBouncerのデフォルト設定はほとんどのインストールに適しています。特定のケースでは、スループットを向上させたり、データベースのメモリ不足を引き起こす可能性のあるリソースの使用を制限するために、パフォーマンス固有の変数やリソース固有の変数を変更することができます。
公式のPgBouncerドキュメントでパラメータとそれぞれのドキュメントを見つけることができます。以下に最も関連するパラメータとLinuxパッケージインストール時のデフォルトを示します:
-
pgbouncer['max_client_conn']
(デフォルト:2048
, サーバファイル記述子の制限に依存) これはPgBouncerの “フロントエンド “プールです: RailsからPgBouncerへの接続。 -
pgbouncer['default_pool_size']
(デフォルト:100
) これはPgBouncerの “バックエンド “プールです。
default_pool_size
の理想的な数は、データベースにアクセスする必要がある全てのプロビジョニングされたサービスを処理するのに十分でなければなりません。以下の各サービスは、データベースプールのサイズを定義するために以下の式を使用します:
-
puma
:max_threads + headroom
(デフォルト14
)-
max_threads
は次の方法で設定します:gitlab['puma']['max_threads']
(デフォルト:4
) -
headroom
環境変数DB_POOL_HEADROOM
で設定可能 (デフォルトは10
)
-
-
sidekiq
:max_concurrency + 1 + headroom
(デフォルト:31
)-
max_concurrency
は次の方法で設定します:sidekiq['max_concurrency']
(デフォルト:20
) -
headroom
環境変数DB_POOL_HEADROOM
で設定可能 (デフォルトは10
)
-
-
geo-logcursor
:1+headroom
(デフォルト:11
)-
headroom
環境変数DB_POOL_HEADROOM
で設定可能 (デフォルトは10
)
-
default_pool_size
を計算するには、puma
、sidekiq
、geo-logcursor
のインスタンス数に、上記のようにそれぞれが消費できる接続数を掛けます。その合計が推奨されるdefault_pool_size
となります。
内部ロードバランサーで複数のPgBouncerを使用している場合、default_pool_size
をインスタンス数で割ることで、インスタンス間の負荷を均等に分散することができます。
pgbouncer['max_client_conn']
はPgBouncerが受け入れられる接続のハードリミットです。これを変更する必要はないでしょう。もし制限に達している場合は、内部ロードバランサーでPgBouncerを追加することを検討してください。
Geo Tracking Databaseを指すPgBouncerの制限を設定する場合、puma
。
トラブルシューティング
PgBouncerを通して接続する際に何らかの問題が発生した場合、最初に確認するのはログです:
sudo gitlab-ctl tail pgbouncer
さらに、管理コンソールのshow databases
。出力では、gitlabhq_production
データベースのhost
フィールドに値があるはずです。また、current_connections
は 1 より大きいはずです。
メッセージLOG: invalid CIDR mask in address
Geo ドキュメントの修正案を参照してください。
メッセージLOG: invalid IP mask "md5": Name or service not known
Geo ドキュメントの修正案を参照してください。