[pgpool-general-jp: 1167] pgpool-II 3.3 Beta1 released

Yugo Nagata nagata @ sraoss.co.jp
2013年 6月 21日 (金) 22:28:55 JST


長田です

pgpool-II 3.3 Beta1 をリリースしましたのでお知らせします。

Beta1 はすべての新機能を取り込んだもので、以降リリースまではバグ修正や改善
を行ないます。テストにご協力くださいますよう、よろしくお願いいたします。
バグなどお気づきの点は、この ML か pgpool-general @ pgpool.net(英語)にてお
知らせください。

以下からダウンロードすることができます。
http://www.pgpool.net/download.php

以下は、pgpool-II 3.2.4 からの変更点です。

===============================================================================

                        3.3 (tokariboshi) 2013/xx/xx

----------------------------------------------------------------------------
概要
----------------------------------------------------------------------------

このバージョンは 3.3 系列の最初の版で、3.2 系からの「メジャーバージョンアップ」
にあたります。

----------------------------------------------------------------------------
互換性のない変更
----------------------------------------------------------------------------

以下は全て watchdog に関する変更です。詳細は以下の新機能の項目を参照してください。

- デフォルトの監視方法がクエリモードからハートビートモードに変更されました。
- failover/failback コマンドが1つの pgpool-II でのみ実行されるようになりました。
- デフォルトで、アクティブ pgpool-II への昇格時には共有メモリ内のクエリキャッシュ
  を全て削除するようになりました。
- クエリモードで他の pgpool-II を監視する際に用いられるデータベース名、ユーザ名、
  パスワードは専用のパラメータで指定されるようになりました。以前は template1, 
  recovery_user, recovery_password が使われていました。

----------------------------------------------------------------------------
新機能
----------------------------------------------------------------------------

[watchdog]

- UDPのパケットのハートビート信号を用いた新しい監視方法が追加されました。
  (Yugo Nagata)

「ハートビート」モードと「クエリー」モードのから監視方法を選ぶことができます。

ハートビートモードは今回新しく追加された方法です。 このモードでは、watchdog は
ハートビート信号を用いて 他の pgpool-II プロセスの死活監視を行います。 watchdog 
は、他の pgpool-II の watchdog より定期的に送られるハートビート信号を受け取り、
これが一定期間以上途切れた場合にはその pgpool-II プロセスに障害が発生したと判断
します。 冗長性を高めるため、複数のネットワーク用いたハートビート交換が可能です。 
デフォルトではこのモードで動作し、これが推奨設定です。

クエリモードでは従来と同じ動作になります。このモードではwatchdog は pgpool-II の
プロセスではなく「サービス」の応答を監視します。 このモードでは、監視対象の 
pgpool-II にクエリを発行しその応答をチェックします。 この方法では他の pgpool-II 
から接続を受ける必要があるため、num_init_children が十分大きくない場合には監視が
失敗する場合があることに注意してください。 これは非推奨の監視方法であり、下位互換
のために残されています。

以下のパラメータが追加されました。
    wd_lifecheck_method
    wd_heartbeat_port
    wd_heartbeat_keepalive
    wd_heartbeat_deadtime
    heartbeat_destinationX
    heartbeat_destination_portX
    heartbeat_deviceX

- filover/failback コマンドを排他的に実行するインターロック機能が追加されました。
  (Yugo Nagata)

watchdog で複数の pgpool-II を連携した場合、failover/failback コマンド
(failover_command, failback_command, follow_master_command)は1つの pgpool-II 
でのみ実行されます。

以前は、これらのコマンドは全ての pgpool-II で実行されていました。

- watchdog パケット通信に認証機構が追加されました。(Yugo Nagata)

間違った認証キーを持つ pgpool-II から送られた watchdog パケットは拒絶されます。
(ハートビート信号を含む) 全ての pgpool-II は同じキーを pgpool.conf の wd_authkey 
パラメータに持っている必要があります。 間違った認証キーを持っていると、スタート
アップパケットも他の pgpool-II から拒絶されるため、起動することもできません。

- clear_memqcache_on_escalation パラメータを追加しました。(Yugo Nagata)

これが on の場合は、pgpool-II がアクティブに昇格した時に、共有メモリ上のメモリ
キャッシュが全てクリアされます。

これは、新しいアクティブの pgpool-II が以前のアクティブと矛盾する古いキャッシュ
を使わないようにするためです。

- wd_escalation_command パラメータを追加しました. (Yugo Nagata)

このパラメータに指定されたコマンドは、pgpool-II がアクティブに昇格した時に実行
されます。 実行のタイミングは、仮想 IP が立ち上がった直後です。

- wd_lifeccheck_dbname, wd_lifecheck_user, wd_lifecheck_password パラメータを
  追加しました。(Yugo Nagata)

これらのパラメータは、クエリモードで監視の際に使用するデータベース名、ユーザ名、
パスワードを提要します。以前はそれぞれ templat1, recovery_user, recovery_password 
が使われていました。

- delegate_ip オプションが空の場合には、仮想 IP の立ち上げ/切り替えを行わないよう
  になりました。(Yugo Nagata)

これにより、各 pgpool-II に固定 IP を用いてアクセスするマルチマスタ的運用で、
仮想 IP を用意する必要がなくなりました。

[その他]

- PostgreSQL 9.2 の raw パーサを取り入れました。 (Nozomi Anzai, Tatsuo Ishii)

- pgpool_setup を追加しました。(Tatsuo Ishii)

これはカレントディレクトリ下 pgpool-II と PostgreSQL のテスト環境を構築する
ツールです。

- pgpool-recovery, pgpool-regclass を CREATE EXTENSION を使ってインストールできる
  ようになりました。(Tatsuo Ishii)

- pgpool_pgctl() 関数を追加しました。(Nozomi Anzai)

これを用いると、SQL から pg_ctl stop/restart/reload の実行が可能です。
(ただし、start は除きます。)

- pgpool-II と pgpoolAdmin の RPM をインストールするシェルスクリプトを追加
 しました。 (Nozomi Anzai, Yugo Nagata)

- 新しいパラメータ search_primary_node_timeout を追加しました。
 (Muhammad Usama, Tatsuo Ishii)

このパラメータはファイルオーバ時にプライマリノードを探す最大の秒数を指定します。 

- オンメモリクエリキャッシュと watchdog の 中国語のチュートリアルを追加しました。
(Bambo Huang)

- レグレッションテストを作成しました。(Tatsuo Ishii)

----------------------------------------------------------------------------
バグ修正
----------------------------------------------------------------------------

- オンラインリカバリ時のフェイルバックの完了待機でタイムアウト処理をするように
しました。(Tatsuo Ishii)

これによりリカバリーが永遠に終わらず pgpool-II が終了できなくなる状況を回避します。
この現象は特に follow_master_command の実行中に起こり得ました。
 
- ストリームレプリケーションモードでの follow_master_command 実行時に、%H に新しい
 プライマリノードが正しく割り当てられないバグを修正しました。(Tatsuo Ishii)

- 他の pgpool-II からダウン通知を受け取った pgpool-II が既にアクティブである場合
  には、昇格処理を実行しないよう修正しました。(Yugo Nagata)

- watchdog ソケット作成時に、connect() の前に select() を実行していたのを修正しま
  した。(Yugo Nagata)

未接続のソケットで select() を実行したときの処理は未定義で、プラットフォームで異
なります。 Linux では 2 を返し、結果としては無害です。しかし、Solaris では 0 を返し、
これはタイムアウトと区別がつかないため、 watchdog が正しく動いていませんでした。

- pgpool_regclass がインストールされていない場合に生じるエラーを修正しました。
  (Tatsuo Ishii)

pgpool_rgcalss が存在しない場合に、pool_has_pgpool_regcalss() で使われている
クエリが失敗していました。 詳しくは、[pgpool-general:1722] を参照してください。

- PostgreSQL がエラーを返したときに do_query() がハングしないよう修正しました。
  (Tatsuo Ishii)

典型的な症状が「pg_stat_activety によると SELECT が実行されたままのように見える」
というものです。 これを解決するため、pgpool-II は当該プロレスを終了させ、既存の
コネクションを捨てるように修正しました。 あまり行儀のよい方法ではありませんが、
これが最善の方法と信じています。

- watchdog を有効にしたときに、フェイルオーバの最中に起こりうるデッドロックを修正
  しました。(Yugo Nagata)

このバグは、バグトラッカ #54 にて arshu arora さんによって報告されました。
http://www.pgpool.net/mantisbt/view.php?id=54

- COMMIT 時エラーに不要なバックエンド切り離しを行わないようにしました。
  (Tatsuo Ishii)

マスタースレーブモードで、COMMIT 時にマスターノードでエラーが発生していたとしても、 
他のスレーブノードが正常な場合にはバックエンドを切り離す必要はありません。 これは、
遅延トリガーのために "kind mismatch error" が発生しうるからです。
 
- 拡張プロトコルの際に do_query で発生しうるハングアップを修正しました。
  (Tatsuo Ishii)

これは insert_lock が有効で、pgpool_catalog.insert_lock が存在することに起こり
得ます。 詳しくは [pgpool-general: 1684] を参照してください。

- トランザクション内の DML で、クエリキャッシュの無効化が失敗する場合があるのを
  修正しました。 (Tatsuo Ishii)

----------------------------------------------------------------------------
改良
----------------------------------------------------------------------------

- watchdog のプロセスが異常終了した場合に、これが自動で再起動されるよう修正
  しました。(Yugo Nagata)

- watchdog 有効時に ping コマンドを実行する関数にエラーチェックを追加しました。
  (Tatsuo Ishii)

- sprintf strncpy などの安全でない関数を、より安全な anprintf, strlcpy に置き換
  えました。(Yugo Nagata)

- ログ出力、コメント、関数名で使われていた "sticky bit" という用語を "setuid bit" 
  に置き換えました。(Yugo Nagata)

- pool_hba.conf.sample の SSL に関する記述を修正しました。(Tatsuo Ishii)

- レプリケーションモードで、明示的なトランザクション内のロードバランスができる
  ようになりました。 (Tatsuo Ishii)

ロードバランスが行われる条件は以下のとおりです。
1) replicate_select が off
2) 書き込みを行う関数が使われていない
3) トランザクション分離モードが SERIALIZABLE ではない
4) DML/DDL がトランザクションの中で実行されていない

- 中国語マニュアルを最新の情報に更新しました。(Bambo Huang)



-- 
Yugo Nagata <nagata @ sraoss.co.jp>


pgpool-general-jp メーリングリストの案内