Pgpool-II 4.4devel 文書 | |||
---|---|---|---|
前のページ | 上に戻る | 付録 A. リリースノート | 次のページ |
リリース日: 2018-10-19
このバージョンでは、SCRAM認証および証明書認証に対応し、ロードバランスの制御が向上しており、PostgreSQL11の新しいSQLパーサを取り込んでいます。
Pgpool-II4.0の主な改善点は以下のとおりです。
SCRAM認証および証明書認証の対応
PostgreSQLの偽のプライマリサーバ検出
ロードバランスの改善:
更新を伴うクエリ実行後の更に細かい負荷分散の制御
特定クエリに対する負荷分散の制御
パラメータによる負荷分散の重み指定
SHOW POOL_NODES に最終更新時刻のタイムスタンプ追加
PostgreSQL11のSQLパーサの取込
クライアントメッセージのログ出力の追加
バージョン4.0には、以前のバージョンとの互換性に影響する多数の変更点が含まれています。 以下の非互換性に注意してください。
1st/2nd ステージのオンラインリカバリコマンドにリカバリされるノードの番号を取得するためのパラメータを追加しました。(Tatsuo Ishii)
オンラインリカバリスクリプトは4つではなく5つのパラメータを受け取るようになりました(5番目のパラメータはリカバリされるノードの番号です)。 pgpool_recoveryをバージョンアップするためには、ALTER EXTENSION pgpool_recovery UPDATE TO '1.2'を実行してください。 5番目のパラメータの情報を必要としない場合、既存の4つのパラメータの形式でリカバリスクリプト使用することが出来ます。
詳細は、recovery_1st_stage_commandとrecovery_2nd_stage_commandを参照してください。
パラメータfail_over_on_backend_errorは、failover_on_backend_errorに変更されました。(Muhammad Usama)
failover_on_backend_errorの代わりに古いパラメータ名fail_over_on_backend_errorが使われた場合、警告メッセージを出力します。
pgpool.conf内でAESで暗号化されたパスワードを指定できます。(Muhammad Usama)
4.0以降では、pgpool.confファイル内のhealth_check_passwordおよびsr_check_password、wd_lifecheck_password、recovery_passwordでAESで暗号化されたパスワードを指定することができます。
パスワード文字列の先頭にTEXTを付与した暗号化されていないクリアテキストパスワードを指定します。 有効な接頭辞が無い場合、Pgpool-IIは文字列を平文のパスワードと見なします。
pgpool.confファイル内のhealth_check_passwordおよびsr_check_password、wd_lifecheck_password、recovery_passwordで指定された空のパスワード文字列は、pool_passwdが特定のパスワードを含まない場合だけ使われます。 もし、これらのパラメータが空白だった場合、Pgpool-IIは空のパスワードを使用する前に最初にpool_passwdファイルから特定のユーザのパスワードの取得を試みます。
SCRAM認証および証明書認証に対応しました。(Muhammad Usama)
SCRAM認証方式に対応しました。
pool_passwd認証ファイルを使用したSCRAM認証に対応しました。
詳細は項6.2.4を参照してください。
Pgpool-IIとフロントエンドの間でCERT認証を使用できます。
この認証方法を使用する場合、Pgpool-IIはクライアントが有効な証明書を提供することを必要とします。
詳細は項6.2.5を参照してください。
フロントエンド/バックエンドで異なる認証方式を利用できます。
これはクライアントとPgpool-II、およびPgpool-IIとバックエンド間で異なる認証方式を利用できます。
pool_passwdは、3つの形式でパスワードを保存できるようになりました。 AES256暗号化形式、平文形式、md5形式です。
Pgpool-IIは接頭辞によってパスワードの形式を確認するため、pool_passwd内の各パスワードのエントリはパスワードの形式を接頭語として付ける必要があります。
md5ハッシュパスワードはmd5接頭辞、AES256暗号化パスワード形式はAES接頭辞を使って保存することができます。 平文形式のパスワードの保存のためには、TEXT接頭辞を使用できます。
有効な接頭辞がない場合、Pgpool-IIは文字列を平文のパスワードとして見なします。
例:
username1:AESIFwI86k+ZbVdf6C+t3qpGA== username2:md59c6583185ba6a85bdcd1f129ec8cabb4 username3:TEXTmypassword
pool_passwdを用いずにデータベースへの接続にMD5認証およびSCRAM認証方式を使えます。
新しい設定パラメータallow_clear_text_frontend_authを追加しました。 このパラメータは接続するユーザのパスワードがpool_passwdファイルに含まれていない、かつ(クライアントから提供された)パスワードがバックエンドのMD5もしくはSCRAM認証で使われる場合、Pgpool-IIがクライアントとのクリアテキストのパスワード認証を行うことを許可します。
詳細は、第6章を参照してください。
新しいパラメータdetach_false_primaryを追加しました。 (Tatsuo Ishii)
detach_false_primary = onの場合、偽のプライマリノードを切り離します。 デフォルトはoffです。pg_stat_wal_receiverを使用しているため、このパラメータはストリーミングレプリケーションモードかつPostgreSQL9.6以降でのみ有効です。 PostgreSQL9.5以前のバージョンの場合、エラーは発生せずこの機能は無視されます。
更新を含むクエリ実行後の負荷分散の振る舞いを指定するdisable_load_balance_on_writeを追加しました。(Tatsuo Ishii)
このパラメータは、更新クエリ実行後の振る舞いを指定できます。
パラメータとして負荷分散の重みの割合を指定できるようになりました。(Bo Peng)
新しい機能としてdatabase_redirect_preference_listおよびapp_name_redirect_preference_listに対して負荷分散の重みを指定できます。
特定のデータベース接続およびバックエンドノードに対して、指定した負荷分散の比でSELECTクエリを送るためのリスト"database-name:node id(ratio)"を指定できます。
特定のアプリケーション接続およびバックエンドノードに対して、指定した負荷分散の比でSELECTクエリを送るためのリスト"application-name:node id(ratio)"を指定できます。
この負荷分散の比は 0から1の間の値を指定できます。 デフォルトは1.0です。
負荷分散すべきではないSQLパターンのリストを指定できるprimary_routing_query_pattern_list を追加しました。(Bo Peng)
プライマリノードだけに送るSQLのパターンをセミコロンで区切られたリストで指定できます。 SQLのパターンには正規表現を使用することができます。 この機能はマスタースレーブモードのみサポートします。
クライアントのメッセージに関するログ出力を許可するlog_client_messagesを追加しました。(Takuma Hoshiai, Tatsuo Ishii)
log_client_messages = onを設定すると, デバックメッセージなしでクライアントのメッセージをログ出力できます。
SHOW POOL_NODESコマンドにlast_status_change列を追加しました。
新しい列はstatusもしくはroleが変更された時刻を示します。
列を追加した理由に関しては[pgpool-hackers: 2822]を参照してください。
PostgreSQL11のSQLパーサを取り込みました。(Bo Peng)
Pgpool-IIはPostgreSQL11で新しく追加されたSQLの構文を完全に理解できます。 たとえば、CREATE/ALTER/DROP PROCEDUREや{ RANGE | ROWS | GROUPS } frame_start [ frame_exclusion ]などです。
pgpool_setupコマンドにpg_rewindを使用するための"-r"オプションを追加しました。(Tatsuo Ishii)
pgpool_setupのオンラインリカバリスクリプトbasebackup.shでは、最初にpg_rewindを試します。 pg_rewindが失敗した場合、rsyncを使用します。
また、pgpool_setupに新しい環境変数"USE_PG_REWIND"を追加しました。 これは"-r"オプションと同様の効果があります。
pgpool_setupコマンドにレプリケーションスロットを使用するための"-s"オプションを追加しました。(Tatsuo Ishii)
これはスタンバイを昇格する際の問題を解消します。 スタンバイが昇格するときPITRアーカイブ中にタイムラインが変更されるため、他のスタンバイとアーカイブディレクトリを共有している場合他のスタンバイが停止していました。
また、pgpool_setupに新しい環境変数"USE_REPLICATION_SLOT"を追加しました。 これは"-s"オプションと同様の効果があります。
"USE_REPLICATION_SLOT=true"の場合、ストリーミングレプリケーションでアーカイブの代わりにレプリケーションスロットを使用できます。
USE_REPLICATION_SLOT 環境変数を設定することにより、現在全てのテスト内のpgpool_setupでレプリケーションスロットが使われています。 これはsrc/test/regression配下のディスクスペースを6.3GBから5.1GB減らします(1.2GBの節約)。
Pgpool-IIにpgprotoを導入しました。(Takuma Hoshiai)
新しく追加したpgprotoコマンドは、PostgreSQLもしくはフロントエンド/バックエンドプロトコルを理解するその他のサーバをテストします。
pcp_proc_info内でPgpool-IIの子プロセスIDとPostgreSQLのバックエンドIDを表示できます。(Tatsuo Ishii)
全ての子プロセスと利用可能な接続スロットが表示される--all オプション追加しました。
pcp_node_infoにreplication_delayとlast_status_changeを追加しました。(Tatsuo Ishii)
pgpool_admのpgpool_adm_pcp_node_infoにrole、replication_delay、last_status_change列を追加しました。(Tatsuo Ishii)
大半のDBUG1のメッセージをDEBUG5に変更しました。(Tatsuo Ishii)
Pgpool-IIを"-d"オプションで起動した場合のpgpoolログのサイズを大きく減らします。 (これはclient_min_messages = debug1と同等です)。
[pgpool-hackers: 2794]の議論の結果です。
ネイティブレプリケーションモードで、SQL に now()
などの時刻関数を利用した場合、WHERE 句にIN (SELECT ...)を含むと構文エラーになる不具合を修正しました。
(bug 433) (Bo Peng)
HAVE_ASPRINTFが定義されていない場合のコンパイラのエラーを修正しました。(Tatsuo Ishii)
生成されるsrc/sql/pgpool_adm/Makefile.inを削除するためconfigure.acを修正しました。(Tatsuo Ishii)
PostgreSQL 9.5を使っている場合、Pgpoolのメインプロセスがセグフォルトするのを修正しました。(Tatsuo Ishii)
pgpool_setup -n 3(またはそれ以上)の場合にバグが発生します。 ノード2のリカバリをしている間、バックエンド#2が稼働していない場合であってもバージョン情報を取得しようとしていました。 これは接続がまだ確立されてないためセグフォルトを引き起こします。 PostgreSQL 9.6以降で発生しない理由は、PostgreSQLのバージョンが9.5以降の場合すぐにループが終了していたためです。 これを修正するため、VALID_BACKENDマクロを呼ぶ処理を追加しました。
pgpool_setupにhealth_check_timeoutを追加しました。(Tatsuo Ishii)
ノード毎のhealth_check_timeoutが抜けていました。 これはノード毎のヘルスチェックのパラメータをサポートした際に追加したはずでした。
Test: リグレッションテスト 006.memcacheが失敗する可能性を減らしました。(Tatsuo Ishii)
不定期にテストが失敗するのはレプリケーションラグが原因だと思われます。 スクリプトはスタンバイからテーブルの読み込みを試しますが、まだテーブルが存在しないためエラーが返ってきます。 そのため、テーブルの作成後pg_sleep()を挿入します。
Test: リグレッションテスト 055.backend_all_downのエラーを修正しました。(Bo Peng)
Doc: オンラインリカバリのドキュメントを改善しました。(Tatsuo Ishii)
2nd stage コマンドはネイティブレプリケーションモードのみで必要であることを明確にしました。
Test: ノード0がプライマリではない場合を想定した新しいリグレッションテスト 017.node_0_is_downを追加しました。(Tatsuo Ishii)