[pgpool-general-jp: 170] Re: pgpoolでのupdateについて
Mizuno Shinya
098.mizuno.shinya @ gmail.com
2007年 6月 8日 (金) 13:18:31 JST
07/06/06 に Mizuno Shinya<098.mizuno.shinya @ gmail.com> さんは書きました:
> 浅羽様
>
>
> > 申し訳ありません。新しく作りなおしたので、再度お試しいただけないでしょ
> > うか?
>
> 素早い、ご対応ありがとうございます。
浅羽様
> 引き続き、いろいろとためしてみます。
引き続き試していたところ、ERROR: kind mismatch between backends
が発生しました。
load_balance_mode = true の状態で、
1. begin;
2. select * from xxxxxxxxxx;
3. end;
と実行したところ、何回かに一回の割合で、上記のエラーが発生しま
す。
マニュアルには、トランザクション中の問い合わせは、レプリケー
ションされるとのことでしたが、調べたところ、トランザクション内
でも2番目のselectはレプリケーションされていませんでした。
load_balance_mode = false、もしくは、selectの先頭にコメントを
つけて実行したところ、問題はないように見受けられましたので、
トランザクションとselectが関係しているのでしょうか。
お手数をおかけし、申し訳ありませんが、ご確認くださいませ。
よろしくお願いいたします。
以下、実行に関する情報です。
<< サーバ構成 >>
WEBサーバ apache2.0.59(php4.4.7)+pgpool-II-1.1([pgpool-general-jp: 166]のパッチ)
DB1サーバ postgres 8.2.4
DB2サーバ postgres 8.2.4
各OS FreeBSD 6.1R
各サーバはタイムスタンプにずれがあります
<< pgpoolのログ >>
pgpool: 2007-06-08 12:09:33 DEBUG: pid 29309: read kind from frontend Q(51)
pgpool: 2007-06-08 12:09:33 LOG: pid 29309: statement: begin;
pgpool: 2007-06-08 12:09:33 DEBUG: pid 29309: waiting for backend 0
completing the query
pgpool: 2007-06-08 12:09:33 DEBUG: pid 29309: waiting for backend 1
completing the query
pgpool: 2007-06-08 12:09:33 DEBUG: pid 29309: pool_process_query: num_fds: 10
pgpool: 2007-06-08 12:09:33 DEBUG: pid 29309: read_kind_from_backend:
read kind from 0 th backend C NUM_BACKENDS: 2
pgpool: 2007-06-08 12:09:33 DEBUG: pid 29309: read_kind_from_backend:
read kind from 1 th backend C NUM_BACKENDS: 2
pgpool: 2007-06-08 12:09:33 DEBUG: pid 29309: pool_process_query: kind
from backend: C
pgpool: 2007-06-08 12:09:33 DEBUG: pid 29309: read_kind_from_backend:
read kind from 0 th backend Z NUM_BACKENDS: 2
pgpool: 2007-06-08 12:09:33 DEBUG: pid 29309: read_kind_from_backend:
read kind from 1 th backend Z NUM_BACKENDS: 2
pgpool: 2007-06-08 12:09:33 DEBUG: pid 29309: pool_process_query: kind
from backend: Z
pgpool: 2007-06-08 12:09:33 DEBUG: pid 29309:
pool_read_message_length: slot: 0 length: 5
pgpool: 2007-06-08 12:09:33 DEBUG: pid 29309:
pool_read_message_length: slot: 1 length: 5
pgpool: 2007-06-08 12:09:33 DEBUG: pid 29309: ReadyForQuery: message length: 5
pgpool: 2007-06-08 12:09:33 DEBUG: pid 29309: ReadyForQuery:
transaction state: T
pgpool: 2007-06-08 12:09:33 DEBUG: pid 29309: pool_process_query: num_fds: 10
pgpool: 2007-06-08 12:09:34 DEBUG: pid 29309: read kind from frontend Q(51)
pgpool: 2007-06-08 12:09:34 LOG: pid 29309: statement: SELECT * FROM
mst_customer WHERE c_id = 107680;
pgpool: 2007-06-08 12:09:34 DEBUG: pid 29309: waiting for backend 0
completing the query
pgpool: 2007-06-08 12:09:34 DEBUG: pid 29309: pool_process_query: num_fds: 9
pgpool: 2007-06-08 12:09:34 DEBUG: pid 29309: read_kind_from_backend:
read kind from 0 th backend T NUM_BACKENDS: 2
pgpool: 2007-06-08 12:09:34 ERROR: pid 29309: pool_process_query: 0 th
kind T does not match with master connection kind
pgpool: 2007-06-08 12:09:34 LOG: pid 29309: do_child: exits with
status 1 due to error
<< pgpool.conf >>
#
# pgpool-II configuration file sample
# $Header: /cvsroot/pgpool/pgpool-II/pgpool.conf.sample,v 1.4
2007/05/17 06:46:02 yamaguti Exp $
# Host name or IP address to listen on: '*' for all, '' for no TCP/IP
# connections
listen_addresses = 'localhost'
# Port number for pgpool
port = 9999
# Port number for pgpool communication manager
pcp_port = 9898
# Unix domain socket path. (The Debian package defaults to
# /var/run/postgresql.)
socket_dir = '/tmp'
# Unix domain socket path for pgpool communication manager.
# (Debian package defaults to /var/run/postgresql)
pcp_socket_dir = '/tmp'
# Unix domain socket path for the backend. Debian package defaults to
/var/run/postgresql!
backend_socket_dir = '/tmp'
# pgpool communication manager timeout. 0 means no timeout, but
strongly not recommended!
pcp_timeout = 10
# number of pre-forked child process
num_init_children = 24
# Number of connection pools allowed for a child process
max_pool = 4
# If idle for this many seconds, child exits. 0 means no timeout.
child_life_time = 300
# If idle for this many seconds, connection to PostgreSQL closes.
# 0 means no timeout.
connection_life_time = 0
# If child_max_connections connections were received, child exits.
# 0 means no exit.
child_max_connections = 0
# Logging directory
logdir = '/tmp'
# Replication mode
replication_mode = true
# Set this to true if you want to avoid deadlock situations when
# replication is enabled. There will, however, be a noticable performance
# degradation. A workaround is to set this to false and insert a /*STRICT*/
# comment at the beginning of the SQL command.
replication_strict = true
# When replication_strict is set to false, there will be a chance for
# deadlocks. Set this to nonzero (in milliseconds) to detect this
# situation and resolve the deadlock by aborting current session.
replication_timeout = 5000
# Load balancing mode, i.e., all SELECTs except in a transaction block
# are load balanced. This is ignored if replication_mode is false.
load_balance_mode = true
# if there's a data mismatch between master and secondary
# start degeneration to stop replication mode
replication_stop_on_mismatch = false
# Semicolon separated list of queries to be issued at the end of a session
reset_query_list = 'ABORT; /*NO LOAD BALANCE*/SELECT
pg_advisory_unlock_all(); RESET ALL; SET SESSION AUTHORIZATION
DEFAULT'
# If true print timestamp on each log line.
print_timestamp = true
# If true, operate in master/slave mode.
master_slave_mode = false
# If true, cache connection pool.
connection_cache = true
# Health check timeout. 0 means no timeout.
health_check_timeout = 20
# Health check period. 0 means no health check.
health_check_period = 60
# Health check user
health_check_user = 'pgsql'
# If true, automatically lock table with INSERT statements to keep SERIAL
# data consistency. An /*INSERT LOCK*/ comment has the same effect. A
# /NO INSERT LOCK*/ comment disables the effect.
insert_lock = false
# If true, ignore leading white spaces of each query while pgpool judges
# whether the query is a SELECT so that it can be load balanced. This
# is useful for certain APIs such as DBI/DBD which is known to adding an
# extra leading white space.
ignore_leading_white_space = true
# If true, print all statements to the log. Like the log_statement option
# to PostgreSQL, this allows for observing queries without engaging in full
# debugging.
log_statement = true
# If true, incoming connections will be printed to the log.
log_connections = true
# If true, hostname will be shown in ps status. Also shown in
# connection log if log_connections = true.
# Be warned that this feature will add overhead to look up hostname.
log_hostname = true
# if non 0, run in parallel query mode
parallel_mode = false
# if non 0, use query cache
enable_query_cache = false
#set pgpool2 hostname
pgpool2_hostname = 'dev.xxxxxxx.com'
# system DB info
system_db_hostname = 'localhost'
system_db_port = 5432
system_db_dbname = 'pgpool'
system_db_schema = 'pgpool_catalog'
system_db_user = 'pgpool'
system_db_password = ''
# backend_hostname, backend_port, backend_weight
# here are examples
backend_hostname0 = 'db1.xxxxxxx.com'
backend_port0 = 5432
backend_weight0 = 1
backend_hostname1 = 'db2.xxxxxxx.com'
backend_port1 = 5432
backend_weight1 = 1
# - HBA -
# If true, use pool_hba.conf for client authentication. In pgpool-II
# 1.1, the default value is false. The default value will be true in
# 1.2.
enable_pool_hba = true
<< db1のログ >>
Jun 8 12:09:36 db1 postgres[5888]: [14-1] LOG: statement: begin;
Jun 8 12:09:37 db1 postgres[5888]: [15-1] LOG: statement: SELECT *
FROM mst_customer WHERE c_id = 107680;
Jun 8 12:09:37 db1 postgres[5888]: [16-1] LOG: unexpected EOF on
client connection
<< db2のログ >>
Jun 8 12:09:38 db2 postgres[20549]: [12-1] LOG: statement: begin;
Jun 8 12:09:39 db2 postgres[20549]: [13-1] LOG: unexpected EOF on
client connection
>
> 試してみたところ、問題ないようでした。
>
> 引き続き、いろいろとためしてみます。
> このたびはありがとうございました。
>
pgpool-general-jp メーリングリストの案内