Pgpool-II 4.0.4 文書 | |||
---|---|---|---|
前のページ | 上に戻る | 付録 A. リリースノート | 次のページ |
リリース日: 2016-12-26
watchdog のセキュリティを強化しました。(Muhammad Usama)
wd_authkeyは、HMAC SHA-256ハッシングを使用するようになりました。
Pgpool-IIのRPM にpgpool_adm extension が含まれるように修正しました。(Bo Peng)
クエリキャッシュが有効になっている場合に、時々発生しうるセグメンテーション違反を修正しました。(bug 263) (Tatsuo Ishii)
拡張プロトコルにおいて発生しうるkind mismatchエラーを修正しました。(bug 231) (Tatsuo Ishii)
bug 231によると、以下の条件がすべて満たされていると、このバグが発生する可能性がありました。
ストリーミングレプリケーションモード
ロードバランスノードがnode 0ではない
拡張プロトコルを使用している
SELECTが実行され、ステートメントがクローズされた後、トランザクションコマンドが実行されている
問題の発生順序:
ロードバランスノード1でステートメントS1のSELECTが実行されます。
フロントエンドがクローズステートメントを送ります。
Pgpool-IIはそれをバックエンド1に転送します。
フロントエンドは、COMMITのParse、Bind、Executeを送信します。
Pgpool-IIはそれをバックエンド0と1に転送します。
フロントエンドが同期メッセージを送信します。
Pgpool-IIはそれをバックエンド0と1に転送します。
バックエンド0はParse complete( "1")を返しますが、バックエンド1は#3によりclose complete( "3")を返します。
Kind mismatch が発生します。
解決策は、#3では、Pgpool-IIがバックエンド1からの応答を待つようにしますが、応答メッセージは読み取らないようにします。 その後、Pgpool-IIの状態マシンは、#6で同期メッセージが送信される前に、その応答を読み込みます。 これによりバックエンド1は#8で "1"を返信し、kind mismatchエラーは発生しなくなります。
また、Closeメッセージを受け取ったときにpool_set_doing_extended_query_message()が呼び出されない不具合を修正しました。
新しいリグレッションテスト "067.bug231"が追加されました。
シグナルハンドラでの競合状態を修正しました。(bug 265) (Tatsuo Ishii)
child.cには、elogを呼び出すシグナルハンドラがあります。 シグナルハンドラは処理中に他のシグナルに対してブロックされないため、pgpoolのシャットダウンシーケンスでシステムコールにデッドロックが発生する可能性がありました。 この問題を解決するために、シグナルハンドラはPOOL_SETMASKを使用してブロックされるように修正されました。
理想的にはシグナルハンドラでelogを呼び出すことを避けるべきです。
Pgpool-II 3.6 でのフェイルオーバーコマンドの転送処理の改善がバックポートされました。(Muhammad Usama)
これまでは、Pgpool-II ノードの watchdogがすべての接続されたノードにフェイルオーバーコマンド(failover、 failback 及び promote node)を転送していました。多数のノードが含まれているwatchdogクラスタでは、フェールオーバーコマンドが複数のPgpool-IIによって実行されることによって、データの同期問題を引き起こす可能性がありました。このコミットでは、すべてのフェイルオーバーコマンド(failover、 failback 及び promote node)が master/coordinator watchdog に転送され、master/coordinator watchdogはすべてのスタンバイノードに転送するようになりました。
また、今回の修正では、インターロック機能も変更されました。master/coordinatorノードのみがロックホルダになり、フェイルオーバコマンドはmaster/coordinatorノードでのみ実行されます。
ネイティブレプリケーションモード以外の場合、エラーが発生した場合は、クエリをキャンセルしないように修正しました。(Tatsuo Ishii)
本来は一貫性を維持するためにキャンセルされるようになっていましたが、ネイティブレプリケーションモード以外の場合ではキャンセルする必要がないので、修正しました。
pgpool コマンドで廃止されたオプション"-c"を削除しました。(Tatsuo Ishii)
また、helpメッセージのタイポを修正しました。
PCPコマンドがキャンセルされたときの認証失敗エラーが修正されました。(bug 252) (Muhammad Usama)
search_primary_node_timeoutのデフォルト値を10から300に変更しました。(Tatstuo Ishii)
これまでのデフォルト値10秒は、スタンバイを昇格する際には小さすぎでした。
すべてのバックエンドがダウンした後に、1つのノードを復帰させる時の不具合が修正されました。(bug 248) (Tatsuo Ishii)
すべてのノードがダウンすると、すべてのコネクションを受け付けなくなります。 その状態で1つのPostgreSQLが起動し、pcp_attach_nodeコマンドでそのノードを復帰させます。 そしてこのコマンドは成功しました。 しかし、新しい接続が拒否されました。 これはPgpool-II の子プロセスがキャッシュされた古い情報を参照したのが原因でした。 ストリーミングレプリケーションモードでは、このキャッシュされた情報において、復帰させたノードの状態がdownのままでした。 (ネィティブレプリケーションモード、およびそれ以外のモードでは問題ありません) 解決法として、全ノードがダウンした場合、強制的に全 Pgpool-II子プロセスを再起動するようにしました。
再起動が必要なパラメータの設定を変更した際のPgpool-II停止が起こらないようにしました。(Muhammad Usama)
この修正のために、設定パラメータの検証機構の順序を逆にしました。 以前はスタンバイノードがPgpool-IIマスターノードに対して設定パラメータの値を検証し、不整合が見つかった場合にはFATALエラーが出力されていました。 この修正で、Pgpool-IIマスターノードに検証の役割が移譲されました。 マスターノードは参加している個々のスタンバイノードの設定値をローカルの設定値と比較し、違っている場合にはエラーではなくてWARNINGメッセージを出力します。 この方法では、ユーザは、手動でマスターPgpool-IIログの中から不整合ワーニングを見つけて、Pgpool-IIマスターのスイッチオーバが起きたときに驚くようなことが起こらないようにしなければなりません。
コンパイルエラーを修正するために、configure.ac ファイルにコンパイルフラグ "-fno-strict-aliasing" が追加されました。(Tatsuo Ishii)
MD5 salt を生成するときに、random()
を使用しないように修正しました。(Tatsuo Ishii)
random()
関数はセキュリティ関連のアプリケーションで使用すべきではありません。
random()
の代わりにPostgreSQLのPostmasterRandom()
使用するように変更しました。
クエリキャッシュが有効な場合、sync メッセージが廃棄されないよう修正しました。(Tatsuo Ishii)