Postgres pgagroal connectionpool


このブログ記事はpgbouncerであるpgagroalよりも知られていないConnectionPoolについてです.どちらも「外部接続プール」と呼ばれ、アプリケーション/ユーザ接続を提供することができますが、アプリケーションの一部ではありません.
また、クライアント側とアプリケーション側との間のプロキシとして、他の側にPostgresインスタンスを提供するのと同じ機能を提供します.その位置において、第1の明白な利点はそれがエッジ・サービスとして実行することができるということである.
もう一つの利点は、クライアント/アプリケーション側接続がデータベース側接続から切り離されて、したがって、接続を初期化して、破壊するのではなく、データベース接続要求をすでにセットアップデータベース接続にリンクすることによってひどく動作するアプリケーション(繰り返しデータベースへの接続をつくって、破壊する)に貢献することができます.

ケントス/ルル/アルマ/ロッキー/エンズ.8のみ
PGagroalはELバージョン8のみです.ビルドスクリプトは必要最小限のバージョンをチェックします.CentOS 7でpgagroalをビルドしようとすると、メッセージがエラーになります.
CMake Error at CMakeLists.txt:1 (cmake_minimum_required):
  CMake 3.14.0 or higher is required.  You are running version 2.8.12.2
' el 'はRedHatのエンタープライズディストリビューションを基本とする全てのLinuxディストリビューションに対する一般的なネーミングです.

インストール
しかし、ELバージョン8の場合、Postgres Yumリポジトリを使用してpgagroalを非常に簡単にインストールできます.ソースをダウンロードしてコンパイルする必要はありません.

  • el 8 postgres yumリポジトリを追加します.
    sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm
    

  • pgagroalをインストールします
    sudo dnf -y install pgagroal
    

  • PGagroalユーザを追加します.
    sudo useradd pgagroal
    
  • 現在、設定しており、pgagroalをシステムエミュレータを起動することでpgagroalを使うことができます.

    自動起動
    デフォルトでは、pgagroalはシステム単位のファイルを追加しますが、それを有効にしません(起動時に起動します).システム変数を自動的に起動したい場合は、SystemCTLユニットを有効にしなければなりません.

    構成: listen構成
    防御的で慎重になるために、デフォルトでpgagroalはlocalhostでポート2345で待機します.PGGroRalをPostgresのインスタンスの前に接続プールとして使用する場合は、セクション[ Pagagroal ]のsudo systemctl start pgagroalファイルのsudo systemctl enable pgagroalと多分hostの設定を変更する必要があります.そうすれば、クライアントは設定されたホスト:ポートの組み合わせでpgagroalに到達して通信することができます.

    設定:サーバーセクション
    pgagroalが接続する場所を指定するには、portファイルに[ primary ]というセクションがあります.
    これはpgagroalがPGbouncerと根本的に異なっているところです.PGbouncerはspecify multiple databases on multiple machines(「section [ Database ]」)を参照してください.Pagagraolではプライマリサーバを指定できます.

    構成: pgagroalstrichba .conf
    Postgresと同様に、pgagroalは独自のHBAを使ってホストベースの認証を行うことができます.通常のPostgres HBAと同じフィールドを持つ/etc/pgagroalのconfファイル.confファイル(タイプ、データベース、ユーザ、アドレス、メソッド).デフォルトでは認証を行いません.

    構成: pgagroalkesデータベース.conf
    設定されたPostgresインスタンスは、/etc/pgagroal/pgagroal.confおよび/etc/pgagroal/pgagroal.confに設定されています.つまり、[プライマリ]セクションのhostファイルに設定されている場合、pgagroalはデータベース、ユーザ、またはその両方の制限を適用するように設定することができます.制限は、データベース、ユーザーまたはデータベースとユーザーの組み合わせの接続数です.
    いくつかの初期接続(したがって、アプリケーションまたはユーザ要求の前に作成された接続)も設定することができますが、ユーザー定義を作成する必要があるため、pgagroalはそのユーザー名とパスワードを使用して接続のプールを認証してビルドできます.

    パイプライン設定portのもう一つの本当に重要な構成セッティングは/etc/pgagroal/pgagraol_hba.confです.パイプラインの設定は、pgagroalによって接続がどのように管理されるかを定義します.デフォルト値は' auto 'で、pgagroalは設定に基づいてパイプライン設定を選択します.
    最も最小限の、したがって最速の実装は「パフォーマンス」です.この設定はトランスポート層セキュリティをサポートしておらず、セッションの持続時間の間にクライアント接続をデータベース接続にバインドします.
    次のパイプライン設定オプションは' session 'です.これは、セッションの持続時間の間にクライアント接続をデータベース接続にバインドしていますが、すべての設定オプションをサポートしています.
    最後のパイプライン設定オプションは'トランザクション'です.これは特別な構成です.なぜなら、トランザクションの持続時間に対してクライアントをデータベース接続にバインドするからです.
    これは、「非同期接続数」と呼ばれる素晴らしいプロパティを持っています.これは、データベース接続を持つよりも多くのクライアント接続を持つことができます.言い換えれば:これは頻繁に過度に特大のアプリケーション接続プールのための潜在的なソリューションです.
    しかし、巨大な警告があります:データベース接続を持つクライアントの動的なトランザクション結合は、サーバー側の設定や設定に依存してクライアントによって使用される任意の構成を持つことはできません.これは「set」、「listen」、「ホールド・ホールド・ホールド」、「準備」、「Deallocate」などの具体的なことを意味します.

    設定:メトリクス
    PGBouncerに存在しない機能は、Prometheus形式で実行時統計を公開する機能です.これは、統計がPrometheusサーバーによってスクレーピングされることを意味します.

    結論
    私はPGbouncerとPagagroalの間の明確な評決に来ることができません.過去にPGBouncerに関する問題が報告されています.PGbouncer設定は、pgagroal設定よりもはるかに少ないようです.
    しかし、PGAGRAOLは複数のマシンへのプロキシとして機能する一方、Pagagraolは1に制限されます.PGagroalはパフォーマンスのための明示的なデザインを広告します.