PgBouncer
=========

PgBouncerパッケージバージョン
-----------------------------

デフォルトでは、TPAはPgBouncerの最新バージョンをインストールします。

``config.yml`` ファイルの\ ``cluster_vars``
セクションの下の\ ``pgbouncer_package_version: xxx``
を含めることにより、インストールされるPgBouncerパッケージのバージョンを指定できます。

.. code:: yaml

   cluster_vars:
       …
       pgbouncer_package_version: 1.8*
       …

aptまたはyumが受け入れるバージョン指定子を使用できます。

バージョンが一致しない場合は、 ``*``
ワイルドカードを追加してみてください。これは、パッケージバージョンに\ ``2:...``
のようなエポック修飾子がある場合に必要になることがよくあります。

PgBouncerの構成
---------------

TPAは、 ``role`` に\ ``pgbouncer``
が含まれるインスタンスにPgBouncerをインストールおよび構成します。

デフォルトでは、PgBouncerはポート6432で接続を監視し、\ ``pgbouncer_backend``
が指定されない場合、接続を\ ``127.0.0.1:5432``
アーキテクチャに応じてPostgresまたは :ref:`Configuring haproxy <Configuring haproxy>` のいずれかに転送します。

.. note:: PgBouncerを使用してトラフィックをプライマリにルーティングする
  repmgrでM1アーキテクチャを使用している場合、\ ``cluster_vars`` の下で\ ``repmgr_redirect_pgbouncer: true`` ハッシュを設定して、PgBouncer接続をプライマリに向けることができます。
  PgBouncerは、フェールオーバー時に自動的に更新され、新しいプライマリにルーティングされます。
  ``pgbouncer_backend`` をプライマリインスタンス名に設定することとこのオプションを組み合わせて使用して、プライマリにルーティングするように構成されたPgBouncerでクラスターが最初に展開されるようにする必要があります。

.. ::
   `pgbouncer` インスタンスで次の変数を設定できます。

.. csv-table::
  :header: Variable,Default value,Description
  :widths: 12,12,18
  :align: left
  :class: longtable

  `pgbouncer_port`,6432,pgbouncerがリッスンするTCPポート
  `pgbouncer_backend`,127.0.0.1,接続するPostgresサーバー
  `pgbouncer_backend_port`,5432,`pgbouncer_backend`がリッスンするポート
  `pgbouncer_max_client_conn`,`max_connections`×0.9,許可される接続の最大数。デフォルトは、可能であればバックエンドの`max_connections`設定から取得されます
  `pgbouncer_auth_user`,pgbouncer_auth_user,認証に使用するPostgresユーザー

データベース
------------

デフォルトでは、TPAは\ ``[databases]`` の下に単一のワイルドカード\ ``*``
エントリーを使用して\ ``/etc/pgbouncer/pgbouncer.databases.ini``
を生成し、すべての接続をバックエンドサーバーに転送します。次の例に示すように\ ``pgbouncer_databases``
を設定して、データベース構成を変更できます。

認証
----

PgBouncerは\ ``pgbouncer_auth_user``
としてPostgresに接続し、構成済みの\ ``auth_query``
を実行してユーザーを認証します。

PgBouncerによって\ ``auth_query``
として使用される\ ``pgbouncer_get_auth()``
ファンクションは、単一のデータベース\ ``pgbouncer_auth_database``
に作成されます。このファンクションの実行権限は\ ``pgbouncer_auth_user``
に付与されます。

例
--

.. code:: yaml

   instances:

   - Name: one
     vars:
       max_connections: 300

   - Name: two

   - Name: proxy
     role:
     - pgbouncer
     vars:
       pgbouncer_backend: one
       pgbouncer_databases:
       - name: dbname
         options:
           pool_mode: transaction
           dbname: otherdb
       - name: bdrdb
         options:
           host: two
           port: 6543
