Disclaimer: the environment created by the tool below should never be used for production.
The script is called "pgpool_setup". It creates followings by just one command under current directory. The directory must be empty. PostgreSQL and pgpool binaries must be installed and in your command search path beforehand.
- PostgreSQL clusters. You can choose "streaming replication mode" or "native replication mode". The former you already know, I assume. The latter is just a set of identical PostgreSQL clusters except the port numbers are different.
- If you choose streaming replication mode, one primary server and standby servers are ready after the command runs (even with WAL archival is enabled).
- By default those PostgreSQL cluster port number start from 11000 and continues 11001, 11002 and so on.
- The port numbers of pgpool and pcp follow.
- One pgpool server, with failover/online recovery/followmaster command are all set.
- A test database "test" is created.
- pcp commands(which are for pgpool administrator) account and password are ready for you.
So here's a sample session.
$ pgpool_setup Satrting set up in streaming replication mode creating startall and shutdownall creating failover script creating database cluster /home/t-ishii/work/git.postgresql.org/tmp2/data0...done. update postgreql.conf creating pgpool_remote_start creating basebackup.sh creating recovery.conf creating database cluster /home/t-ishii/work/git.postgresql.org/tmp2/data1...done. update postgreql.conf creating pgpool_remote_start creating basebackup.sh creating recovery.conf temporarily start data0 cluster to create extensions temporarily start pgpool-II to create standby nodes waiting for failover happens...done. node_id | hostname | port | status | lb_weight | role ---------+----------+-------+--------+-----------+--------- 0 | /tmp | 11000 | 2 | 0.500000 | primary 1 | /tmp | 11001 | 3 | 0.500000 | standby (2 rows) recovery node 1...done. creating follow master script Pager usage is off. node_id | hostname | port | status | lb_weight | role ---------+----------+-------+--------+-----------+--------- 0 | /tmp | 11000 | 2 | 0.500000 | primary 1 | /tmp | 11001 | 2 | 0.500000 | standby (2 rows) shutdown all pgpool-II setting for streaming replication mode is done. To start the whole system, use /home/t-ishii/work/git.postgresql.org/tmp2/startall. To shutdown the whole system, use /home/t-ishii/work/git.postgresql.org/tmp2/shutdownall. pcp command user name is "t-ishii", password is "t-ishii". Each PostgreSQL, pgpool-II and pcp port is as follows: #1 port is 11000 #2 port is 11001 pgpool port is 11002 pcp port is 11003 The info above is in README.port. $ ls README.port bashrc.ports* data1/ log/ run/ startall* archivedir/ data0/ etc/ pgpool_setup.log shutdownall # So here you can see PostgreSQL cluster 0 as "data0" and cluster 1 as # "data1". You can start everything (pgpool and PostgreSQL) by using # "startall", which is creaeted by the comand. $ sh startall waiting for server to start.... done server started waiting for server to start.... done server started # Make sure primary and standby are running. "show pool_nodes" shows # the info. Port 11002 is the port for pgpool. As you can see # primary's port is 11000 and standby's port is 11001. # Status "2" means up and running. $ psql -p 11002 -c 'show pool_nodes' test node_id | hostname | port | status | lb_weight | role ---------+----------+-------+--------+-----------+--------- 0 | /tmp | 11000 | 2 | 0.500000 | primary 1 | /tmp | 11001 | 2 | 0.500000 | standby (2 rows) # Now let's make sure that streaming replication is activated. $ psql -p 11002 test Pager usage is off. psql (9.3beta1) Type "help" for help. test=# create table t1(i int); CREATE TABLE test=# insert into t1 values(1); INSERT 0 1 test=# select * from t1; i --- 1 (1 row) test=# \q # Connect to standby. $ psql -p 11001 test Pager usage is off. psql (9.3beta1) Type "help" for help. test=# select * from t1; i --- 1 (1 row) test=# \q # Ok, "t1" is propagated. # Next test failover. So shutdown standby. $ pg_ctl -D data1 -m f stop waiting for server to shut down.... done server stopped $ psql -p 11002 -c 'show pool_nodes' test node_id | hostname | port | status | lb_weight | role ---------+----------+-------+--------+-----------+--------- 0 | /tmp | 11000 | 2 | 0.500000 | primary 1 | /tmp | 11001 | 3 | 0.500000 | standby (2 rows) # Note that status "3" means down. # Let's stary standby and make it online. $ pg_ctl -D data1 start server starting $ pcp_attach_node 1 localhost 11003 t-ishii t-ishii 1 $ psql -p 11002 -c 'show pool_nodes' test node_id | hostname | port | status | lb_weight | role ---------+----------+-------+--------+-----------+--------- 0 | /tmp | 11000 | 2 | 0.500000 | primary 1 | /tmp | 11001 | 2 | 0.500000 | standby (2 rows) # Next test is promotion. Let's stop primary and see if standby promotes. $ pg_ctl -D data0 -m f stop waiting for server to shut down.... done server stopped # Wait for while to let our failover script and follow master script do the job. $ psql -p 11002 -c 'show pool_nodes' test node_id | hostname | port | status | lb_weight | role ---------+----------+-------+--------+-----------+--------- 0 | /tmp | 11000 | 2 | 0.500000 | standby 1 | /tmp | 11001 | 2 | 0.500000 | primary (2 rows) # Ok, now node 0 is standby, and 1 is primary.
pgpool_setup is available in Pgpool-II 3.4 or later.
pgpool_setup link is not working. And I have been going through setup for quite sometime and not able to set it up for my postgres cluster.
ReplyDeleteDoes pgpool create this show pool_nodes table automatically?
It will be really helpful if you share the above setup scripts.
This comment has been removed by the author.
DeleteGot it. It can be checked using command with pgpool ip and port from anywhere with psql command: psql -h x.x.x.x -p 5432 -x -c "show pool_nodes;"
DeleteI am not able to see the script.
ReplyDeleteCan u please email me at dtrkishore@gmail.com
Can you please also e-mail it: julien.v.andonov@googlemail.com
ReplyDeleteThank you
i was not able to see the script by following your link. Is it still available?
ReplyDeleteI got multiple comment about the availability of pgpool_setup. Now the tool is includes in the standard Pgpool-II distribution. I also removed the link to the script.
ReplyDelete