#!/bin/bash set -exu set -o errexit #PREFIX=/home/gsmol/task/13_devel PREFIX=/home/gsmol/task/14 ARCHIVE_DIR=${PREFIX}/archive PGDATA_NODE1=${PREFIX}/node1 PGDATA_NODE2=${PREFIX}/node2 PORT1=15432 PORT2=15433 ARCHIVE_COMMAND="cp %p ${ARCHIVE_DIR}/" ${PREFIX}/bin/pg_ctl stop -m immediate -D ${PGDATA_NODE1} || echo "all is well" ${PREFIX}/bin/pg_ctl stop -m immediate -D ${PGDATA_NODE2} || echo "all is well" rm -rf ${PGDATA_NODE1} ${PGDATA_NODE2} ${ARCHIVE_DIR} mkdir -p ${ARCHIVE_DIR} # create master ${PREFIX}/bin/initdb -k -D ${PGDATA_NODE1} echo "port = ${PORT1}" >> ${PGDATA_NODE1}/postgresql.auto.conf echo "wal_level = logical" >> ${PGDATA_NODE1}/postgresql.auto.conf # start cluster ${PREFIX}/bin/pg_ctl start -D ${PGDATA_NODE1} # setup replica ${PREFIX}/bin/pg_basebackup -X stream -p ${PORT1} -D ${PGDATA_NODE2} -R echo "port = ${PORT2}" >> ${PGDATA_NODE2}/postgresql.auto.conf echo "archive_mode = always" >> ${PGDATA_NODE2}/postgresql.auto.conf echo "archive_command = '${ARCHIVE_COMMAND}'" >> ${PGDATA_NODE2}/postgresql.auto.conf # start replica ${PREFIX}/bin/pg_ctl start -D ${PGDATA_NODE2} # generate some data ${PREFIX}/bin/pgbench -i -s 5 -p ${PORT1} postgres # first switchover ${PREFIX}/bin/pg_ctl stop -D ${PGDATA_NODE1} ${PREFIX}/bin/pg_ctl promote -D ${PGDATA_NODE2} # setup old master as replica touch ${PGDATA_NODE1}/standby.signal echo "primary_conninfo = 'port=${PORT2}'" >> ${PGDATA_NODE1}/postgresql.auto.conf ${PREFIX}/bin/pg_ctl start -D ${PGDATA_NODE1} # generate some more data ${PREFIX}/bin/pgbench -i -s 5 -p ${PORT2} postgres # second switchover ${PREFIX}/bin/pg_ctl stop -D ${PGDATA_NODE2} ${PREFIX}/bin/pg_ctl promote -D ${PGDATA_NODE1} # setup previous master again as replica touch ${PGDATA_NODE2}/standby.signal ${PREFIX}/bin/pg_ctl start -D ${PGDATA_NODE2} sleep 5 test -f ${ARCHIVE_DIR}/00000003.history || { echo "00000003.history is missing" ; exit 1 ;} echo "00000003.history exists" exit 0