sql >> データベース >  >> RDS >> PostgreSQL

PgBouncer 1.7 –「復活後に色が変わる」

    PgBouncerは、PostgreSQL用の軽量接続プールです。 PgBouncer 1.7は、2015年12月18日に発表されました。このブログ投稿では、PgBouncerの主な新しい改善点について説明します。

    最もカラフルな機能

    • PgBouncer1.7はTLS接続をサポートします そして、これが新しいリリースの最大の改善点だと思います。彼らは、機能のバックエンド実装としてOpenSSL/LibreSSLライブラリを使用しました。
    • PgBouncerが認証をサポートするようになりました TLSクライアント証明書経由 。

    PgBouncerのTLS設定の詳細を掘り下げてみましょう。 TLSセットアップに関連する14の構成パラメーターがあります(クライアント側+サーバー側の設定)。

    クライアントからの接続に使用するTLSモードを割り当てるには、 client_tls_sslmodeを設定する必要があります パラメータ。 TLS接続はデフォルトで無効になっています。有効にすると、 client_tls_key_file およびclient_tls_cert_file また、PgBouncerがクライアント接続を受け入れるために使用するキーと証明書を設定するように構成する必要があります。

    client_tls_ca_file を設定することで、クライアント証明書を検証するためのルート証明書を割り当てることができます。 パラメータ、デフォルトは未設定です。

    client_tls_protocols を設定することで、許可するTLSプロトコルのバージョンを指定できます。 パラメータ、デフォルトはすべてです。

    クライアント側の設定の詳細については、 client_tls_ciphersを確認してください。 、 client_tls_ecdhcurve およびclient_tls_dheparams パラメータ。

    それでは、TLSサーバー側の構成パラメーターについて説明しましょう。まず、 server_tls_sslmodeを使用してPostgreSQLサーバーへの接続に使用するTLSモードを宣言する必要があります。 パラメータ。 TLS接続はデフォルトで無効になっています。 server_tls_ca_fileを使用してCAサーバーを割り当てることができます パラメータ。 PgBouncerに秘密鍵を割り当ててPostgreSQLサーバーに対して認証する場合は、 server_tls_key_fileを使用できます。 パラメータを使用すると、PostgreSQLサーバーが server_tls_cert_fileで検証できる秘密鍵の証明書を割り当てることもできます。 パラメータ。クライアント側のTLS接続設定で行ったように、 server_tls_protocolsで許可されるTLSプロトコルのバージョンを宣言できます。 パラメータ。

    • TLSサポート後、その他の重要な新機能は「ピア」認証のサポートです。 Unixソケットの場合。
    • このバージョンの最後の主要な機能として、Postgresのpg_hba.confなどのホストベースのアクセス制御ファイルのサポートについて説明します。これにより、 TLSを構成できます ネットワーク接続と「ピア」認証の場合 ローカル接続用。

    auth_typeを使用してユーザーを認証する方法を構成できます PgBouncerのパラメータ。すべての構成パラメーターは、構成ファイルpgbouncer.iniで定義されています。 auth_typeの詳細を見てみましょう パラメータ。

    auth_type パラメータには、以下の6つの値のいずれかを割り当てることができます。これらの値の説明と使用法を見てみましょう。

    • hba: auth_typeパラメーターに値hbaを設定した場合 、 auth_hba_fileを設定する必要があります どのpg_hba.confを表示するためのパラメータもあります ファイルは構成として使用されます。これを行うことにより、実際の認証タイプをauth_hba_fileからロードできるようになります。これは、アクセスパスごとに異なる認証方法を使用できることを意味します。たとえば、Unixソケットを介したバージョン1.7接続では、ピア認証方式を使用すると同時に、TCPを介した接続ではTLSを使用する必要があります。これまでのところ、HBAファイル形式はpg_hba.confのすべての認証方法をサポートしているわけではありません。サポートされている方法は、trust、reject、md5、password、peer、certです。
    • 証明書: クライアントはTLS経由で接続する必要があります 有効なクライアント証明書との接続。次に、ユーザー名は CommonNameから取得されます 証明書のフィールド。
    • md5: MD5ベースのパスワードチェックを使用します。 auth_file ユーザー名とパスワードをロードするファイルの名前 )には、MD5で暗号化されたパスワードとプレーンテキストのパスワードの両方が含まれる場合があります。これがデフォルトの認証方法です。
    • プレーン: クリアテキストのパスワードは有線で送信されます。非推奨。
    • 信頼: 認証は行われません。ユーザー名は引き続きauth_fileに存在する必要があります 。
    • 任意: trustメソッドと同様ですが、指定されたユーザー名は無視されます。すべてのデータベースが特定のユーザーとしてログインするように構成されている必要があります。さらに、コンソールデータベースを使用すると、すべてのユーザーが管理者としてログインできます。

    その他の光沢のある機能

    このバージョンでは、さらに多くの機能がリリースされています。 PgBouncerの変更ログページにアクセスするか、以下のリストでその他の改善点を確認してください。

    • query_wait_timeoutを設定します デフォルトでは120秒まで。このパラメーターは、クエリが実行の待機に費やすことができる最大時間を定義します。その間にクエリがサーバーに割り当てられていない場合、クライアントは切断されます。これは、応答しないサーバーが接続を取得するのを防ぐために使用されます。また、サーバーがダウンしている場合や、データベースが何らかの理由で接続を拒否している場合にも役立ちます。これを無効にすると、クライアントは無限にキューに入れられます。現在のデフォルト(0)では、キューが無限に発生しますが、これは役に立ちません。バージョン1.7では、クライアントに保留中のクエリがあり、サーバー接続に割り当てられていない場合、クライアント接続はデフォルトで120秒後に切断されます。
    • server_reset_query_alwaysを無効にします デフォルトでは。現在、リセットクエリはセッションモードのプールでのみ使用されます。
    • pkt_bufを増やします から4096バイト。 パフォーマンスを改善します TLSを使用 。動作はおそらく負荷固有ですが、v1.2以降、パケットバッファは接続から分割され、プールから遅延して使用されるため、安全に実行できます。
    • 期待されるパイプライン数のサポートReadyForQuery パケット。これにより、サーバーのリリースが早すぎるのを防ぐことができます。修正#52。
    • 改善されたsbuf_loopcnt ロジック–ソケットからのイベントがない場合でも、ソケットは再処理されることが保証されています。 TLSに必要 独自のバッファリングがあるためです。
    • 最新のBSDで動作するようにシステムテストを適応させる およびMacOS 。 (エリックラドマン
    • 暗号化を削除します auth。 8.4 以降、この機能は廃止され、PostgreSQLではサポートされていません。 。
    • プレーンな「–with-cares」を修正 構成オプション–引数なしで壊れました。

    PgBouncerとは何ですか?

    PgBouncerは、PostgreSQLデータベースへのクライアント接続を管理するためのユーティリティです。一言で言えば、PostgreSQLサーバーへの接続プールを維持し、それらの既存の接続を再利用します。これは、クライアント接続のオーバーヘッドを減らすのに役立ちますが、データベースサーバーへの開いている接続の最大数を制限することもできます。また、1つ以上のデータベースへの接続を別のデータベースサーバーにリダイレクトするなどのトラフィックシェーピングにも使用できます。これらに加えて、PgBouncerは、ユーザーおよびデータベースレベルでさえセキュリティを管理するために使用できます。

    ダウンロードページからPgBouncerをダウンロードして、今すぐ使用を開始できます!

    PgBouncerの詳細については、PgBouncerに関する以前のブログ投稿を確認してください。

    ハッピーリーディング!


    1. MariaDBでのINSTR()のしくみ

    2. Oracleマネージドドライバーはasync/awaitを適切に使用できますか?

    3. Oracle:重複するキーの更新について

    4. Mysqlエラー1452-子行を追加または更新できません:外部キー制約が失敗します