[pgsql-jp: 37855] Re: kind mismatch between backends
Hisakazu Nakai
nakai @ shinko.co.jp
2006年 12月 26日 (火) 10:48:01 JST
中井です。
お手数をお掛けしています。
pgpool.conf を添付します。
listen_addresses = '*'
port = 5432
socket_dir = '/tmp'
backend_host_name = ''
backend_port = 9999
backend_socket_dir = '/tmp'
secondary_backend_host_name = 'bay95'
secondary_backend_port = 5432
num_init_children = 32
max_pool = 4
child_life_time = 300
connection_life_time = 0
child_max_connections = 0
logdir = '/tmp'
replication_mode = true
replication_strict = true
replication_timeout = 5000
load_balance_mode = false
weight_master = 0.5
weight_secondary = 0.5
replication_stop_on_mismatch = true
reset_query_list = 'ABORT; RESET ALL; SET SESSION AUTHORIZATION DEFAULT'
print_timestamp = true
master_slave_mode = false
connection_cache = true
health_check_timeout = 20
health_check_period = 0
health_check_user = 'nobody'
insert_lock = true
ignore_leading_white_space = false
log_statement = true
event_command = '/usr/local/bin/pgpool_event_comm'
<* * * * * kind does not について * * * * *>
Tatsuo Ishii wrote:
>> 2006-12-22 08:32:12 ERROR: pid 22580: read_kind: kind does not match
>> between backends master(82) secondary(69)
>
> 82は"R"で,認証要求のパケットです.なのでたぶんこれは正常.secondaryの
> 69("i")が変ですね.これは"Empty Query Response"で,空のクエリを送った
> ときの応答です.なぜこんなものが返ってくるのか...調べてみます.
2006-12-18 に pgpool を起動してから、今回、コンソールから psql で
チェックするまでの間は、何も ERROR のログは出ていません。
replication_stop_on_mismatch = true になっていますが、
kind does not match ですぐに縮退運転に入ったわけではないです。
開発用のシステムで show pool_status; を実行すると、
kind does not match のエラーがでます。数分間操作して
いましたが、3回でました。開発用のシステムも
replication_stop_on_mismatch = true になっていますが、
縮退運転に入る様子はありません。
ところが、開発用システムで pgpool を再起動すると、
コンソールから psql で接続しても、kind does not match のエラーが
出なくなりました。
<* * * * * prepared statement について * * * * *>
>>> > >> 2006-12-22 08:37:00 LOG: pid 22580: statement: DEALLOCATE "S_1"
>>> > >> 2006-12-22 08:37:00 LOG: pid 22580: statement: DEALLOCATE "S_2"
>>> > >
>>> > > というのがあります.pid 22580はpsqlで接続しているんですよね?この
メッセー
>>> > > ジはprepared queryが使われたことを示していますが,実際使ってますか?
>> >
>> > 使っていません。このメッセージは不定期に頻繁に出ています。
> 確認ですが,psql以外から接続するときには,このシステムではJavaから接続
> するなどして,prepared queryを使うこともあるのでしょうか?
プロセスIDからするとコンソールからpsqlで接続しているときのことなので、
ありえないような気がします。psqlでセッションを張っている最中に、
その pgpool が他のクライアントとセッションを張るということは
ないですよね。
<* * * * * health check について * * * * *>
> secondryから応答がないことと,health checkが
> 失敗したのは無関係です.secondryから応答がないということは,実際のデー
> タのやりとりの際にpgpoolの子プロセスで検出されています.health checkは
> pgpoolの親プロセスがタイマーで定期的に実施しています.
>
>> 2006-12-22 08:39:02 ERROR: pid 22580: health check failed during
>> write.
>
> は,socketをopenし,スタートアップパケットをpostmasterに送信するために
> writeしたら失敗した,ということを示します.この現象が発生するのは,
> postmasterをshutdownしている最中とか,存在しないDBユーザでhealth check
> した際に起こります(ユーザは"health_check_user"で指定します).
>
>> >> master at port 9999 is down
>
> で,そのwriteに失敗したのはmasterのpostmasterだったと,このログは報告
> しています.
pgpool.conf では、health_check_period = 0 となっており、自動的には
health check はしていません。ログを調べましたが、他に health check の
記録はありませんでした。
<* * * * * これまでのまとめ * * * * *>
1. psqlでコンソール接続なのに prepared statement が頻繁に動いている。
2. show pool_status から 1分以上たって、唐突に kind does not match が
出ている。
3. 唐突にsecondary からの応答が無いと表示し、health check を行い、
master の反応が無いからと言って、secondary だけの縮退運転に入った。
4. 以上の問題は、すべて、コンソールからpsql接続のプロセスにおいて
起きている。
なにか psql で接続しているときにとんでもないことをやったように
見えました。やったつもりは無いんですが。
追伸:kill HUP対応のときに log のファイルをオープンするモードを
追記モードにして頂けると便利かなと思いました。
--
-=-=-=-= SHINKO ELECTRIC INDUSTRIES CO., LTD. =-=-=-=-
=-=-=-=- Research & Development Div. -=-=-=-=
-=-=-=-= Infomation Technology Research Dept. =-=-=-=-
=-=-=-=- Name:Hisakazu Nakai TEL:026-263-3922 -=-=-=-=
-=-=-=-= Mail:nakai @ shinko.co.jp FAX:026-263-4562 =-=-=-=-
pgsql-jp メーリングリストの案内