summaryrefslogtreecommitdiff
path: root/FAILOVER.rst
diff options
Diffstat (limited to 'FAILOVER.rst')
-rw-r--r--FAILOVER.rst239
1 files changed, 1 insertions, 238 deletions
diff --git a/FAILOVER.rst b/FAILOVER.rst
index 7212863..5fa7004 100644
--- a/FAILOVER.rst
+++ b/FAILOVER.rst
@@ -1,238 +1 @@
-====================================================
- PostgreSQL Automatic Failover - User Documentation
-====================================================
-
-Automatic Failover
-==================
-
-repmgr allows for automatic failover when it detects the failure of the master node.
-Following is a quick setup for this.
-
-Installation
-============
-
-For convenience, we define:
-
-**node1**
- is the fully qualified domain name of the Master server, IP 192.168.1.10
-**node2**
- is the fully qualified domain name of the Standby server, IP 192.168.1.11
-**witness**
- is the fully qualified domain name of the server used as a witness, IP 192.168.1.12
-
-**Note:** We don't recommend using names with the status of a server like «masterserver»,
-because it would be confusing once a failover takes place and the Master is
-now on the «standbyserver».
-
-Summary
--------
-
-2 PostgreSQL servers are involved in the replication. Automatic failover needs
-a vote to decide what server it should promote, so an odd number is required.
-A witness-repmgrd is installed in a third server where it uses a PostgreSQL
-cluster to communicate with other repmgrd daemons.
-
-1. Install PostgreSQL in all the servers involved (including the witness server)
-
-2. Install repmgr in all the servers involved (including the witness server)
-
-3. Configure the Master PostreSQL
-
-4. Clone the Master to the Standby using "repmgr standby clone" command
-
-5. Configure repmgr in all the servers involved (including the witness server)
-
-6. Register Master and Standby nodes
-
-7. Initiate witness server
-
-8. Start the repmgrd daemons in all nodes
-
-**Note** A complete High-Availability design needs at least 3 servers to still have
-a backup node after a first failure.
-
-Install PostgreSQL
-------------------
-
-You can install PostgreSQL using any of the recommended methods. You should ensure
-it's 9.0 or later.
-
-Install repmgr
---------------
-
-Install repmgr following the steps in the README file.
-
-Configure PostreSQL
--------------------
-
-Log in to node1.
-
-Edit the file postgresql.conf and modify the parameters::
-
- listen_addresses='*'
- wal_level = 'hot_standby'
- archive_mode = on
- archive_command = 'cd .' # we can also use exit 0, anything that
- # just does nothing
- max_wal_senders = 10
- wal_keep_segments = 5000 # 80 GB required on pg_xlog
- hot_standby = on
- shared_preload_libraries = 'repmgr_funcs'
-
-Edit the file pg_hba.conf and add lines for the replication::
-
- host repmgr repmgr 127.0.0.1/32 trust
- host repmgr repmgr 192.168.1.10/30 trust
- host replication all 192.168.1.10/30 trust
-
-**Note:** It is also possible to use a password authentication (md5), .pgpass file
-should be edited to allow connection between each node.
-
-Create the user and database to manage replication::
-
- su - postgres
- createuser -s repmgr
- createdb -O repmgr repmgr
-
-Restart the PostgreSQL server::
-
- pg_ctl -D $PGDATA restart
-
-And check everything is fine in the server log.
-
-Create the ssh-key for the postgres user and copy it to other servers::
-
- su - postgres
- ssh-keygen # /!\ do not use a passphrase /!\
- cat ~/.ssh/id_rsa.pub > ~/.ssh/authorized_keys
- chmod 600 ~/.ssh/authorized_keys
- exit
- rsync -avz ~postgres/.ssh/authorized_keys node2:~postgres/.ssh/
- rsync -avz ~postgres/.ssh/authorized_keys witness:~postgres/.ssh/
- rsync -avz ~postgres/.ssh/id_rsa* node2:~postgres/.ssh/
- rsync -avz ~postgres/.ssh/id_rsa* witness:~postgres/.ssh/
-
-Clone Master
-------------
-
-Log in to node2.
-
-Clone node1 (the current Master)::
-
- su - postgres
- repmgr -d repmgr -U repmgr -h node1 standby clone
-
-Start the PostgreSQL server::
-
- pg_ctl -D $PGDATA start
-
-And check everything is fine in the server log.
-
-Configure repmgr
-----------------
-
-Log in to each server and configure repmgr by editing the file
-/etc/repmgr/repmgr.conf::
-
- cluster=my_cluster
- node=1
- node_name=earth
- conninfo='host=192.168.1.10 dbname=repmgr user=repmgr'
- master_response_timeout=60
- reconnect_attempts=6
- reconnect_interval=10
- failover=automatic
- promote_command='promote_command.sh'
- follow_command='repmgr standby follow -f /etc/repmgr/repmgr.conf'
-
-**cluster**
- is the name of the current replication.
-**node**
- is the number of the current node (1, 2 or 3 in the current example).
-**node_name**
- is an identifier for every node.
-**conninfo**
- is used to connect to the local PostgreSQL server (where the configuration file is) from any node. In the witness server configuration you need to add a 'port=5499' to the conninfo.
-**master_response_timeout**
- is the maximum amount of time we are going to wait before deciding the master has died and start the failover procedure.
-**reconnect_attempts**
- is the number of times we will try to reconnect to master after a failure has been detected and before start the failover procedure.
-**reconnect_interval**
- is the amount of time between retries to reconnect to master after a failure has been detected and before start the failover procedure.
-**failover**
- configure behavior: *manual* or *automatic*.
-**promote_command**
- the command executed to do the failover (including the PostgreSQL failover itself). The command must return 0 on success.
-**follow_command**
- the command executed to address the current standby to another Master. The command must return 0 on success.
-
-Register Master and Standby
----------------------------
-
-Log in to node1.
-
-Register the node as master::
-
- su - postgres
- repmgr -f /etc/repmgr/repmgr.conf master register
-
-This will also create the repmgr schema and functions.
-
-Log in to node2. Register it as a standby::
-
- su - postgres
- repmgr -f /etc/repmgr/repmgr.conf standby register
-
-Initialize witness server
--------------------------
-
-Log in to witness.
-
-Initialize the witness server::
-
- su - postgres
- repmgr -d repmgr -U repmgr -h 192.168.1.10 -D $WITNESS_PGDATA -f /etc/repmgr/repmgr.conf witness create
-
-The witness server needs the following information from the command
-line:
-
-* Connection details for the current master, to copy the cluster
- configuration.
-* A location for initializing its own $PGDATA.
-
-repmgr will also ask for the superuser password on the witness database so
-it can reconnect when needed (the command line option --initdb-no-pwprompt
-will set up a password-less superuser).
-
-By default the witness server will listen on port 5499; this value can be
-overridden by explicitly providing the port number in the conninfo string
-in repmgr.conf. (Note that it is also possible to specify the port number
-with the -l/--local-port option, however this option is now deprecated and
-will be overridden by a port setting in the conninfo string).
-
-Start the repmgrd daemons
--------------------------
-
-Log in to node2 and witness::
-
- su - postgres
- repmgrd -f /etc/repmgr/repmgr.conf --daemonize -> /var/log/postgresql/repmgr.log 2>&1
-
-**Note:** The Master does not need a repmgrd daemon.
-
-Suspend Automatic behavior
-==========================
-
-Edit the repmgr.conf of the node to remove from automatic processing and change::
-
- failover=manual
-
-Then, signal repmgrd daemon::
-
- su - postgres
- kill -HUP $(pidof repmgrd)
-
-Usage
-=====
-
-The repmgr documentation is in the README file (how to build, options, etc.)
+The contents of this file have been incorporated into the main README.md document.