[pgsql-jp: 36437] Re: pgpoolでfail Overするタイミング

Tatsuo Ishii ishii @ sraoss.co.jp
2005年 11月 22日 (火) 18:47:00 JST


石井です。

> moriyamaです
> 
> pgpool2.6.5で試させて頂いてます。
> 
> PostgreSQL8.0.3との組み合わせで動作確認をしていたところ、VACUUMを実行
> した直後にMaster側のDBが切り離されました。
> 
> 発生条件:
> ・pgpoolを稼動してから数日間VACUUMを一回もかけずにいた
> ・VACUUMを実行する前にshow pool_status で稼動状況を確認した時にはDBが2台とも 
> 
> 正常に稼動していた
> VACUUMを開始した直後にshow コマンドを実行したところ、MasterDBがFail Over していた
> 
> どなたか原因が分かる方、よろしくお願い致します。
> 
> 以下がFail Over 時のログになります。

どうやらまたもやVACUUMをCSEから実行されているようですね。あのツールは
挙動が不可解だし(なぜか必ずクエリのキャンセルをするし...)、使っている
libpqのバージョンが古く、更新も止まっているようなので使うのを止めた方
がいいと思います(問題の切り分けの邪魔になることもあります)。

それはともかく、

> 2005-11-21 19:13:10 ERROR: pid 31850: pool_process_query: kind does not 
> match between backends master(E) secondary(P)

というエラーは、マスタがE(エラー)を返しているのに、セカンダリは
P(CursorResponse)を返していることを示しています。もし本当にこれが
VACUUMを実行した直後の状態だとすると、かなり不可解ですね。VACUUMがEを
返すことはありますが、Pを返すことはあり得ません。Pが返るのは検索をし
たときだけです。VACUUMだけでなく、SELECTか何かを実行しているように見え
ますが、違いますか?

もうちょっとログの前の方を見れば、実行したSQLが出ているはずです。

仮にVACUUMでないとして、ではなぜマスタとセカンダリの状態が違ってしまっ
たかというのは、詳細に調べないとわかりません。Eが出ているということは、
PostgreSQLのログにも何か出ているはずです。
--
Tatsuo Ishii
SRA OSS, Inc. Japan

> 2005-11-21 19:13:09 DEBUG: pid 32228: I am 32228 accept fd 6
> 2005-11-21 19:13:09 DEBUG: pid 32228: Protocol Major: 1234 Minor: 5678 
> database:  user:
> 2005-11-21 19:13:09 DEBUG: pid 32228: Cancel request received
> 2005-11-21 19:13:09 DEBUG: pid 32228: connecting postmaster Unix domain 
> socket: /tmp/.s.PGSQL.5531
> 2005-11-21 19:13:09 DEBUG: pid 32228: connected to postmaster Unix domain 
> socket: /tmp/.s.PGSQL.5531 fd: 11
> 2005-11-21 19:13:09 DEBUG: pid 32228: Cancel request received
> 2005-11-21 19:13:09 DEBUG: pid 32228: connecting postmaster Unix domain 
> socket: /tmp/.s.PGSQL.5532
> 2005-11-21 19:13:09 DEBUG: pid 32228: connected to postmaster Unix domain 
> socket: /tmp/.s.PGSQL.5532 fd: 11
> 2005-11-21 19:13:10 DEBUG: pid 31850: read kind from backend E
> 2005-11-21 19:13:10 DEBUG: pid 31850: pool_process_query: waiting for 
> secondary for data ready
> 2005-11-21 19:13:10 ERROR: pid 31850: pool_process_query: kind does not 
> match between backends master(E) secondary(P)
> 2005-11-21 19:13:10 DEBUG: pid 31850: connecting postmaster Unix domain 
> socket: /tmp/.s.PGSQL.5531
> 2005-11-21 19:13:10 DEBUG: pid 31850: connected to postmaster Unix domain 
> socket: /tmp/.s.PGSQL.5531 fd: 11
> 2005-11-21 19:13:10 DEBUG: pid 31850: connecting postmaster Unix domain 
> socket: /tmp/.s.PGSQL.5532
> 2005-11-21 19:13:10 DEBUG: pid 31850: connected to postmaster Unix domain 
> socket: /tmp/.s.PGSQL.5532 fd: 11
> 2005-11-21 19:13:10 LOG:   pid 31850: notice_backend_error: master: 1 fail 
> over request from pid 31850
> 2005-11-21 19:13:10 DEBUG: pid 14035: failover_handler called
> 2005-11-21 19:13:10 LOG:   pid 14035: starting degeneration. shutdown master 
> host (5531)
> 2005-11-21 19:13:10 DEBUG: pid 14035: kill 32185



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