To demonstrate switchover, we will assume a replication cluster with a
primary (node1) and one standby (node2);
after the switchover node2 should become the primary with
node1 following it.
The switchover command must be run from the standby which is to be promoted, and in its simplest form looks like this:
$ ltcluster -f /etc/ltcluster.conf standby switchover
NOTICE: executing switchover on node "node2" (ID: 2)
INFO: searching for primary node
INFO: checking if node 1 is primary
INFO: current primary node is 1
INFO: SSH connection to host "node1" succeeded
INFO: archive mode is "off"
INFO: replication lag on this standby is 0 seconds
NOTICE: local node "node2" (ID: 2) will be promoted to primary; current primary "node1" (ID: 1) will be demoted to standby
NOTICE: stopping current primary node "node1" (ID: 1)
NOTICE: issuing CHECKPOINT
DETAIL: executing server command "lt_ctl -l /var/log/lightdb/startup.log -D '/var/lib/pgsql/data' -m fast -W stop"
INFO: checking primary status; 1 of 6 attempts
NOTICE: current primary has been cleanly shut down at location 0/3001460
NOTICE: promoting standby to primary
DETAIL: promoting server "node2" (ID: 2) using "lt_ctl -l /var/log/lightdb/startup.log -w -D '/var/lib/pgsql/data' promote"
server promoting
NOTICE: STANDBY PROMOTE successful
DETAIL: server "node2" (ID: 2) was successfully promoted to primary
INFO: setting node 1's primary to node 2
NOTICE: starting server using "lt_ctl -l /var/log/lightdb/startup.log -w -D '/var/lib/pgsql/data' restart"
NOTICE: NODE REJOIN successful
DETAIL: node 1 is now attached to node 2
NOTICE: switchover was successful
DETAIL: node "node2" is now primary
NOTICE: STANDBY SWITCHOVER is complete
The old primary is now replicating as a standby from the new primary, and the cluster status will now look like this:
$ ltcluster -f /etc/ltcluster.conf cluster show
ID | Name | Role | Status | Upstream | Location | Connection string
----+-------+---------+-----------+----------+----------+--------------------------------------
1 | node1 | standby | running | node2 | default | host=node1 dbname=ltcluster user=ltcluster
2 | node2 | primary | * running | | default | host=node2 dbname=ltcluster user=ltcluster
If ltclusterd is in use, it's worth double-checking that
all nodes are unpaused by executing
ltcluster service status
(ltcluster 4.2 - 4.4: ltcluster daemon status).
Users of ltcluster versions prior to 4.2 will need to manually restart ltclusterd on all nodes after the switchover is completed.