| Pgpool-II 4.7.0 文書 | |||
|---|---|---|---|
| 前のページ | 上に戻る | 付録 A. リリースノート | 次のページ |
リリース日: 2025-12-23
このリリースでは、Pgpool-IIに対して複数の機能強化を行いました。 主な改善点として、従来のSlonyモードの廃止、セキュリティの強化、フロントエンド/バックエンドプロトコルの互換性向上、運用性の向上などが含まれます。
主な機能の改良は以下の通りです。
Slonyモードの廃止
logdirパラメータ名をwork_dirに変更
フロントエンド/バックエンドプロトコルバージョン3.2サポートの追加
watchdogとheartbeat receiverのセキュリティ強化
クライアント情報を表示するためのpcp_proc_infoおよびshow pool_poolsに新しいフィールドの追加と、pgpool_adm_pcp_proc_info拡張関数の追加
オンラインリカバリに使用するデータベースを指定できるrecovery_databaseパラメータの追加
PostgreSQL 18のSQLパーサの導入
Slonyモードを廃止しました。(Tatsuo Ishii)
これまで、Pgpool-IIは、slonyモードをbackend_clustering_modeの1つとしてサポートしていました。 Slony-I (https://www.slony.info/)。最新のSlony-I は2022 年にリリースされましたが、ユーザーから Slonyモードの廃止について何の報告もありませんでした。 これは、Slony-Iモードを積極的に利用するユーザーがいないことを示唆しています。 そこで、Slony-Iのサポートを中止することにしました。
log_pcp_processesパラメータのデフォルト値をoffに変更しました。(Tatsuo Ishii)
以前のlog_pcp_processesのデフォルトはonでしたが、管理者がPgpool-IIの状態を監視するためにpcpコマンドを頻繁に使用すると、過剰なログ行が生成される可能性がありました。 また、このログは一種のデバッグメッセージであるため、デフォルト値をoffに変更することをお勧めします。
オンラインリカバリに使用するデータベースの設定が可能になりました。 (Bo Peng)
新しい設定パラメータrecovery_databaseが追加され、オンラインリカバリに使用するデータベースをユーザーが指定できるようになりました。 以前は、この値はtemplate1としてハードコードされていました。現在のデフォルトはpostgresに設定されています。
4.6より前のバージョンから移行するユーザーは、recovery_databaseをtemplate1に設定するか、postgresデータベースにオンラインリカバリに必要な拡張機能を作成することで互換性を維持できます。
logdirをwork_dirに名称を変更しました。 (Taiki Koshino)
以前は、pgpool_statusおよびロックファイルを保存するディレクトリは、logdirパラメータで指定されていました。 しかし、logdirという名前は誤解を招く恐れがあったため、このパラメータは、わかりやすくするためにwork_dirに変更されました。 デフォルト値は/tmpで、以前のパラメータlogdirと同じです。
互換性のため、古い logdirパラメータは引き続きサポートされています。 古いパラメータlogdirが使用されると、Pgpool-IIはその値をwork_dirに設定し、警告メッセージを表示します。
PostgreSQL 18の新しいパーサーをインポートしました。 (Bo Peng)
PostgreSQL 18パーサーの主な変更点は以下の通りです。
生成列を仮想列として使用可能
DMLクエリのRETURNINGにOLD/NEWのサポートを追加
各種制約の追加(例:WITHOUT OVERLAPS、ENFORCED/NOT ENFORCED)
watchdogとheartbeat receiverが、設定されたアドレスのみを受け付けるように制限しました。(Bo Peng)
以前は、watchdogプロセスとheartbeat receiverプロセスはどちらもすべてのインターフェースを受け付けていました。 セキュリティ上の理由から、現在はhostnameとheartbeat_hostnameで指定されたアドレスのみを受け付けるようになりました。
watchdogのソースコードを整理しました。 (Tatsuo Ishii)
wd_is_upper_ok()は定義されていないため、wd_utils.hから削除しました。
wd_get_ping_result()とwd_issue_ping_command()を静的関数にしました。これはwd_ping.cでのみ使用されます。
ライフチェックがまだ開始されていない場合、警告を出力するようになりました。(Tatsuo Ishii)
現在、ライフチェックは、ライフチェックの準備が整った場合にのみログを出力します。 管理者は、ライフチェックの準備が整うまでログファイルを監視し続ける必要があるため、不便です。このコミットにより、ライフチェックプロセスは、ライフチェックが開始されるまで定期的に追加の警告を出力するようになります。 警告の間隔はwd_interval × 10秒です。 ただし、ライフチェック開始時の初回は、その時点ではライフチェックの準備が整っていない可能性が高いため、警告は出力されません。
フロントエンド/バックエンドプロトコル3.2のサポートを追加しました。(Tatsuo Ishii)
NegotiateProtocolVersionメッセージを実装しました。
フロントエンドがプロトコルバージョン3.2(PostgreSQL 18以降または互換クライアント)を要求し、バックエンドがまだ3.0(PostgreSQL 17以前)しかサポートしていない場合に、このメッセージを実装する必要があります。
このコミットは、接続キャッシュが存在しない場合に、バックエンドからフロントエンドへメッセージを転送するようにメッセージを処理します。
コネクションキャッシュが存在する場合、Pgpool-IIはコネクションキャッシュの作成時に保存されたメッセージをフロントエンドに送信します。
ディスカッション: Feature: implement NegotiateProtocolVersion message
プロトコルバージョン3.2にBackendKeyDataとクエリキャンセルメッセージを実装しました。
PostgreSQL 18以降、フロントエンド/バックエンドプロトコルが3.2に変更されました。 この変更により、BackendKeyDataとクエリキャンセルメッセージが修正され、可変長のキャンセルキーが使用できるようになりました。
3.2プロトコルを使用してPostgreSQLのフロントエンドとバックエンドに接続できるようになりました。
セッション例:
PGMAXPROTOCOLVERSION="3.2" psql -p 11000 test
ディスカッション: Implement protocol 3.2 BackendKeyData and cancel request message
pgpool_adm_pcp_proc_infoを追加しました。(Tatsuo Ishii)
pgpool_adm_pcp_proc_infoを追加しました。 また、pcp_proc_infoとshow pool_poolsに、client_host、client_port、SQLステートメントという新しいフィールドが追加しました。 これらの追加により、Pgpool-IIのクライアント、Pgpool-II本体、そしてPostgreSQL間の関係を追跡できます。
pcp_proc_infoを使用して最後に実行されたコマンド(ステートメント)を確認できるようになりました。 以前は、Pgpool-IIのログを確認しない限り、これは不可能でした。
lipcp.so のバージョンが 2.0.0 から 3.0.0 にアップグレードしました。
ライフチェックのログを強化しました。 (Tatsuo Ishii)
以前は、wd_lifecheck_methodがqueryの場合、log_line_prefixに「%a」が指定されていると、死活監視はアプリケーション名なしでSQLを出力していました。 ログの見栄えを良くするために、application_nameにlifecheck_pingを追加しました。
ディスカッション: [pgpool-hackers: 4603] life check log is not nicea
random()をpg_prngのrandom関数に置き換えました。 (Martijn van Duren, Tatsuo Ishii)
以前は、負荷分散ノードの選択にrandom()を使用していました。
しかし、PostgreSQLにはより優れた乱数生成器pg_prng.cがあります。
このファイルをインポートするように変更し、pg_prng_double()を使用して[0.0, 1.0]の範囲の乱数を生成します。
シードはpg_strong_random()を使用して生成されます。
ディスカッション: [pgpool-hackers: 4588] Shuffle random functions and use better random numbers
watchdog受信ソケットのバインドを再試行するようにしました。(Tatsuo Ishii)
watchdog受信ソケットのバインドに失敗すると、028.watchdog_enable_consensus_with_half_votesがタイムアウトすることがありました。 バインドを再試行することでこの問題を軽減するようになりました。 現在、再試行は最大5回まで実行され、各再試行ごとに1秒間のスリープが行われます。
PostgreSQLからlikely/unlikely()を移植しました。(Tatsuo Ishii)
likely/unlikely()は正しく使用すれことでパフォーマンス向上に役立つだけでなく、コード内でマクロが時折使用されるため、PostgreSQLからPgpool-IIへのコードの移植が容易になります。
PostmasterRandmon()をpg_strong_random()に置き換えました。(Tatsuo Ishii)
PostmasterRandmon()はかなり以前(2016年)にPostgreSQLからインポートされました。
同年、PostgreSQLはPostmasterRandmon()をpg_strong_random()(src/port/pg_strong_random.c)に置き換えているためこちらに準拠しました。
ディスカッション: [pgpool-hackers: 4588] Shuffle random functions and use better random numbers
.pcppassファイルからの読み取りに失敗した場合、パスワードの入力を求めるプロンプトにフォールバックするようになりました。(Bo Peng)
.pcppassファイルからのパスワードの読み取りに失敗した場合、PostgreSQLが.pgpassを処理するのと同様に、ユーザーに入力を求めるプロンプトにフォールバックします。
以下のメッセージも変更され、-d オプションを必要とせずに表示されます。
WARNING: password file \"%s\" is not a plain file
WARNING: password file \"%s\" has group or world access; permissions should be u=rw (0600) or less
ディスカッション: [pgpool-hackers: 4589] If reading password from .pcppass file fails, try to read it from prompt.
Pgpool-IIの起動時に不適切なログメッセージを削除またはダウングレードするようになりました。(Tatsuo Ishii)
設定ファイルにメジャーバージョン情報を追加しました。(Bo Peng)
文字列として扱われていた列挙型パラメータに関するドキュメントを修正しました。(Taiki Koshino)
6つのパラメータのドキュメントを修正しました:
log_standby_delay
log_backend_messages
wd_lifecheck_method
memqcache_method
disable_load_balance_on_write
backend_clustering_mode
クエリキャッシュのドキュメントを改善しました。(Tatsuo Ishii)
Pgpool-IIは、TIMESTAMP WITH TIMEZONE、TIME WITH TIMEZONE を返す関数を呼び出すクエリのキャッシュを拒否します。 同じ名前の関数が複数あり、そのうちの1つがTIMESTAMP WITH TIMEZONE、TIME WITH TIMEZONE を返す場合、Pgpool-II は、そのうちの1つがこれらのデータ型を返さなくてもキャッシュを拒否します。 そのため、この問題に関するメモと回避策を追加しました。
watchdog_setupでVIPを指定できるようになりました。(Tatsuo Ishii)
新しいオプション-vip [ip]を使用して、watchdog_setupでVIPパラメータ(delegate_ip)を指定できるようになりました。 ipが省略された場合は、127.0.0.1が想定されます。 vip オプションが指定されていても、Pgpool-IIは実際にはシステムにVIPを設定しません。 if_up_cmd、if_down_cmdは、単にechoコマンドに設定され、ログを出力する以外は何も行いません。 このオプションは、VIP処理に関するPgpool-IIの動作をトレースすることを目的としています。
ディスカッション: Enhance watchdog_setup
038.pcp_commandsの回帰テストを修正しました。(Tatsuo Ishii)
以前はテスト結果にローカルホストのIPが表示されていました。 IPはIPv4またはIPv6のどちらでも構いませんが、テストスクリプトではこれを考慮していませんでした。 これを修正するため、test.shはIPv4とIPv6のIPをlocalhostに変換するようになりました。
029.cert_passphrase回帰テストを安定化しました。 (Tatsuo Ishii)
ssl_passphrase_commandが有効でない場合、エラーメッセージは通常「bad decrypt」ですが、「wrong tag」となる場合もあります。