[pgsql-jp: 41160] pgpool-II 3.2.0 / pgpoolAdmin 3.2
Nozomi Anzai
anzai @ sraoss.co.jp
2012年 8月 3日 (金) 13:17:17 JST
安齋です。
pgpool-II 3.2.0 と pgpoolAdmin 3.2.0 を正式にリリースしましたのでお知らせい
たします。
以下からダウンロードすることができます。
(pgpool-II) http://www.pgpool.net/download.php?f=pgpool-II-3.2.0.tar.gz
(pgpoolAdmin) http://www.pgpool.net/download.php?f=pgpoolAdmin-3.2.0.tar.gz
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
pgpool-II 3.2.0
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
リリースノート:
http://www.pgpool.net/pgpool-web/pgpool-II/doc/pgpool-ja.html#release3.2.0
マニュアル:
http://www.pgpool.net/docs/latest/pgpool-ja.html
新機能のチュートリアル:
(Memory cache) http://www.pgpool.net/pgpool-web/contrib_docs/memqcache/ja.html
(Watchdog) http://www.pgpool.net/pgpool-web/contrib_docs/watchdog/ja.html
=================================================================================
互換性のない変更
=================================================================================
- メモリベースのメモリキャッシュ機能を追加したため、旧来のメモリキャッシュ
機能は削除しました。
- これにともない、enable_query_cache パラメータを削除しました。
=================================================================================
新機能
=================================================================================
*------------------------------------------------------------------------------*
| Memory based query cache |
*------------------------------------------------------------------------------*
メモリベースのクエリキャッシュを追加しました。
オリジナルは Masanori Yamazaki さんが作成し、開発グループで改良しました。
(Tatsuo Ishii, Nozomi Anzai, Yugo Nagata)
* 概要:
[ 高速な新しいメモリキャッシュ機能! ]
オンメモリクエリキャッシュは、問い合わせの SELECT 文(拡張問い合わせの場
合は更にバインドパラメータ)と 検索結果をペアで記録し、2 回目以降に同じ
SELECT 文が発行された場合に、キャッシュから結果を返します。
通常の SELECT 文処理と違って、PostgreSQL にアクセスしないだけでなく、
pgpool 内部の SQL パース処理などを経由しないため、非常に高速です。
メモリ上にキャッシュが置かれるので高速であるばかりでなく、データが更新
されると自動的にキャッシュが無効になり、pgpool-II の再起動の必要があり
ません。
[ かえって遅くなる場合もあります ]
反面、キャッシュにヒットしない場合は通常の SELECT 文の処理に加えて
キャッシュ処理のオーバヘッドが生じるので、かえって遅くなります。
また、あるテーブルが更新された場合、そのテーブルを参照している すべて
のキャッシュが自動削除されるため(自動削除しない設定も可能)、更新処理
が多いシステムではオンメモリクエリキャッシュを有効にしていることでか
えって遅くなります。
キャッシュのヒット率が 70% 以下の場合は、オンメモリクエリキャッシュの
設定を有効にしないほうが良いでしょう。
キャッシュストレージの選択:
メモリキャッシュのストレージには、共有メモリと memcached のどちらかを選
択することができます(併用はできません)。
[ 共有メモリ ]
共有メモリを使用するクエリキャッシュは高速で、memcached の立ち上げも必
要なく、手軽に利用できます。 ただし、共有メモリサイズの上限によって保存
できるキャッシュの量に制限があります。
[ memcached ]
memcached をキャッシュストレージに使用する場合は、ネットワークアクセス
のオーバヘッドがあるものの、比較的自由にキャッシュメモリの大きさを設定
できます。
* 制限事項:
[ キャッシュの自動無効化が効かない場合 ]
オンメモリクエリキャッシュでは、テーブルに変更があると、関連するキャッ
シュを自動的に削除して古いデータが返却されないようにする機能がありま
す。
このため、pgpool は常に UPDATE や INSERT や ALTER TABLE などのコマンド
が発行されたかどうかをモニタしています。
しかし、トリガ、外部キーや DROP TABLE CASCADE などの働きによって暗黙的
にテーブルが更新されたことは pgpool-II からはわからないため、この機能
が働きません。
この問題を回避するためには、 memqcache_expire を使って一定時間経過した
キャッシュを削除するようにするか、 black_memqcache_table_list を使っ
て、該当テーブルがキャッシュされないようにしてください。
[ 複数の pgpool-II を動かす場合 ]
複数の pgpool-II を動かす環境で共有メモリを使ったオンメモリクエリ
キャッシュを使用すると、ある pgpool-II 経由でテーブルが更新された時
に、他の pgpool-II のキャッシュが削除されず、古いデータを読みだしてし
まうことがあります。
このような環境では、キャッシュストレージに memcached を使ってください。
* 新しいパラメータ:
- メモリキャッシュ全般に関するパラメータ memory_cache_enabled,
memqcache_method, memqcache_expire, memqcache_maxcache,
memqcache_oiddir を追加しました。(Tatsuo Ishii)
- 共有メモリを使ったメモリキャッシュに関するパラメータ
memqcache_total_size, memqcache_max_num_cache,
memqcache_cache_block_size を追加しました。(Tatsuo Ishii)
- memcached を使ったメモリキャッシュに関するパラメータ
memqcache_memcached_host, memqcache_memcached_port を追加しました。
(Tatsuo Ishii)
- リレーションキャッシュに関するパラメータ relcache_expire,
relcache_size を追加しました。(Tatsuo Ishii)
- 一時テーブルかどうかをチェックするフラグ check_temp_table パラメータ
を追加しました。(Tatsuo Ishii)
- テーブル、一時テーブル、ビューのキャッシュ可否を指定するパラメータ、
white_memqcache_table_list, black_memqcache_table_list を追加しまし
た。 (Nozomi Anzai)
- memqcache_auto_cache_invalidation パラメータを追加しました。
(Yugo Nagata)
true であれば、DDL/DML/DCL が発行されたら memqcache_expire を待たずに
クエリキャッシュを削除します。
* 新しいコマンド他:
- SHOW pool_cache を追加しました。クエリキャッシュのヒット率や、キャッ
シュストレージの状況を表示します。(Tatsuo Ishii)
- configure に --with-memcached オプションを追加しました。
(Tatsuo Ishii)
- pgpool コマンドに "-C, --clear-oidmaps" オプションを追加しました。
(Nozomi Anzai)
memcached を使ったメモリキャッシュを行なっている pgpool が -C つきで
起動・再起動したときは、oid マップを削除せず再利用します。
*------------------------------------------------------------------------------*
| Watchdog |
*------------------------------------------------------------------------------*
Watchdog 機能を追加しました。(Atsushi Mitani, Yugo Nagata)
Atsushi Mitani が作成し、Yugo Nagata がテストしました。
* 概要:
watchdog プロセスは pgpool-II 本体から起動される、高可用性を目的とした
プロセスです。以下の機能を提供します。
[ pgpool サービスの生死監視 ]
watchdog は、pgpool のプロセスではなくサービスの応答を監視します。 監
視対象の pgpool から PostgreSQL に問い合わせを行ない、その応答をチェッ
クします。また watchdog は、pgpool から上位のサーバ(アプリケーション
サーバなど)への接続も監視します。上位サーバから PostgreSQL への接続・
応答を pgpool のサービスとして生死監視します。
[ watchdogプロセスの相互監視 ]
各 watchdog はお互いの監視対象のサーバの情報を交換します。これにより、
pgpool サーバの情報を最新に保てるだけでなく、各 watchdog プロセスの相互
監視を行なっています。
[ 障害発生検知時のアクティブ、スタンバイ切り替え ]
pgpool のサービスに障害を検知した場合、watchdog は他の watchdog に障害
検知を通知します。故障した pgpool がアクティブの場合、他の watchdog は
新しいアクティブを投票で決め、アクティブ・スタンバイの切り替えを行ない
ます。
[ サーバ切り替えと連動した仮想 IP アドレスの自動付け替え ]
スタンバイが新しいアクティブに昇格する際、新アクティブ機の watchdog は
アクティブ用の仮想 IP インターフェースを起動します。
一方、旧アクティブ機の watchdog はアクティブ用仮想 IP インターフェース
を停止します。
これにより、サーバが切り替わった後もアクティブは同じ IP アドレスでサー
ビスを継続することができます。
[ サーバ復旧時、スタンバイ機としての自動登録 ]
障害機の復旧や新規サーバを追加する場合、watchdog はサーバの情報を他の
watchdog に通知し、他の watchdog からはアクティブや他のサーバの情報を受
け取ります。これにより追加したサーバはスタンバイ機として自動的に追加さ
れます。
* 新しいパラメータ:
- watchdog 全般に関するパラメータ use_watchdog 追加しました。
(Atsushi Mitani)
- pgpool-II の死活監視に関するパラメータ wd_interval, wd_life_point,
wd_lifecheck_query, を追加しました。(Atsushi Mitani)
- アプリケーションサーバなど上部サーバへの接続に関するパラメータ
trusted_servers, ping_path を追加しました。(Atsushi Mitani)
- watchdog の相互死活監視に関するパラメータ wd_port,
other_pgpool_hostname, other_pgpool_port, other_wd_port を追加しまし
た。 (Atsushi Mitani)
- 仮想 IP に関するパラメータ delegate_IP, ifconfig_path, if_up_cmd,
if_down_cmd, arping_path, arping_cmd を追加しました。(Atsushi Mitani)
=================================================================================
改良
=================================================================================
- HP-UX や AIX のような vsyslog を持たないプラットフォームもサポートするよ
うにしました。(Tatsuo Ishii)
- ヘルスチェックで、リトライ回数とリトライ間隔秒数を指定できるようにしまし
た。このために、health_check_max_retries と health_check_retry_delay とい
うパラメータを新設しています。(Tatsuo Ishii)
パッチは Matt Solnit さんが作成しました。
Subject: [Pgpool-hackers] Health check retries (patch)
From: Matt Solnit
Date: Fri, 18 Nov 2011 16:28:44 -0500
- クエリの解析に失敗したとき、クライアントの IP とポート番号をログに書き出
すようにしました。(Tatsuo Ishii)
これは、log_connections を有効にしていなくても、問題のあるクエリを発行し
たのがどのクライアントかを知るのに有用です。特にログ出力の多く忙しい Web
システムで役立ちます。
- SHOW pool_nodes に role の列を足しました。この列には Primary か Standby
かが出力されます。(Tatsuo Ishii)
- PostgreSQL 9.2 に対応しました。(Tatsuo Ishii)
- SHOW pool_status の出力結果に、backend_data_directory, ssl_ca_cert,
ssl_ca_cert_dir がなかったので追加しました。また、pgpool.conf の順にソー
トしました。(Nozomi Anzai)
- pgpool.conf のサンプルファイルで、system db に関するパラメータをコメント
アウトしました。(Nozomi Anzai)
- failover/failback/followmaster command に新しいパラメータを追加しました。
(Tatsuo Ishii)
%r: new master port number
%R: new master database cluster path
=================================================================================
バグ修正
=================================================================================
- md5 認証のパスワードを変更が reload でできるようにしました。
(Tatsuo Ishii)
これまでは pgpool-II を再起動する必要がありました。このパッチは Gurjeet
Singh さんが作成しました。
- Raw モードでのメモリリークを修正しました。(Tatsuo Ishii)
- Raw モードでのフェイルオーバ・フェイルバックを修正しました。
(Tatsuo Ishii)
- 対象ノードがマスタでないときに、フェイルオーバしませんでした。
- ノードが接続受付状態でないとき、どのノードをマスタにするか選定できませ
んでした。
- 各ノードにおいて、トランザクション状態によって COMMIT / ABORT するかどう
かを判定できるように、pool_send_and_wait() を修正しました。(Tatsuo Ishii)
マルチステートメントが送信されたとき、明示的なトランザクション内にあるプ
ライマリか、明示的なトランザクション内でないスタンバイで発生する可能性が
ありました。
これは、[pgpool-general-jp: 1049] で報告されました。
- Solaris でのロードバランスを修正しました。(Tatsuo Ishii)
Solaris での random() 関数の仕様のために問題があったため、rand() に変更し
ました。
この事象は [pgpool-general: 396] で報告されました。
[pgpool-general: 396] strange load balancing issue in Solaris
http://www.sraoss.jp/pipermail/pgpool-general/2012-April/000397.html
- パラレルモードでないとき、pcp_systemdb_info コマンドが segfault してたの
を修正しました。
- "unnamed prepared statment does not exist" というエラーが出るのを修正しま
した。(Tatsuo Ishii)
このエラーは pgpool が内部的に発行しているクエリで発生し、クライアント
が発行する unnamed ステートメントを破壊していました。
拡張問い合わせクエリが実行されたときには、内部的に発行するクエリのステー
トメントとポータルに名前をつけるようにしました。
- ホットスタンバイモードでクエリ衝突が起きたときにハングアップするのを修正
しました。(Yugo Nagata)
これは、以下の手順で再現します。
(S1) BEGIN;
(S1) SELECT * FROM t;
(S2) DELETE FROM t;
(S2) VACUUM t;
- [pgpool-general: 672] で報告された、process_query() のバグを修正しまし
た。(Tatsuo Ishii)
プライマリでは処理するデータがなく スタンバイにはある状態のときに、プラ
イマリの処理を待ってしまうことがありました。
[pgpool-general: 672] Transaction never finishes
http://www.sraoss.jp/pipermail/pgpool-general/2012-June/000676.html
- wait_for_query_response() が、frontend がないときには何もしないように修正
しました。(Tatsuo Ishii)
バックエンドをリセットする reset_query_list のクエリを実行に 時間がかかっ
たときに発生する可能性があり、またクラッシュすることがありました。
- マスタ・スレーブモードでの BEGIN TRANSACTION の扱いを修正しました。
(Tatsuo Ishii)
これは [pgpool-general: 714] で報告されました。
3.1 以降、BEGIN TRANSACTION をすべてのノードに送るようにしました。
PostgreSQL の仕様では、スタンバイノードには BEGIN TRANSACTION READ WRITE
を送ることはできませんが、 BEGIN WORK ISOLATION LEVEL SERIALIZABLE につい
てチェックしておらず、スタンバイノードに送信していました。
もちろんこれは誤りで、スタンバイノードが SERIALIZABLE モードになることは
許されていません。
そのため、BEGIN WORK ISOLATION LEVEL SERIALIZABLE をチェックするようにし
ました。
[pgpool-general: 714]
Load Balancing / Streaming Replication / Isolation Level serializable
http://www.sraoss.jp/pipermail/pgpool-general/2012-July/000719.html
- pool_ssl_write を修正しました。 (Tatsuo Ishii)
SSL_ERROR_WANT_READ や SSL_ERROR_WANT_WRITE が返されたときにリトライする
べきでしたが、していませんでした。
From: Tatsuo Ishii <ishii @ postgresql.org>
Date: Tue, 24 Jul 2012 08:29:03 +0900(JST)
http://www.sraoss.jp/pipermail/pgpool-general/2012-July/000807.html
- バックエンドから来たたくさんのクエリ結果を読み込んでいる間にフロントエ
ンドが終了したときに、pgpool はバックエンドからの読み込みを続行し、すべ
てのクエリが送られるまでフロントエンドへの書き込みを行ないます。
(Tatsuo Ishii)
クエリ結果が巨大だとこれは非常に長い時間を要します。pgpool のセッションを
極力早く終了するには、レプリケーションモード以外では、フロントエンドへの
書き込みに失敗したらエラーを返すように、pool_flush_it を変更しました。
レプリケーションモードでは、以前どおりの挙動、すなわちバックエンド間での
同期書き込みを行ないます。
そのほか、SimpleForwardToFrontend が、pool_write_and_flush がエラーを返し
てきたときにそれを無視せず、認識するようにしました。
===============================================================================
gpoolAdmin 3.2
===============================================================================
pgpoolAdmin 3.2 は pgpool-II 3.2 に対応したものです。なお後述のとおり、過去
のバージョンである 3.0、3.1 にも対応しています。
- pgpool-II 3.2 で追加・削除されたパラメータに対応しました。
(Anzai,Nagata)
- 追加:
[ Health Check ]
health_check_password, health_check_max_retries,
health_check_retry_delay
[ On Memory Query Cache ]
memory_cache_enabled, memqcache_method, memqcache_memcached_host,
memqcache_memcached_port, memqcache_total_size,
memqcache_max_num_cache, memqcache_cache_block_size,
memqcache_expire, memqcache_auto_cache_invalidation,
memqcache_maxcache, memqcache_oiddir, white_memqcache_table_list,
black_memqcache_table_list
[ Watchdog ]
use_watchdog, trusted_servers, ping_path, wd_interval,
wd_life_point, wd_lifecheck_query, delegate_IP, ifconfig_path,
if_up_cmd, if_down_cmd, arping_path, arping_cmd, wd_hostname,
wd_port, other_pgpool_hostname, other_pgpool_port, other_wd_port
[ Others ]
relcache_size, check_temp_table
- deleted:
enable_query_cache
- 過去のバージョンの pgpool-II にも対応するようになりました。(Anzai)
- いままで、例えば pgpoolAdmin 3.1 は pgpool-II 3.1 にしか対応しておら
ず、3.0 以前の pgpool-II の管理に使うことはできませんでした。しかし、
pgpoolAdmin のバグ修正などのメンテナンスは、最新版に対してしか行なっ
ていません。
そのため、最新版が過去のバージョンの pgpool-II にも対応するようにしま
した。
- このため、pgmgt.conf(pgpoolAdmin の設定ファイル)には、管理する
pgpool-II のバージョンを指定するための、新しい項目が追加されていま
す。
- pgpool コマンドに -C オプションを追加しました。 (Anzai)
- ヘルスチェックに health_check_password を使っていなかったのを、使うよ
うにしました。 (Anzai)
- pgpool.conf の各パラメータの説明を、マニュアルのそれと同期しました。
(Anzai)
- 見た目を改善しました。 (Anzai)
- Smarty 3.1.8 にしました。 (Anzai)
- Smarty 2.x では見えなかったたくさんの Notice エラーを修正しました。
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
--
Nozomi Anzai
SRA OSS, Inc. Japan
pgsql-jp メーリングリストの案内