<html><body><div style="color:#000; background-color:#fff; font-family:HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;font-size:12pt"><br><div style="font-family: HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif; font-size: 12pt;"><div style="font-family: HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif; font-size: 12pt;"><div class="y_msg_container"><br><div id="yiv8991201546"><div><div style="color:#000;background-color:#fff;font-family:HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;font-size:12pt;">Hi,<br clear="none">Thanks for the fast response. Initially I have used phpPgAdmin, and it seems that when i use this tool problem appears.<br clear="none">If i run the commands directly from console everything works as expected. <br clear="none">I guess that is something related to transactions and/or php db driver.<br clear="none"><br
clear="none">Sorry for reporting such an error without testing from console. I will never do that again.<br clear="none"><div><span><br clear="none"></span></div><div> </div><div>Regards,<br clear="none">Adrian Videanu</div><div><br clear="none"></div> <div class="yiv8991201546yqt0376892600" id="yiv8991201546yqt21314"><div style="font-family:HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;font-size:12pt;"> <div style="font-family:HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;font-size:12pt;"> <div dir="ltr"> <hr size="1"> <font face="Arial" size="2"> <b><span style="font-weight:bold;">From:</span></b> Yugo Nagata <nagata@sraoss.co.jp><br clear="none"> <b><span style="font-weight:bold;">To:</span></b> Videanu Adrian <videanuadrian@yahoo.com> <br clear="none"><b><span style="font-weight:bold;">Cc:</span></b> "pgpool-general@pgpool.net" <pgpool-general@pgpool.net> <br
clear="none"> <b><span style="font-weight:bold;">Sent:</span></b> Friday, November 29, 2013 2:29 PM<br clear="none"> <b><span style="font-weight:bold;">Subject:</span></b> Re: [pgpool-general: 2274] Re: pgpool 3.3.1 replicate setup with 3 nodes<br clear="none"> </font> </div> <div class="yiv8991201546y_msg_container"><br clear="none">Hi,<br clear="none"><br clear="none">On Fri, 29 Nov 2013 04:04:24 -0800 (PST)<br clear="none">Videanu Adrian <<a rel="nofollow" shape="rect" ymailto="mailto:videanuadrian@yahoo.com" target="_blank" href="mailto:videanuadrian@yahoo.com">videanuadrian@yahoo.com</a>> wrote:<br clear="none"><br clear="none">> Hi,<br clear="none">> I'll try this and keep you updated.<br clear="none">> Anyway with this config I have the following problem : <br clear="none">> <br clear="none">> SQL error:<br clear="none">> <br clear="none">> ERROR: kind
mismatch among backends. Possible last query was: "commit" kind details are: 0[C] 1[N: there is no transaction in progress] 2[N: there is no transaction in progress]<br clear="none">> HINT: check data consistency among db nodes<br clear="none">> ERROR: kind mismatch among backends. Possible last query was: "commit" kind details are: 0[C] 1[N: there is no transaction in progress] 2[N: there is no transaction in progress]<br clear="none">> HINT: check data consistency among db nodes<br clear="none">> In statement:<br clear="none">> <br clear="none">> SELECT pdb.datname AS datname, pr.rolname AS datowner, pg_encoding_to_char(encoding) AS datencoding, (SELECT description FROM pg_catalog.pg_shdescription pd WHERE pdb.oid=pd.objoid AND pd.classoid='pg_database'::regclass) AS datcomment, (SELECT spcname FROM pg_catalog.pg_tablespace pt WHERE pt.oid=pdb.dattablespace) AS tablespace, CASE WHEN
pg_catalog.has_database_privilege(current_user, pdb.oid, 'CONNECT') THEN
pg_catalog.pg_database_size(pdb.oid) ELSE -1 -- set this magic value, which we will convert to no access later END as dbsize, pdb.datcollate, pdb.datctype FROM pg_catalog.pg_database pdb LEFT JOIN pg_catalog.pg_roles pr ON (pdb.datdba = pr.oid) WHERE true AND NOT pdb.datistemplate ORDER BY pdb.datname<br clear="none">> <br clear="none">> <br clear="none">> Steps to reproduce the issue : <br clear="none"><br clear="none">Could you please tell me details of the steps?<br clear="none"><br clear="none">Is this like as below?<br clear="none"><br clear="none">> 1. Connect to cluster with some user<br clear="none"><br clear="none">$ psql -p 9999 -U user1 -d db1<br clear="none"><br clear="none">> 2. Create a DB on cluster with that specific user (the db is created on all nodes as it should)<br clear="none"><br clear="none">db1=> CREATE DATABASE db2;<br clear="none"><br clear="none">> 3. Try to change the owner of that database
with some other user. (here is where the problem appears)<br clear="none"><br clear="none">db1=> ALTER DATABASE db2 OWNER TO user2;<br clear="none"><br clear="none"><br clear="none">In this steps, I can't reproduce the problem.<br clear="none"><br clear="none">> I have tried with pgpool 3.3.1 and 3.3.2.
The same behavior.<br clear="none">> Also it seems that the same problem was reported here : <br clear="none">> <a rel="nofollow" shape="rect" target="_blank" href="http://www.sraoss.jp/pipermail/pgpool-general/2012-November/001210.html">http://www.sraoss.jp/pipermail/pgpool-general/2012-November/001210.html</a><br clear="none">> <br clear="none">> <br clear="none">> Regards,<br clear="none">> <br clear="none">> Adrian Videanu<br clear="none">> <br clear="none">> <br clear="none">> ________________________________<br clear="none">> From: Yugo Nagata <<a rel="nofollow" shape="rect" ymailto="mailto:nagata@sraoss.co.jp" target="_blank" href="mailto:nagata@sraoss.co.jp">nagata@sraoss.co.jp</a>><br clear="none">> To: Videanu Adrian <<a rel="nofollow" shape="rect" ymailto="mailto:videanuadrian@yahoo.com" target="_blank" href="mailto:videanuadrian@yahoo.com">videanuadrian@yahoo.com</a>> <br
clear="none">> Cc: "<a rel="nofollow" shape="rect" ymailto="mailto:pgpool-general@pgpool.net" target="_blank" href="mailto:pgpool-general@pgpool.net">pgpool-general@pgpool.net</a>" <<a rel="nofollow" shape="rect" ymailto="mailto:pgpool-general@pgpool.net" target="_blank" href="mailto:pgpool-general@pgpool.net">pgpool-general@pgpool.net</a>> <br clear="none">> Sent: Friday, November 29,
2013 12:27 PM<br clear="none">> Subject: Re: [pgpool-general: 2274] Re: pgpool 3.3.1 replicate setup with 3 nodes<br clear="none">> <br clear="none">> <br clear="none">> I'm sorry for late response.<br clear="none">> <br clear="none">> I have reproduced and understood the problem.<br clear="none">> In pgpool_recovery_pitr script, nextval/setval should be executed for all backend nodes. In your case, nextval/setval was executed only for Node1. Node3 is OK since this is recovered from Node1. However, Node2's sequence got delayed since nextval/setval is not excuted.<br clear="none">> <br clear="none">> Fix your pgpool_recovery_pitr as below.<br clear="none">> (Hostname and port should be rewriten properly)<br clear="none">> <br clear="none">> if [ "$i" != "" ];then<br clear="none">> psql -h Node1 -p $port -c "SELECT setval(oid, nextval(oid)) FROM pg_class WHERE relkind = 'S'" $i<br
clear="none">> psql -h Node2 -p $port -c "SELECT setval(oid, nextval(oid)) FROM pg_class WHERE relkind = 'S'" $i<br clear="none">> psql -h Node3 -p $port -c "SELECT
setval(oid, nextval(oid)) FROM pg_class WHERE relkind = 'S'" $i<br clear="none">> fi<br clear="none">> <br clear="none">> <br clear="none">> <br clear="none">> On Sun, 24 Nov 2013 23:23:46 -0800 (PST)<br clear="none">> Videanu Adrian <<a rel="nofollow" shape="rect" ymailto="mailto:videanuadrian@yahoo.com" target="_blank" href="mailto:videanuadrian@yahoo.com">videanuadrian@yahoo.com</a>> wrote:<br clear="none">> <br clear="none">> > anybody ..... ?<br clear="none">> > <br clear="none">> > <br clear="none">> > <br clear="none">> > Regards,<br clear="none">> > Adrian Videanu<br clear="none">> > <br clear="none">> > <br clear="none">> > ________________________________<br clear="none">> > From: Videanu Adrian <<a rel="nofollow" shape="rect" ymailto="mailto:videanuadrian@yahoo.com" target="_blank"
href="mailto:videanuadrian@yahoo.com">videanuadrian@yahoo.com</a>><br clear="none">> > To: Yugo Nagata <<a rel="nofollow" shape="rect" ymailto="mailto:nagata@sraoss.co.jp" target="_blank" href="mailto:nagata@sraoss.co.jp">nagata@sraoss.co.jp</a>> <br clear="none">> > Cc: "<a rel="nofollow" shape="rect" ymailto="mailto:pgpool-general@pgpool.net" target="_blank" href="mailto:pgpool-general@pgpool.net">pgpool-general@pgpool.net</a>" <<a rel="nofollow" shape="rect" ymailto="mailto:pgpool-general@pgpool.net" target="_blank" href="mailto:pgpool-general@pgpool.net">pgpool-general@pgpool.net</a>> <br clear="none">> > Sent: Tuesday, November 12, 2013 4:46 PM<br clear="none">> > Subject: [pgpool-general: 2274] Re: pgpool 3.3.1 replicate setup with 3 nodes<br clear="none">> > <br clear="none">> > <br clear="none">> > <br clear="none">> > Hi,<br clear="none">> > <br clear="none">> > I
have updated the scripts with the ones that you provided but I have the same problem.<br clear="none">> > My pgpool_recovery_pitr.sh script is the same as before, so I suspect that the problem arise from this script. Because after I perform online recovery on one of the nodes, the node that is not involved into online_recovery has the sequence value with 1 unit less than other servers.<br clear="none">> > So when I perform an insert I get : kind mismatch...<br clear="none">> > <br clear="none">> > <br clear="none">> > Example, db = replication_bench :<br clear="none">> > <br clear="none">> > Initial setup <br clear="none">> > <br clear="none">> > Node1 -
sequence1 = 1184<br clear="none">> > Node2 - sequence1 = 1184<br clear="none">> > Node3 - sequence1 = 1184<br clear="none">> > ------------------------------------------------------<br clear="none">> > <br clear="none">> > Node 3 has failed.<br clear="none">> > <br clear="none">> > ------------------------------------------------------<br clear="none">> > Start online recovery:<br clear="none">> > <br clear="none">> > pgpool_recovery_pitr.sh<br clear="none">> > <br clear="none">> > + read i<br clear="none">> > + '[' replication_bench '!=' ''<br clear="none">> > ']'<br clear="none">> > + psql -p 5432 -c 'SELECT setval(oid, nextval(oid)) FROM pg_class WHERE relkind = '\''S'\''' replication_bench<br clear="none">> > setval<br clear="none">> > --------<br clear="none">> > 11084<br clear="none">> > 11084<br
clear="none">> > (2 rows)<br clear="none">> > <br clear="none">> > -------------------------------------------------------<br clear="none">> > Node 3 is back online BUT:<br clear="none">> > <br clear="none">> > Node1 - sequence1 = 1185<br clear="none">> > Node2 - sequence1 = 1184 <-------
Wrong sequence<br clear="none">> > Node3 - sequence1 = 1185<br clear="none">> > ----------------------------------------------------------<br clear="none">> > insert into ........ => kind mismatch among backends.<br clear="none">> > <br clear="none">> > <br clear="none">> > Hope this is clear the the previous examples<br clear="none">> > <br clear="none">> > <br clear="none">> > <br clear="none">> > Regards,<br clear="none">> > Adrian Videanu<br clear="none">> > <br clear="none">> > <br clear="none">> > ________________________________<br clear="none">> > From: Yugo Nagata <<a rel="nofollow" shape="rect" ymailto="mailto:nagata@sraoss.co.jp" target="_blank" href="mailto:nagata@sraoss.co.jp">nagata@sraoss.co.jp</a>><br clear="none">> > To: Videanu Adrian <<a rel="nofollow" shape="rect" ymailto="mailto:videanuadrian@yahoo.com"
target="_blank" href="mailto:videanuadrian@yahoo.com">videanuadrian@yahoo.com</a>> <br clear="none">> > Cc: "<a rel="nofollow" shape="rect" ymailto="mailto:pgpool-general@pgpool.net" target="_blank" href="mailto:pgpool-general@pgpool.net">pgpool-general@pgpool.net</a>" <<a rel="nofollow" shape="rect" ymailto="mailto:pgpool-general@pgpool.net" target="_blank" href="mailto:pgpool-general@pgpool.net">pgpool-general@pgpool.net</a>> <br clear="none">> > Sent: Monday, November 11, 2013 8:07 AM<br clear="none">> > Subject: Re: [pgpool-general: 2237] pgpool 3.3.1 replicate setup with 3 nodes<br clear="none">> > <br clear="none">> > <br clear="none">> > Hi,<br clear="none">> > <br clear="none">> > On Thu, 7 Nov 2013 06:23:56 -0800 (PST)<br clear="none">> > Videanu Adrian <<a rel="nofollow" shape="rect" ymailto="mailto:videanuadrian@yahoo.com" target="_blank"
href="mailto:videanuadrian@yahoo.com">videanuadrian@yahoo.com</a>> wrote:<br clear="none">> > <br clear="none">> > > Hi <br clear="none">> > > <br clear="none">> > > <br clear="none">> > > I have just followed the tutorial, and in the tutorial, the pgpool_remote_start looks like :<br clear="none">> > <br clear="none">> > I'm very sorry for confusing you. The manual's sample script is wrong. I'll fix this.<br clear="none">> > <br clear="none">> > The right pgpool_remote_start is here; and I attached the same script.<br clear="none">> > <a rel="nofollow" shape="rect" target="_blank" href="http://www.pgpool.net/docs/latest/pgpool_remote_start">http://www.pgpool.net/docs/latest/pgpool_remote_start</a><br clear="none">> > <br clear="none">> > In addition, I send the right basebackup.sh too.<br clear="none">> > In the previous wrong script, recovery.conf wasn't sent
to recovery target.<br clear="none">> > <br clear="none">> > Could you try the new scripts attached?<br clear="none">> > (You might have to edit the scripts for your environment about ssh port, pgctl path etc.)<br clear="none">> > <br clear="none">> > If those doesn't work well still, please send pgpool and postgresql logs for analysis.<br clear="none">> > <br clear="none">> > > <br clear="none">> > > #!<br clear="none">> > /bin/sh<br clear="none">> > > DEST=$1<br clear="none">> > > DESTDIR=$2<br clear="none">> > > PGCTL=/usr/local/pgsql/bin/pg_ctl # Deploy a base backup<br clear="none">> > > ssh -T $DEST 'cd /data/; tar zxf pgsql.tar.gz' 2>/dev/null 1>/dev/null < /dev/null<br clear="none">> > > # Startup PostgreSQL server<br clear="none">> > > ssh -T $DEST $PGCTL -w -D $DESTDIR start 2>/dev/null
1>/dev/null < /dev/null &<br clear="none">> > > so, the first line decompress the pgsql.tar.gz and the starts the postgres server.<br clear="none">> > > <br clear="none">> > > <br clear="none">> > > <br clear="none">> > > I have updated my scripts:<br clear="none">> > > <br clear="none">> > > basebackup.sh<br clear="none">> > > <br clear="none">> > > #!/bin/bash -x<br clear="none">> > > <br clear="none">> > > DATA=$1<br clear="none">> > > RECOVERY_TARGET=$2<br clear="none">> > > RECOVERY_DATA=$3<br clear="none">> > > <br clear="none">> > > psql -c "select pg_start_backup('pgpool-recovery')" postgres<br clear="none">> > > echo "restore_command = 'scp -P 2022 $HOSTNAME:/var/lib/postgresql/9.2/archive/%f %p'" > /var/lib/postgresql/9.2/data/recovery.conf<br clear="none">> > > tar -C
/var/lib/postgresql/9.2/data -zcf pgsql.tar.gz . --exclude='postmaster.log' <br clear="none">> > --exclude='postmaster.pid' --exclude='postmaster.opts'<br clear="none">> > > psql -c 'select pg_stop_backup()' postgres<br clear="none">> >
> scp -P 2022 pgsql.tar.gz $RECOVERY_TARGET:$RECOVERY_DATA<br clear="none">> > > ssh -T -p 2022 root@$RECOVERY_TARGET 'cd /var/lib/postgresql/9.2/data; tar zxf pgsql.tar.gz'<br clear="none">> > > <br clear="none">> > > <br clear="none">> > > #same pgpool_recovery_pitr script<br clear="none">> > > <br clear="none">> > > <br clear="none">> > > pgpool_remote_start<br clear="none">> > > <br clear="none">> > > #!/bin/bash -x<br clear="none">> > > #<br clear="none">> > > # Start PostgreSQL on the recovery target node<br clear="none">> > > #<br clear="none">> > > DEST=$1<br clear="none">> > > DESTDIR=$2<br clear="none">> > > # Deploy a base backup<br clear="none">> > > ssh -T -p 2022 root@$DEST '/etc/init.d/postgresql-9.2 start'<br clear="none">> > > rm -rf pgsql.tar.gz<br clear="none">> > > rm -rf
recovery.conf<br clear="none">> > > <br clear="none">> > > <br clear="none">> > > but the problem persists.<br clear="none">> > > Is this what you are trying to say or I have misunderstood ? <br clear="none">> > > <br clear="none">> > > <br clear="none">> >
> <br clear="none">> > > Regards,<br clear="none">> > > Adrian Videanu<br clear="none">> > > <br clear="none">> > > <br clear="none">> > > ________________________________<br clear="none">> > > From: Yugo Nagata<br clear="none">> > <<a rel="nofollow" shape="rect" ymailto="mailto:nagata@sraoss.co.jp" target="_blank" href="mailto:nagata@sraoss.co.jp">nagata@sraoss.co.jp</a>><br clear="none">> > > To: Videanu Adrian <<a rel="nofollow" shape="rect" ymailto="mailto:videanuadrian@yahoo.com" target="_blank" href="mailto:videanuadrian@yahoo.com">videanuadrian@yahoo.com</a>> <br clear="none">> > > Cc: "<a rel="nofollow" shape="rect" ymailto="mailto:pgpool-general@pgpool.net" target="_blank" href="mailto:pgpool-general@pgpool.net">pgpool-general@pgpool.net</a>" <<a rel="nofollow" shape="rect" ymailto="mailto:pgpool-general@pgpool.net" target="_blank"
href="mailto:pgpool-general@pgpool.net">pgpool-general@pgpool.net</a>> <br clear="none">> > > Sent: Thursday, November 7, 2013 1:58 PM<br clear="none">> > > Subject: Re: [pgpool-general: 2237] pgpool 3.3.1 replicate setup with 3 nodes<br clear="none">> > > <br clear="none">> > > <br clear="none">> > >
Hi,<br clear="none">> > > <br clear="none">> > > In your basebackup.sh, backuped data (pgsql.tar.gz) is sent to the recovery target<br clear="none">> > > host, but isn't extracted. This should be extracted at 1st stage in basebackup.sh<br clear="none">> > > and updated to latest state at 2nd stage in pgpool_recovery_pitr.sh.<br clear="none">> > > So, you should<br clear="none">> > not overwrite the data in pgpool_remote_start. This only have<br clear="none">> > > to restart postgresql.<br clear="none">> > > <br clear="none">> > > <br clear="none">> > > <br clear="none">> > > On Thu, 7 Nov 2013 03:15:44 -0800 (PST)<br clear="none">> > > Videanu Adrian <<a rel="nofollow" shape="rect" ymailto="mailto:videanuadrian@yahoo.com" target="_blank" href="mailto:videanuadrian@yahoo.com">videanuadrian@yahoo.com</a>> wrote:<br clear="none">> >
> <br clear="none">> > > > Hi,<br clear="none">> > > > <br clear="none">> > > > Here are my scripts: <br clear="none">> > > > (<br clear="none">> > > > There must be something related to this
line <br clear="none">> > > > <br clear="none">> > > > psql -p $port -c "SELECT setval(oid, nextval(oid)) FROM pg_class WHERE relkind = 'S'" $i<br clear="none">> > > > )<br clear="none">> > > > <br clear="none">> > > > <br clear="none">> > > > <br clear="none">> > > > basebackup.sh<br clear="none">> > > > <br clear="none">> > > > #!/bin/bash -x<br clear="none">> > > > <br clear="none">> > > > DATA=$1<br clear="none">> > > > RECOVERY_TARGET=$2<br clear="none">> > > > RECOVERY_DATA=$3<br clear="none">> > > > <br clear="none">> > > > psql -c "select pg_start_backup('pgpool-recovery')" postgres<br clear="none">> > > ><br clear="none">> > echo "restore_command = 'scp -P 2022 $HOSTNAME:/var/lib/postgresql/9.2/archive/%f
%p'" > /var/lib/postgresql/9.2/data/recovery.conf<br clear="none">> > > > tar -C /var/lib/postgresql/9.2/data -zcf pgsql.tar.gz . --exclude='postmaster.log' --exclude='postmaster.pid'
--exclude='postmaster.opts'<br clear="none">> > > > psql -c 'select pg_stop_backup()' postgres<br clear="none">> > > > scp -P 2022 pgsql.tar.gz $RECOVERY_TARGET:$RECOVERY_DATA<br clear="none">> > > > <br clear="none">> > > > <br clear="none">> > > > pgpool_recovery_pitr.sh<br clear="none">> > > > <br clear="none">> > > > #!/bin/bash<br clear="none">> > > > <br clear="none">> > > > # Online recovery 2nd stage script<br clear="none">> > > > #<br clear="none">> > > > datadir=$1 # master dabatase cluster<br clear="none">> > > > DEST=$2 # hostname of the DB node to be recovered<br clear="none">> > > > DESTDIR=$3 # database cluster of the DB node to be recovered<br clear="none">>
> > ><br clear="none">> > port=5432 # PostgreSQL port number<br clear="none">> > > >
archdir=/var/lib/postgresql/9.2/archive # archive log directory<br clear="none">> > > > <br clear="none">> > > > # Force to flush current value of sequences to xlog<br clear="none">> > > > psql -p $port -t -c 'SELECT datname FROM pg_database WHERE NOT datistemplate AND datallowconn' template1|<br clear="none">> > > > while read i<br clear="none">> > > > do<br clear="none">> > > > if [ "$i" != "" ];then<br clear="none">> > > > psql -p $port -c "SELECT setval(oid, nextval(oid)) FROM pg_class WHERE relkind = 'S'" $i<br clear="none">> > > > fi<br clear="none">> > > > done<br clear="none">> > > > <br clear="none">> > > > psql -p $port -c "SELECT pgpool_switch_xlog('$archdir')" template1<br clear="none">> > > > <br clear="none">> > > > <br clear="none">> >
> > pgpool_remote_start<br clear="none">> > > > <br clear="none">> > > > #!/bin/bash -x<br clear="none">> > > > #<br clear="none">> > > > # Start PostgreSQL on the recovery target
node<br clear="none">> > > > #<br clear="none">> > > > DEST=$1<br clear="none">> > > > DESTDIR=$2<br clear="none">> > > > # Deploy a<br clear="none">> > base backup<br clear="none">> > > > ssh -T -p 2022 root@$DEST 'cd /var/lib/postgresql/9.2/data; tar zxf pgsql.tar.gz'<br clear="none">> > > > ssh -T -p 2022 root@$DEST '/etc/init.d/postgresql-9.2 start'<br clear="none">> > > > rm -rf pgsql.tar.gz<br clear="none">> > > > rm -rf recovery.conf<br clear="none">> > > > <br clear="none">> > > > <br clear="none">> > > > <br clear="none">> > > > These are my scripts used in recovery process. I will put here the config file also:<br clear="none">> > > > <br clear="none">> > > > # ----------------------------<br clear="none">> > > > # pgPool-II configuration file<br
clear="none">> > > > # ----------------------------<br clear="none">> > > > #<br clear="none">> > > > # This file consists of lines of the form:<br clear="none">> > > > #<br clear="none">> > > > # name =
value<br clear="none">> > > > #<br clear="none">> > > > # Whitespace may be used. Comments are introduced with "#" anywhere on a line.<br clear="none">> > > > # The complete list of parameter names and allowed values can be found in the<br clear="none">> > > > # pgPool-II documentation.<br clear="none">> > > > #<br clear="none">> > > > # This file is read on server<br clear="none">> > startup and when the server receives a SIGHUP<br clear="none">> > > > # signal. If you edit the file on a running system, you have to SIGHUP the<br clear="none">> > > > # server for the changes to take effect, or use "pgpool reload". Some<br clear="none">> > > > # parameters, which are marked below, require a server shutdown and restart to<br clear="none">> > > > # take effect.<br clear="none">> > > > #<br
clear="none">> > > > <br clear="none">> > > > <br clear="none">> > > > #------------------------------------------------------------------------------<br clear="none">> >
> > # CONNECTIONS<br clear="none">> > > > #------------------------------------------------------------------------------<br clear="none">> > > > <br clear="none">> > > > # - pgpool Connection Settings -<br clear="none">> > > > <br clear="none">> > > > listen_addresses = '*'<br clear="none">> > > > # Host name or IP address to<br clear="none">> > listen on:<br clear="none">> > > > # '*' for all, '' for no TCP/IP connections<br clear="none">> >
> >
# (change requires restart)<br clear="none">> > > > port = 9999<br clear="none">> > > > # Port number<br clear="none">> > > ><br clear="none">> > # (change requires restart)<br clear="none">> > > > socket_dir = '/tmp'<br clear="none">> > > >
# Unix domain socket path<br clear="none">> > > > # The Debian package defaults to<br clear="none">> > > ><br clear="none">> > # /var/run/postgresql<br clear="none">> > > >
# (change requires restart)<br clear="none">> > > > <br clear="none">> > > > <br clear="none">> > > > # - pgpool Communication Manager Connection Settings -<br clear="none">> > > > <br clear="none">> > > > pcp_port = 9898<br clear="none">> > > > # Port number for pcp<br clear="none">> > > ><br clear="none">> >
# (change requires restart)<br clear="none">> > >
> pcp_socket_dir = '/tmp'<br clear="none">> > > > # Unix domain socket path for pcp<br clear="none">> > > > # The Debian package defaults to<br clear="none">> > > ><br clear="none">> > # /var/run/postgresql<br clear="none">> > > >
# (change requires restart)<br clear="none">> > > > <br clear="none">> > > > # - Backend Connection Settings -<br clear="none">> > > > <br clear="none">> > > > backend_hostname0 = '192.168.91.33'<br clear="none">> > > > # Host name or IP address to connect to for backend 0<br clear="none">> > > > backend_port0 = 5432<br clear="none">> > > ><br clear="none">> >
# Port number for backend 0<br clear="none">> > > > backend_weight0 = 1<br clear="none">> > > > # Weight for backend 0 (only in load balancing mode)<br clear="none">> > > > backend_data_directory0 = '/var/lib/postgresql/9.2/data'<br clear="none">> > > > # Data directory for backend 0<br
clear="none">> > > > backend_flag0 = 'ALLOW_TO_FAILOVER'<br clear="none">> >
> ><br clear="none">> > # Controls various backend behavior<br clear="none">> > > > # ALLOW_TO_FAILOVER or DISALLOW_TO_FAILOVER<br clear="none">> > > > <br clear="none">> > > > backend_hostname1 = '192.168.91.34'<br clear="none">> > > > backend_port1 = 5432<br clear="none">> > > > backend_weight1 = 1<br clear="none">> > > > backend_data_directory1 = '/var/lib/postgresql/9.2/data'<br clear="none">> > > > backend_flag1 = 'ALLOW_TO_FAILOVER'<br
clear="none">> > > > <br clear="none">> > > > <br clear="none">> > > > backend_hostname2 = '192.168.91.35'<br clear="none">>
> > > backend_port2 = 5432<br clear="none">> > > > backend_weight2 = 1<br clear="none">> > > > backend_data_directory2 =<br clear="none">> > '/var/lib/postgresql/9.2/data'<br clear="none">> > > > backend_flag2 = 'ALLOW_TO_FAILOVER'<br clear="none">> > > > <br clear="none">> > > > <br clear="none">> > > > # - Authentication -<br clear="none">> > > > <br clear="none">> > > > enable_pool_hba = on<br clear="none">> > > > # Use pool_hba.conf for client authentication<br clear="none">> > > > pool_passwd = ''<br clear="none">> > > >
# File name of pool_passwd
for md5 authentication.<br clear="none">> > > ><br clear="none">> > # "" disables pool_passwd.<br clear="none">> > > > # (change requires restart)<br clear="none">> > > > authentication_timeout = 60<br clear="none">> > > > # Delay in seconds to complete client authentication<br
clear="none">> > > ><br clear="none">> >
# 0 means no timeout.<br clear="none">> > > > <br clear="none">> > > > # - SSL Connections -<br clear="none">> > > > <br clear="none">> > > > ssl = off<br clear="none">> > > > # Enable SSL support<br clear="none">> > > > # (change requires restart)<br clear="none">> > >
> #ssl_key = './server.key'<br clear="none">> > > ><br clear="none">> >
# Path to the SSL private key file<br clear="none">> > > > # (change requires restart)<br clear="none">> > > > #ssl_cert = './server.cert'<br clear="none">> > > > # Path to the SSL public certificate file<br clear="none">> > > ><br clear="none">> >
# (change requires restart)<br clear="none">> > > > #ssl_ca_cert = ''<br clear="none">> > > > # Path to a single PEM format file<br clear="none">> > > > # containing CA root certificate(s)<br clear="none">> > > ><br clear="none">> >
# (change requires restart)<br clear="none">> > > > #ssl_ca_cert_dir = ''<br clear="none">> > > > # Directory containing CA root certificate(s)<br clear="none">> > > > # (change requires restart)<br clear="none">> > > > <br clear="none">> > > > <br clear="none">> > > >
#------------------------------------------------------------------------------<br clear="none">>
> > > # POOLS<br clear="none">> > > ><br clear="none">> > #------------------------------------------------------------------------------<br clear="none">> > > > <br clear="none">> > > > # - Pool size -<br clear="none">> > > > <br clear="none">> > > > num_init_children = 100<br clear="none">> > > > # Number of pools<br clear="none">> > > > # (change requires restart)<br clear="none">> > > > max_pool = 10<br clear="none">> > >
>
# Number of connections per pool<br clear="none">> > > ><br clear="none">> > # (change requires restart)<br clear="none">> > > > <br clear="none">> > > > # - Life time -<br clear="none">> > > > <br clear="none">> > > > child_life_time = 300<br clear="none">> > > > #
Pool exits after being idle for this many seconds<br clear="none">> > > >
child_max_connections = 0<br clear="none">> > > > # Pool exits after receiving that many connections<br clear="none">> > > ><br clear="none">> > # 0 means no exit<br clear="none">> > > > connection_life_time = 0<br clear="none">> > > > # Connection to backend closes after being idle for this
many seconds<br clear="none">> > > >
# 0 means no close<br clear="none">> > > > client_idle_limit = 0<br clear="none">> > > ><br clear="none">> > # Client is disconnected after being idle for that many seconds<br clear="none">> > > > # (even inside an explicit transactions!)<br clear="none">> > > >
# 0 means no disconnection<br clear="none">> > > > <br clear="none">> > > > <br clear="none">> > > > #------------------------------------------------------------------------------<br clear="none">> > > > # LOGS<br clear="none">> > > ><br clear="none">> > #------------------------------------------------------------------------------<br clear="none">> > > > <br clear="none">> > > > # - Where to log -<br clear="none">> > > > <br clear="none">> > > > log_destination = 'syslog'<br clear="none">> > > >
# Where to log<br clear="none">> > > >
# Valid values are combinations of stderr,<br clear="none">> > > > # and syslog. Default to stderr.<br clear="none">> > > > <br clear="none">> > > > # - What to log<br clear="none">> > -<br clear="none">> > > > <br clear="none">> > > > print_timestamp = on<br clear="none">> > > >
# Print timestamp on each line<br clear="none">> > > >
# (change requires restart)<br clear="none">> > > > <br clear="none">> > > > log_connections = on<br clear="none">> > > > # Log connections<br clear="none">> > > > log_hostname = on<br clear="none">> > > ><br clear="none">> > # Hostname will be shown in ps status<br
clear="none">> > > >
# and in logs if connections are logged<br clear="none">> > > > log_statement = off<br clear="none">> > > > # Log all statements<br clear="none">> > > > log_per_node_statement = on<br clear="none">> > > ><br clear="none">> > # Log all statements<br clear="none">> > > >
# with node and backend informations<br clear="none">> > > > log_standby_delay = 'none'<br clear="none">> > > > # Log standby delay<br clear="none">> > > ><br clear="none">> > # Valid values are combinations of always,<br clear="none">> > > >
# if_over_threshold, none<br clear="none">> > > > <br clear="none">> > > > # - Syslog specific -<br clear="none">> > > > <br clear="none">> > > > syslog_facility = 'LOCAL0'<br clear="none">> > > > # Syslog local facility. Default to LOCAL0<br clear="none">> > > > syslog_ident = 'pgpool'<br clear="none">> > > ><br clear="none">> >
# Syslog program
identification string<br clear="none">> > > > # Default to 'pgpool'<br clear="none">> > > > <br clear="none">> > > > # - Debug -<br clear="none">> > > > <br clear="none">> > > > debug_level = 0<br clear="none">> > > > # Debug message verbosity level<br clear="none">> > > ><br clear="none">> >
# 0 means no message, 1 or more mean verbose<br clear="none">> > >
> <br clear="none">> > > > <br clear="none">> > > > #------------------------------------------------------------------------------<br clear="none">> > > > # FILE LOCATIONS<br clear="none">> > > > #------------------------------------------------------------------------------<br clear="none">> > > > <br clear="none">> > > > pid_file_name = '/var/run/pgpool.pid'<br clear="none">> > > > # PID file name<br clear="none">> > > ><br clear="none">> >
# (change requires restart)<br clear="none">> > > > logdir = '/tmp'<br clear="none">> > > >
# Directory of pgPool status file<br clear="none">> > > > # (change requires restart)<br clear="none">> > > > <br clear="none">> > > > <br clear="none">> > > > #------------------------------------------------------------------------------<br clear="none">> > > > # CONNECTION POOLING<br clear="none">> > > ><br clear="none">> > #------------------------------------------------------------------------------<br clear="none">> > > > <br clear="none">> >
> > connection_cache = on<br clear="none">> > > >
# Activate connection pools<br clear="none">> > > > # (change requires restart)<br clear="none">> > > > <br clear="none">> > > > # Semicolon separated list of queries<br clear="none">> > > ><br clear="none">> >
# to be issued at the end of a session<br clear="none">> > > > # The default is for 8.3 and later<br clear="none">> > > > reset_query_list = 'ABORT; DISCARD ALL'<br clear="none">> > > > # The following one is for 8.2 and before<br clear="none">> > > > #reset_query_list = 'ABORT; RESET ALL; SET SESSION
AUTHORIZATION DEFAULT'<br clear="none">> > > >
<br clear="none">> > > > <br clear="none">> > > ><br clear="none">> > #------------------------------------------------------------------------------<br clear="none">> > > > # REPLICATION MODE<br clear="none">> > > > #------------------------------------------------------------------------------<br clear="none">> > > > <br clear="none">> > > > replication_mode = on<br clear="none">> > > > # Activate replication mode<br clear="none">> > > > #
(change requires restart)<br clear="none">> > > > replicate_select = off<br clear="none">> > > ><br clear="none">> >
# Replicate SELECT statements<br clear="none">> > > > # when in replication or parallel mode<br clear="none">> > > > # replicate_select is higher priority than<br clear="none">> > > ><br clear="none">> >
# load_balance_mode.<br clear="none">> > > > <br clear="none">> > > > insert_lock = on<br clear="none">> > > > # Automatically locks a dummy row or a table<br clear="none">> > > > # with INSERT statements to keep SERIAL data<br clear="none">> > > ><br clear="none">> >
# consistency<br clear="none">> > > > # Without SERIAL, no lock will be issued<br clear="none">> > > > lobj_lock_table = ''<br clear="none">> > > > # When rewriting lo_creat command in<br clear="none">> > > ><br clear="none">> >
# replication mode, specify table name to<br clear="none">> > > > # lock<br clear="none">> > > > <br clear="none">> > > > # - Degenerate handling -<br clear="none">> > > > <br clear="none">> > > > replication_stop_on_mismatch = off<br clear="none">> > > > # On disagreement with
the packet kind<br clear="none">> > > ><br clear="none">> >
# sent from backend, degenerate the node<br clear="none">> > > > # which is most likely "minority"<br clear="none">> > > > # If off, just force to exit this session<br clear="none">> > > > <br clear="none">> > > > failover_if_affected_tuples_mismatch = off<br clear="none">> > > ><br
clear="none">> >
# On disagreement with the number of affected<br clear="none">> > > > # tuples in UPDATE/DELETE queries, then<br clear="none">> > > > # degenerate the node which is most likely<br clear="none">> > > ><br clear="none">> >
# "minority".<br clear="none">> > > > # If off, just abort the transaction to<br clear="none">> > > > # keep the consistency<br clear="none">> > > > <br clear="none">> > > > <br clear="none">> > > > #------------------------------------------------------------------------------<br
clear="none">> > > > # LOAD BALANCING MODE<br clear="none">> > > ><br clear="none">>
> #------------------------------------------------------------------------------<br clear="none">> > > > <br clear="none">> > > > load_balance_mode = on<br clear="none">> > > > # Activate load balancing mode<br clear="none">> > > > # (change requires restart)<br clear="none">> > > > ignore_leading_white_space = on<br clear="none">> > > >
# Ignore
leading white spaces of each query<br clear="none">> > > > white_function_list =<br clear="none">> > ''<br clear="none">> > > > # Comma separated list of function names<br clear="none">> > > > # that don't write to database<br clear="none">> > > > # Regexp are accepted<br clear="none">>
> > > black_function_list = 'nextval,setval'<br clear="none">> > >
><br clear="none">> > # Comma separated list of function names<br clear="none">> > > > # that write to database<br clear="none">> > > > # Regexp are accepted<br clear="none">> > > > <br clear="none">> > > > <br clear="none">> > > >
#------------------------------------------------------------------------------<br clear="none">> > > > # MASTER/SLAVE
MODE<br clear="none">> > > ><br clear="none">> > #------------------------------------------------------------------------------<br clear="none">> > > > <br clear="none">> > > > master_slave_mode = off<br clear="none">> > > > # Activate master/slave mode<br clear="none">> > > > # (change requires restart)<br clear="none">> > > > master_slave_sub_mode = 'slony'<br clear="none">> > > >
# Master/slave sub mode<br clear="none">> > > ><br clear="none">> > # Valid values are combinations slony or<br clear="none">> > > > # stream. Default is slony.<br clear="none">> > > >
# (change requires restart)<br clear="none">> > > > <br clear="none">> > > > # - Streaming -<br clear="none">> > > > <br clear="none">> > > > sr_check_period = 0<br clear="none">> > > ><br clear="none">> > # Streaming replication check period<br clear="none">> > > > #
Disabled (0) by default<br clear="none">> > > > sr_check_user = 'postgres'<br clear="none">> >
> > # Streaming replication check user<br clear="none">> > > ><br clear="none">> > # This is necessary even if you disable<br clear="none">> > > > # streaming replication delay check with<br clear="none">> > > >
# sr_check_period = 0<br clear="none">> > > > sr_check_password = ''<br clear="none">> > > ><br clear="none">> > # Password for streaming replication check user<br clear="none">> > > > delay_threshold = 0<br clear="none">> > > > # Threshold before not dispatching query to standby node<br
clear="none">> > > >
# Unit is in bytes<br clear="none">> > > ><br clear="none">> > # Disabled (0) by default<br clear="none">> > > > <br clear="none">> > > > # - Special commands -<br clear="none">> > > > <br clear="none">> > > > follow_master_command = ''<br clear="none">> > > > #
Executes this command after master failover<br clear="none">> > > >
# Special values:<br clear="none">> > > ><br clear="none">> > # %d = node id<br clear="none">> > > > # %h = host name<br clear="none">> > > >
# %p = port number<br clear="none">> > > > # %D =<br clear="none">> > database cluster path<br clear="none">> > > > # %m = new master node id<br clear="none">> > > >
# %H = hostname of the new master node<br clear="none">> > > > # %M = old master node id<br clear="none">> > > ><br clear="none">> > # %P = old primary node id<br clear="none">> > > >
# %r = new master port number<br clear="none">> > > > # %R = new master database cluster path<br clear="none">> > > ><br clear="none">> > # %% = '%' character<br clear="none">> > > > <br clear="none">> > > > <br clear="none">> > > >
#------------------------------------------------------------------------------<br clear="none">>
> > > # PARALLEL MODE<br clear="none">> > > > #------------------------------------------------------------------------------<br clear="none">> > > > <br clear="none">> > > > parallel_mode = off<br clear="none">> > > > # Activates parallel query mode<br clear="none">> > > ><br clear="none">> > # (change requires restart)<br clear="none">> > > > pgpool2_hostname = ''<br clear="none">> > > >
# Set pgpool2 hostname<br clear="none">> > > > # (change requires restart)<br clear="none">> > > > <br clear="none">> > > > # - System DB info -<br clear="none">> > > > <br clear="none">> > > > system_db_hostname = 'localhost'<br clear="none">> > > ><br clear="none">> >
# (change requires restart)<br clear="none">> > > > system_db_port = 5432<br clear="none">>
> > > # (change requires restart)<br clear="none">> > > > system_db_dbname = 'pgpool'<br clear="none">> > > > # (change requires restart)<br clear="none">> > > > system_db_schema = 'pgpool_catalog'<br clear="none">> > > ><br clear="none">> > # (change requires restart)<br
clear="none">> > > > system_db_user = 'pgpool'<br clear="none">> > > >
# (change requires restart)<br clear="none">> > > > system_db_password = ''<br clear="none">> > > > # (change requires restart)<br clear="none">> > > > <br clear="none">> > > > <br clear="none">> > > > #------------------------------------------------------------------------------<br clear="none">> > > > # HEALTH CHECK<br clear="none">> > > ><br clear="none">> > #------------------------------------------------------------------------------<br
clear="none">> > > > <br clear="none">> > > > health_check_period = 2<br clear="none">> > > >
# Health check period<br clear="none">> > > > # Disabled (0) by default<br clear="none">> > > > health_check_timeout = 20<br clear="none">> > > > # Health check timeout<br clear="none">> > > ><br clear="none">> >
# 0 means no timeout<br clear="none">> > > > health_check_user = 'postgres'<br clear="none">> > > > # Health check user<br clear="none">> > > > health_check_password = ''<br clear="none">> > > > # Password for health check user<br clear="none">> > > > health_check_max_retries = 0<br
clear="none">> > > ><br clear="none">> >
# Maximum number of times to retry a failed health check before giving up.<br clear="none">> > > > health_check_retry_delay = 1<br clear="none">> > > > # Amount of time to wait (in seconds) between retries.<br clear="none">> > > > <br clear="none">> > > > <br clear="none">> > > > #------------------------------------------------------------------------------<br clear="none">> > > > # FAILOVER AND FAILBACK<br clear="none">> > > >
#------------------------------------------------------------------------------<br clear="none">> > > > <br clear="none">> > > >
failover_command = ''<br clear="none">> > > ><br clear="none">> > # Executes this command at failover<br clear="none">> > > > # Special values:<br clear="none">> > > > # %d = node id<br clear="none">> > > >
# %h = host<br clear="none">> > name<br clear="none">> > > > # %p = port number<br clear="none">> > > > # %D = database cluster path<br clear="none">> > > >
# %m = new master node id<br clear="none">> > > ><br clear="none">> > # %H = hostname of the new master node<br clear="none">> > > > # %M = old master node id<br clear="none">> > > >
# %P = old primary node id<br clear="none">> > > ><br clear="none">> > # %r = new master port number<br clear="none">> > > > # %R = new master database cluster path<br clear="none">> > > >
# %% = '%' character<br clear="none">> > > > failback_command = ''<br clear="none">> > > ><br clear="none">> > # Executes this command at failback.<br clear="none">> > > > # Special values:<br clear="none">> > > >
# %d = node id<br clear="none">> > > > # %h = host<br clear="none">> > name<br clear="none">> > > > # %p = port number<br clear="none">> > > >
# %D = database cluster path<br clear="none">> > > > # %m = new master node id<br clear="none">> > > ><br clear="none">> > # %H = hostname of the new master node<br clear="none">> > > >
# %M = old master node id<br clear="none">> > > > # %P = old primary node id<br clear="none">> > > ><br clear="none">> > # %r = new master port number<br clear="none">> > > >
# %R = new master database cluster path<br clear="none">> > > > # %% = '%' character<br clear="none">> > > > <br clear="none">> > > > fail_over_on_backend_error = on<br clear="none">> > > ><br clear="none">> > # Initiates failover when reading/writing to the<br
clear="none">> > > >
# backend communication socket fails<br clear="none">> > > > # If set to off, pgpool will report an<br clear="none">> > > ><br clear="none">> > # error and disconnect the session.<br clear="none">> > > > <br clear="none">> > > > search_primary_node_timeout = 10<br clear="none">> > >
>
# Timeout in seconds to search for the<br clear="none">> > > > # primary node when a failover occurs.<br clear="none">> > > ><br clear="none">> > # 0 means no timeout, keep searching<br clear="none">> > > >
# for a primary node forever.<br clear="none">> > > > <br clear="none">> > > > #------------------------------------------------------------------------------<br clear="none">> > > > # ONLINE RECOVERY<br clear="none">> > > > #------------------------------------------------------------------------------<br clear="none">> > > > <br clear="none">> > > > recovery_user = 'postgres'<br clear="none">> > > ><br clear="none">> > # Online recovery user<br
clear="none">> > > > recovery_password = ''<br clear="none">> > > >
# Online recovery password<br clear="none">> > > > recovery_1st_stage_command = 'basebackup.sh'<br clear="none">> > > > # Executes a command in first stage<br clear="none">> > > > recovery_2nd_stage_command = 'pgpool_recovery_pitr.sh'<br clear="none">> > > ><br clear="none">> > # Executes a
command in second stage<br clear="none">> > > > recovery_timeout =
900<br clear="none">> > > > # Timeout in seconds to wait for the<br clear="none">> > > > # recovering node's postmaster to start up<br clear="none">> > > ><br clear="none">> > # 0 means no wait<br clear="none">> > > > client_idle_limit_in_recovery = 0<br clear="none">> > > >
# Client is disconnected after being idle<br clear="none">> > > > # for that many seconds in the second stage<br clear="none">> > > ><br clear="none">> > # of online recovery<br clear="none">> > > >
# 0 means no disconnection<br clear="none">> > > > # -1 means immediate disconnection<br clear="none">> > > > <br clear="none">> > > > <br clear="none">> > > > #------------------------------------------------------------------------------<br clear="none">> > > > # WATCHDOG<br clear="none">> > > ><br clear="none">> > #------------------------------------------------------------------------------<br clear="none">> > > > <br clear="none">> > > > #
- Enabling -<br clear="none">> > > > <br clear="none">> > > > use_watchdog = on<br clear="none">> > > >
# Activates watchdog<br clear="none">> > > > # (change requires restart)<br clear="none">> > > > <br clear="none">> > > > # -Connection to up stream servers -<br clear="none">> > > > <br clear="none">> > > > trusted_servers = ''<br clear="none">> > > ><br clear="none">> >
# trusted server list which are used<br clear="none">> > > >
# to confirm network connection<br clear="none">> > > > # (hostA,hostB,hostC,...)<br clear="none">> > > ><br clear="none">> > # (change requires restart)<br clear="none">> > > > ping_path = '/bin'<br clear="none">> > > >
# ping command path<br clear="none">> > > > # (change requires restart)<br clear="none">> > > > <br clear="none">> > > > # - Watchdog communication Settings -<br clear="none">> > > > <br clear="none">> > > > wd_hostname = '192.168.91.31'<br clear="none">> > > ><br clear="none">> >
# Host name or IP address of this watchdog<br clear="none">> >
> > # (change requires restart)<br clear="none">> > > > wd_port = 9000<br clear="none">> > > > # port number for watchdog service<br clear="none">> > > ><br clear="none">> > # (change requires restart)<br clear="none">> > > > wd_authkey = ''<br clear="none">> >
> >
# Authentication key for watchdog communication<br clear="none">> > > > # (change requires restart)<br clear="none">> > > > <br clear="none">> > > > # - Virtual IP control Setting -<br clear="none">> > > > <br clear="none">> > > > delegate_IP = '192.168.91.30'<br clear="none">> > > ><br clear="none">> >
# delegate IP address<br clear="none">> >
> > # If this is empty, virtual IP never bring up. <br clear="none">> > > > # (change requires restart)<br clear="none">> > > > ifconfig_path = '/bin'<br clear="none">> > > ><br clear="none">> > # ifconfig command path<br clear="none">> > > >
# (change requires restart)<br clear="none">> > > > if_up_cmd = 'ifconfig eth0:0 inet $_IP_$ netmask 255.255.255.0'<br clear="none">> > > > # startup delegate IP command<br clear="none">> > > ><br clear="none">> > # (change requires restart)<br clear="none">> > > >
if_down_cmd = 'ifconfig eth0:0 down'<br clear="none">> > > >
# shutdown delegate IP command<br clear="none">> > > > # (change requires restart)<br clear="none">> > > > <br clear="none">> > > > arping_path = '/sbin' # arping command path<br clear="none">> > > ><br clear="none">> >
# (change requires restart)<br clear="none">> > > > <br clear="none">>
> > > arping_cmd = 'arping -U $_IP_$ -w 1'<br clear="none">> > > > # arping command<br clear="none">> > > > # (change requires restart)<br clear="none">> > > > <br clear="none">> > > > # - Behaivor on escalation Setting -<br clear="none">> > > > <br clear="none">> > > > clear_memqcache_on_escalation = on<br clear="none">> > > ><br clear="none">> >
# Clear all the query cache on shared memory<br clear="none">> > > > # when standby pgpool escalate to active pgpool<br clear="none">> > > > # (= virtual IP holder).<br clear="none">> > > ><br clear="none">> >
# This should be off if client connects to pgpool<br clear="none">> > > > # not using virtual IP.<br clear="none">> > > > # (change requires restart)<br clear="none">> > > > wd_escalation_command = ''<br clear="none">> > > ><br clear="none">> >
# Executes this command at escalation on new active pgpool.<br clear="none">> > > > # (change requires restart)<br clear="none">> > > > <br clear="none">> > > > # - Lifecheck Setting - <br clear="none">> > > > <br clear="none">> > > > # -- common --<br clear="none">> > > > <br clear="none">> > > > #wd_lifecheck_method = 'heartbeat'<br clear="none">> > > >
# Method of watchdog lifecheck ('heartbeat' or 'query')<br clear="none">> > ><br clear="none">> > > # (change requires restart)<br clear="none">> > > > wd_lifecheck_method = 'heartbeat'<br clear="none">> > > > wd_interval = 2<br clear="none">> > > > # lifecheck interval
(sec) > 0<br clear="none">> > > >
# (change requires restart)<br clear="none">> > > > <br clear="none">> > > > # -- heartbeat mode --<br clear="none">> > > > <br clear="none">> > > > wd_heartbeat_port = 9694<br clear="none">> > > ><br clear="none">> > # Port number for receiving heartbeat signal<br clear="none">> > > >
# (change requires restart)<br clear="none">> > > >
wd_heartbeat_keepalive = 2<br clear="none">> > > > # Interval time of sending heartbeat signal (sec)<br clear="none">> > > ><br clear="none">> > # (change requires restart)<br clear="none">> > > > wd_heartbeat_deadtime = 30<br clear="none">> > > > # Deadtime interval for
heartbeat signal (sec)<br clear="none">> > > >
# (change requires restart)<br clear="none">> > > > <br clear="none">> > > > heartbeat_destination0 = '192.168.91.32'<br clear="none">> > > ><br clear="none">> > # Host name or IP address of destination 0<br clear="none">> > > > # for sending heartbeat signal.<br
clear="none">> > > >
# (change requires restart)<br clear="none">> > > > heartbeat_destination_port0 = 9694 <br clear="none">> > > ><br clear="none">> > # Port number of destination 0 for sending<br clear="none">> > > > # heartbeat signal. Usually this is the<br clear="none">> > > >
# same as wd_heartbeat_port.<br clear="none">> > > ><br clear="none">> > # (change requires restart)<br clear="none">> > > > heartbeat_device0 = 'eth0'<br clear="none">> > > > # Name of NIC device (such like 'eth0')<br clear="none">> > > >
# used for sending/receiving heartbeat<br clear="none">> > > ><br clear="none">> > # signal to/from destination 0.<br clear="none">> > > > # This works only when this is not empty<br clear="none">> > > >
# and pgpool has root privilege.<br clear="none">> > > ><br clear="none">> > # (change requires restart)<br clear="none">> > > > <br clear="none">> > > > #heartbeat_destination1 = 'host0_ip2'<br clear="none">> > > > #heartbeat_destination_port1 = 9694<br clear="none">> > > > #heartbeat_device1 = ''<br clear="none">> > > > <br clear="none">> > > > # -- query mode --<br clear="none">> > > > <br clear="none">> > > >
wd_life_point = 3<br clear="none">> > > >
# lifecheck retry times<br clear="none">> > > > # (change<br clear="none">> > requires restart)<br clear="none">> > > > wd_lifecheck_query = 'SELECT 1'<br clear="none">> > > > # lifecheck query to pgpool from watchdog<br clear="none">> > > >
# (change requires restart)<br clear="none">> > > > wd_lifecheck_dbname = 'template1'<br clear="none">> > > > # Database name connected for lifecheck<br clear="none">> > > ><br clear="none">> > # (change requires restart)<br clear="none">> > > > wd_lifecheck_user =
'postgres'<br clear="none">> > > >
# watchdog user monitoring pgpools in lifecheck<br clear="none">> > > > # (change requires restart)<br clear="none">> > > > wd_lifecheck_password = ''<br clear="none">> > > ><br clear="none">> > # Password for watchdog user in lifecheck<br clear="none">> > > >
# (change requires restart)<br clear="none">> > > > <br clear="none">> > > > # - Other pgpool Connection Settings -<br clear="none">> > > > <br clear="none">> > > > other_pgpool_hostname0 = '192.168.91.32'<br clear="none">> > > > # Host name or IP address to connect to for other pgpool 0<br clear="none">> > > ><br clear="none">> >
#
(change requires restart)<br clear="none">> > > > other_pgpool_port0 = 9999<br clear="none">> > > > # Port number for othet pgpool 0<br clear="none">> > > > # (change requires restart)<br clear="none">> > > > other_wd_port0 = 9000<br clear="none">> > > ><br clear="none">> >
# Port number for othet watchdog 0<br clear="none">> > > >
# (change requires restart)<br clear="none">> > > > #other_pgpool_hostname1 = 'host1'<br clear="none">> > > > #other_pgpool_port1 = 5432<br clear="none">> > > > #other_wd_port1 = 9000<br clear="none">> > > > <br clear="none">> > > > <br clear="none">> > > > #------------------------------------------------------------------------------<br clear="none">> > > > # OTHERS<br clear="none">> > > > #------------------------------------------------------------------------------<br clear="none">> > > > relcache_expire = 0<br clear="none">> > > ><br clear="none">> >
# Life time of relation cache in seconds.<br clear="none">> > > > # 0 means no cache expiration(the default).<br clear="none">> > > > # The relation cache is used for cache the<br clear="none">> > > ><br clear="none">> > # query result against PostgreSQL system<br clear="none">> > > >
# catalog to obtain various information<br clear="none">> > > > # including table structures or if it's a<br clear="none">> > > ><br clear="none">> > # temporary table or not. The cache is<br clear="none">> > > >
# maintained in a pgpool child local memory<br clear="none">> > > > # and being kept as long as it survives.<br clear="none">> > > ><br clear="none">> > # If someone modify the table by using<br clear="none">> > > >
# ALTER TABLE or some such, the relcache is<br clear="none">> > > > # not consistent anymore.<br clear="none">> > > > <br clear="none">> > # For this purpose, cache_expiration<br clear="none">> > > >
# controls the life time of the cache.<br clear="none">> > > > <br clear="none">> > > > relcache_size = 256<br clear="none">> > > > # Number of relation cache<br clear="none">> > > > # entry. If you see frequently:<br clear="none">> > > ><br clear="none">> >
# "pool_search_relcache: cache replacement happend"<br clear="none">> > > > # in the pgpool log, you might want to increate this number.<br clear="none">> > > > <br clear="none">> > > > check_temp_table = on<br clear="none">> > > > # If on, enable temporary table check in SELECT statements.<br
clear="none">> > > ><br clear="none">> >
# This initiates queries against system catalog of primary/master<br clear="none">> > > > # thus increases load of master.<br clear="none">> > > > # If you are absolutely sure that your system never uses temporary tables<br clear="none">> > > ><br clear="none">> >
# and you want to save access to primary/master, you could turn this off.<br clear="none">> > > > # Default is on.<br clear="none">> > > > <br clear="none">> > > > <br clear="none">> > > > #------------------------------------------------------------------------------<br clear="none">> > > > # ON MEMORY QUERY MEMORY CACHE<br clear="none">> > > > #------------------------------------------------------------------------------<br clear="none">> > > > memory_cache_enabled
= off<br clear="none">> > > >
<br clear="none">> > # If on, use the memory cache functionality, off by default<br clear="none">> > > > memqcache_method = 'shmem'<br clear="none">> > > > # Cache storage method. either 'shmem'(shared memory) or<br clear="none">> > > > # 'memcached'. 'shmem' by default<br clear="none">> > > >
# (change requires restart)<br clear="none">>
> > > memqcache_memcached_host = 'localhost'<br clear="none">> > > > <br clear="none">> > # Memcached host name or IP address. Mandatory if<br clear="none">> > > > # memqcache_method = 'memcached'.<br clear="none">> > > > # Defaults to localhost.<br clear="none">> > > >
# (change requires restart)<br clear="none">> > > > memqcache_memcached_port = 11211<br clear="none">> > > > <br clear="none">> > # Memcached port number. Mondatory if memqcache_method = 'memcached'.<br clear="none">> > > > # Defaults to 11211.<br clear="none">> > > >
# (change requires restart)<br clear="none">> > > > memqcache_total_size = 67108864<br clear="none">> > > > # Total memory size in bytes for storing memory cache.<br clear="none">> > > > <br clear="none">> > # Mandatory if memqcache_method = 'shmem'.<br clear="none">> > > >
# Defaults to 64MB.<br clear="none">> > > > # (change requires restart)<br clear="none">> > > > memqcache_max_num_cache = 1000000<br clear="none">> > > > # Total number of cache entries. Mandatory<br clear="none">> > > > <br clear="none">> > # if memqcache_method = 'shmem'.<br clear="none">> > > >
# Each cache entry consumes 48 bytes on shared memory.<br clear="none">> > > > # Defaults to 1,000,000(45.8MB).<br clear="none">> > > > # (change requires restart)<br clear="none">> > > > memqcache_expire = 0<br clear="none">> > > > <br clear="none">> > # Memory cache entry life time specified in seconds.<br
clear="none">> > > >
# 0 means infinite life time. 0 by default.<br clear="none">> > > > # (change requires restart)<br clear="none">> > > > memqcache_auto_cache_invalidation = on<br clear="none">> > > > # If on, invalidation of query cache is triggered by corresponding<br clear="none">> > > > <br clear="none">> >
# DDL/DML/DCL(and
memqcache_expire). If off, it is only triggered<br clear="none">> > > > # by memqcache_expire. on by default.<br clear="none">> > > > # (change requires restart)<br clear="none">> > > > memqcache_maxcache = 409600<br clear="none">> > > > # Maximum SELECT result size in bytes.<br clear="none">> > > > <br
clear="none">> >
# Must be smaller than memqcache_cache_block_size. Defaults to 400KB.<br clear="none">> > > > # (change requires restart)<br clear="none">> > > > memqcache_cache_block_size = 1048576<br clear="none">> > > > # Cache block size in bytes. Mandatory if memqcache_method = 'shmem'.<br clear="none">> > > > # Defaults to
1MB.<br clear="none">> > > ><br clear="none">> >
# (change requires restart)<br clear="none">> > > > memqcache_oiddir = '/var/log/pgpool/oiddir'<br clear="none">> > > > # Temporary work directory to record table oids<br clear="none">> > > > # (change requires restart)<br clear="none">> > > > white_memqcache_table_list = ''<br clear="none">> > > ><br
clear="none">> >
# Comma separated list of table names to memcache<br clear="none">> > > > # that don't write to database<br clear="none">> > > > # Regexp are accepted<br clear="none">> > > > black_memqcache_table_list = ''<br clear="none">> > > ><br clear="none">> >
# Comma separated list of table names not to memcache<br clear="none">> > > > # that don't write to database<br clear="none">> > > > # Regexp are accepted<br clear="none">> > > > <br clear="none">> > > > <br clear="none">> > > > <br clear="none">> > > > <br clear="none">> >
> > Also, when I use load balance mode the load balancing is made between
connections and not queries, right?<br clear="none">> > > > I mean that if i have 1 script<br clear="none">> > the open one connection and perform 1000 selects, these selects will be performed on one node.<br clear="none">> > > > <br clear="none">> > > > <br clear="none">> > > > <br clear="none">> > > > <br clear="none">> > > > Regards,<br clear="none">> > > > Adrian Videanu<br clear="none">> > > > <br clear="none">> > > > <br clear="none">> > > > ________________________________<br clear="none">> > > > From: Yugo Nagata <<a rel="nofollow" shape="rect" ymailto="mailto:nagata@sraoss.co.jp" target="_blank" href="mailto:nagata@sraoss.co.jp">nagata@sraoss.co.jp</a>><br clear="none">> > > > To: Videanu Adrian <<a rel="nofollow" shape="rect" ymailto="mailto:videanuadrian@yahoo.com"
target="_blank" href="mailto:videanuadrian@yahoo.com">videanuadrian@yahoo.com</a>> <br clear="none">> > > > Cc: <a rel="nofollow" shape="rect" ymailto="mailto:pgpool-general@pgpool.net" target="_blank" href="mailto:pgpool-general@pgpool.net">pgpool-general@pgpool.net</a> <br clear="none">> > > > Sent:
Thursday, November 7, 2013 12:44 PM<br clear="none">> > > > Subject: Re: [pgpool-general: 2237] pgpool 3.3.1 replicate setup with 3 nodes<br clear="none">> > > > <br clear="none">> > > > <br clear="none">> > > > Hi,<br clear="none">> > > > <br clear="none">> > > > Are you setting<br clear="none">> > recovery_2nd_stage_command properly?<br clear="none">> > > > (<a rel="nofollow" shape="rect" target="_blank" href="http://www.pgpool.net/docs/latest/pgpool-en.html#online-recovery">http://www.pgpool.net/docs/latest/pgpool-en.html#online-recovery</a><br clear="none">> > > > <a rel="nofollow" shape="rect" target="_blank" href="http://www.pgpool.net/docs/latest/pgpool-en.html#RECOVERY_2ND_STAGE_COMMAND">http://www.pgpool.net/docs/latest/pgpool-en.html#RECOVERY_2ND_STAGE_COMMAND</a>)<br clear="none">> > > > <br clear="none">> > >
> If this is wrong, recovery might fails and backends might get inconsistent.<br clear="none">> > > > For analysis, could you please provide your pgpool.conf and all scripts? <br clear="none">> > >
> <br clear="none">> > > > <br clear="none">> > > > On Wed, 6 Nov 2013 06:08:05 -0800 (PST)<br clear="none">> > > > Videanu Adrian <<a rel="nofollow" shape="rect" ymailto="mailto:videanuadrian@yahoo.com" target="_blank" href="mailto:videanuadrian@yahoo.com">videanuadrian@yahoo.com</a>> wrote:<br clear="none">> > > > <br clear="none">> > > > > Hi all,<br clear="none">> > > > > <br clear="none">> > > > > I have a pgpool 3.3.1 with 3 postgresql 9.2<br clear="none">> > backends.<br clear="none">> > > > > The pgpool is configured as : [ mode ]<br clear="none">> > > > > Replication Mode<br clear="none">> > > > > / Load Balance Mode / Watchdog On<br clear="none">> > > > > <br clear="none">> > > > > I have a problem when I use online recovery
for one of the nodes.<br clear="none">> > > > > <br clear="none">> > > > > Scenario: <br clear="none">> > > > > 1. The 3rd node failed.<br clear="none">> > > > > 2. Pgpool detects the failure and present the
node as down. (everything is ok)<br clear="none">> > > > > 3. I press recovery from pgpadmin and the recovery script starts.<br clear="none">> > > > > 4. The 3rd node is back online, but the sequence for this node and the 1st node are incremented by 1 regarding the 2nd node.<br clear="none">> > > > > Because of this nothing works because i get a kind mismatch between nodes.<br clear="none">> > > > > <br clear="none">> > > > > Does replication setup works for more than 2 nodes and if yes how should i perform online recovery.<br clear="none">> > > > > <br clear="none">> > > ><br clear="none">> > > PS. I use PITR.<br clear="none">> > > > > <br clear="none">> > > > > <br clear="none">> > > > > <br clear="none">> > > > > Regards,<br clear="none">> > > > > Adrian
Videanu<br clear="none">> > > > <br clear="none">> > > > <br clear="none">> > > > -- <br clear="none">> > > > Yugo Nagata <<a rel="nofollow" shape="rect" ymailto="mailto:nagata@sraoss.co.jp" target="_blank" href="mailto:nagata@sraoss.co.jp">nagata@sraoss.co.jp</a><br clear="none">> > > > ><br clear="none">> > > <br clear="none">> > > <br clear="none">> > > -- <br clear="none">> > > Yugo Nagata <<a rel="nofollow" shape="rect" ymailto="mailto:nagata@sraoss.co.jp" target="_blank" href="mailto:nagata@sraoss.co.jp">nagata@sraoss.co.jp</a>><br clear="none">> > <br clear="none">> > <br clear="none">> > -- <br clear="none">> > Yugo Nagata <<a rel="nofollow" shape="rect" ymailto="mailto:nagata@sraoss.co.jp" target="_blank" href="mailto:nagata@sraoss.co.jp">nagata@sraoss.co.jp</a>><br clear="none">> > <br
clear="none">> > <br clear="none">> > <br clear="none">> > _______________________________________________<br clear="none">> > pgpool-general mailing list<br clear="none">> > <a rel="nofollow" shape="rect" ymailto="mailto:pgpool-general@pgpool.net" target="_blank" href="mailto:pgpool-general@pgpool.net">pgpool-general@pgpool.net</a><br clear="none">> > <a rel="nofollow" shape="rect" target="_blank" href="http://www.pgpool.net/mailman/listinfo/pgpool-general">http://www.pgpool.net/mailman/listinfo/pgpool-general</a><br clear="none">> <br clear="none">> <br clear="none">> -- <br clear="none">> Yugo Nagata <<a rel="nofollow" shape="rect" ymailto="mailto:nagata@sraoss.co.jp" target="_blank" href="mailto:nagata@sraoss.co.jp">nagata@sraoss.co.jp</a>><br clear="none"><br clear="none"><br clear="none">-- <br clear="none">Yugo Nagata <<a rel="nofollow" shape="rect" ymailto="mailto:nagata@sraoss.co.jp"
target="_blank" href="mailto:nagata@sraoss.co.jp">nagata@sraoss.co.jp</a>><br clear="none"><br clear="none"></div> </div> </div></div> </div></div></div><br><br></div> </div> </div> </div></body></html>