[Pgpool-general] Question on Failover - pgpool v2.2.4

DM dm.aeqa at gmail.com
Fri Aug 28 18:59:54 UTC 2009


Hell Friends,

I am running the latest pgpool 2.2.4 version. I am having trouble with
Failover. Our Database restarts at 12:30 am midnight every day, during this
restart my pgpool does not reconnect back to DB and I need to restart the
Pgpool.

When my DB restarts, I lose connection from pgpool to DB and I see message
in pgpool log file as  "no valid DB node found" and tries to failover.

I have Failover configuration as failover_command = 'echo %h %p %d >
~/failover' and failback as failback_command = 'echo %h %p %d > ~/failback'

*Is there a way that i can comment "Failover" in pgpool and pgpool
reconnects to DB after restart? Or can I comment* failover_command and
failback_command in pgpool configuration

Here is the log file information

2009-08-28 00:06:31 ERROR: pid 32546: connection to 10.82.70.11(5432) failed
2009-08-28 00:06:31 ERROR: pid 32546: new_connection: create_cp() failed
2009-08-28 00:06:31 LOG:   pid 32546: notice_backend_error: 0 fail over
request from pid 32546
2009-08-28 00:06:31 LOG:   pid 32500: starting degeneration. shutdown host
10.82.70.11(5432)
2009-08-28 00:06:31 ERROR: pid 32500: failover_handler: no valid DB node
found
2009-08-28 00:06:31 LOG:   pid 32500: execute command: echo 10.82.70.11 5432
0 > ~/failover
2009-08-28 00:06:31 LOG:   pid 32500: failover_handler: set new master node:
1
2009-08-28 00:06:31 LOG:   pid 32500: failover done. shutdown host
10.82.70.11(5432)
2009-08-28 00:07:31 LOG:   pid 15665: Cannot accept() new connection. all
backends are down
2009-08-28 00:08:31 LOG:   pid 15601: Cannot accept() new connection. all
backends are down
2009-08-28 00:09:31 LOG:   pid 15664: Cannot accept() new connection. all
backends are down
2009-08-28 00:10:31 LOG:   pid 15624: Cannot accept() new connection. all
backends are down
2009-08-28 00:20:31 LOG:   pid 15656: Cannot accept() new connection. all
backends are down
2009-08-28 00:30:31 LOG:   pid 15661: Cannot accept() new connection. all
backends are down
2009-08-28 00:40:31 LOG:   pid 15652: Cannot accept() new connection. all
backends are down
2009-08-28 00:50:31 LOG:   pid 15662: Cannot accept() new connection. all
backends are down
2009-08-28 01:00:31 LOG:   pid 15653: Cannot accept() new connection. all
backends are down
2009-08-28 01:10:31 LOG:   pid 15663: Cannot accept() new connection. all
backends are down
2009-08-28 01:15:17 LOG:   pid 32500: received fast shutdown request
stop request sent to pgpool. waiting for termination....done.
2009-08-28 01:15:21 LOG:   pid 17908: pgpool successfully started
2009-08-28 01:16:16 LOG:   pid 17973: connection received: host=[local]


Here is my pgpool configuration

#
# pgpool-II configuration file sample
# $Header: /cvsroot/pgpool/pgpool-II/pgpool.conf.sample,v 1.26 2009/02/15
05:26:28 t-ishii Exp $

# Host name or IP address to listen on: '*' for all, '' for no TCP/IP
# connections
#listen_addresses = 'localhost'
listen_addresses = '*'

# Port number for pgpool
#port = 9999
port = 5432

# 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'
pcp_socket_dir = '/var/run/pgpool'

# Unix domain socket path for the backend. Debian package defaults to
/var/run/postgresql!
#backend_socket_dir = '/tmp'
backend_socket_dir = '/var/run/pgpool'

# pgpool communication manager timeout. 0 means no timeout, but strongly not
recommended!
#pcp_timeout = 10
pcp_timeout = 0

# number of pre-forked child process
#num_init_children = 32
num_init_children = 64

# 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

# If client_idle_limit is n (n > 0), the client is forced to be
# disconnected whenever after n seconds idle (even inside an explicit
# transactions!)
# 0 means no disconnect.
client_idle_limit = 0

# Maximum time in seconds to complete client authentication.
# 0 means no timeout.
#authentication_timeout = 60
authentication_timeout = 0

# Logging directory
#logdir = '/tmp'
logdir = '/var/log/pgpool'

# pid file name
pid_file_name = '/var/run/pgpool/pgpool.pid'

# Replication mode
replication_mode = false
#replication_mode = true

# Load balancing mode, i.e., all SELECTs are load balanced.
# This is ignored if replication_mode is false.
load_balance_mode = false

# if there's a data mismatch between master and secondary
# start degeneration to stop replication mode
replication_stop_on_mismatch = false

# If true, replicate SELECT statement when load balancing is disabled.
# If false, it is only sent to the master node.
replicate_select = false

# Semicolon separated list of queries to be issued at the end of a session
reset_query_list = 'ABORT; RESET ALL; SET SESSION AUTHORIZATION DEFAULT'
# for 8.3 or newer PostgreSQL versions DISCARD ALL can be used as
# follows. However beware that DISCARD ALL holds exclusive lock on
# pg_listener so it will be a serious performance problem if there are
# lots of concurrent sessions.
# reset_query_list = 'ABORT; DISCARD ALL'

# 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_timeout = 0

# Health check period.  0 means no health check.
health_check_period = 0

# Health check user
#health_check_user = 'nobody'
health_check_user = 'gpadmin'

# Execute command by failover.
# special values:  %d = node id
#                  %h = host name
#                  %p = port number
#                  %D = database cluster path
#                  %m = new master node id
#                  %M = old master node id
#                  %% = '%' character
#
failover_command = 'echo %h %p %d > ~/failover'

# Execute command by failback.
# special values:  %d = node id
#                  %h = host name
#                  %p = port number
#                  %D = database cluster path
#                  %m = new master node id
#                  %M = old master node id
#                  %% = '%' character
#
failback_command = 'echo %h %p %d > ~/failback'

# If true, automatically locks a table with INSERT statements to keep
# SERIAL data consistency.  If the data does not have SERIAL data
# type, no lock will be issued. An /*INSERT LOCK*/ comment has the
# same effect.  A /NO INSERT LOCK*/ comment disables the effect.
insert_lock = true

# 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
ignore_leading_white_space = false

# 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 = false
log_statement = true

# If true, incoming connections will be printed to the log.
#log_connections = false
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 = false
log_hostname = true

# if non 0, run in parallel query mode
parallel_mode = false

# if non 0, use query cache
enable_query_cache = false
#enable_query_cache = true

#set pgpool2 hostname
pgpool2_hostname = ''

# 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 = 'host1'
#backend_port0 = 5432
#backend_weight0 = 1
#backend_data_directory0 = '/data'
#backend_hostname1 = 'host2'
#backend_port1 = 5433
#backend_weight1 = 1
#backend_data_directory1 = '/data1'

backend_hostname0 = '10.82.70.11'
backend_port0 = 5432
backend_weight0 = 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

# - online recovery -
# online recovery user
recovery_user = 'nobody'

# online recovery password
recovery_password = ''

# execute a command in first stage.
recovery_1st_stage_command = ''

# execute a command in second stage.
recovery_2nd_stage_command = ''

# maximum time in seconds to wait for the recovering node's postmaster
# start-up. 0 means no wait.
# this is also used as a timer waiting for clients disconnected before
# starting 2nd stage
recovery_timeout = 90

# If client_idle_limit_in_recovery is n (n > 0), the client is forced
# to be disconnected whenever after n seconds idle (even inside an
# explicit transactions!)  0 means no disconnect. This parameter only
# takes effect in recovery 2nd stage.
client_idle_limit_in_recovery = 0


Any solution shall be greatly appreciated.

Thanks
Deepak Murthy
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://pgfoundry.org/pipermail/pgpool-general/attachments/20090828/91a79902/attachment-0001.html>


More information about the Pgpool-general mailing list