From d4f54d8e7f1919de4ccc5dfb32481d1949c52fc0 Mon Sep 17 00:00:00 2001 From: Bo Peng Date: Wed, 19 May 2021 01:28:59 +0900 Subject: [PATCH] Improve sample scripts. Replcace dots or hyphens in replication slot name to underscore. --- src/sample/scripts/failover.sh.sample | 5 +++-- src/sample/scripts/follow_primary.sh.sample | 21 ++++++++++---------- src/sample/scripts/recovery_1st_stage.sample | 13 ++++++------ 3 files changed, 21 insertions(+), 18 deletions(-) diff --git a/src/sample/scripts/failover.sh.sample b/src/sample/scripts/failover.sh.sample index cc20cfc77..479b107bf 100755 --- a/src/sample/scripts/failover.sh.sample +++ b/src/sample/scripts/failover.sh.sample @@ -32,6 +32,7 @@ OLD_PRIMARY_NODE_HOST="${11}" OLD_PRIMARY_NODE_PORT="${12}" PGHOME=/usr/pgsql-13 +REPL_SLOT_NAME=${FAILED_NODE_HOST//[-.]/_} echo failover.sh: start: failed_node_id=$FAILED_NODE_ID failed_host=$FAILED_NODE_HOST \ @@ -56,10 +57,10 @@ if [ $FAILED_NODE_ID -ne $OLD_PRIMARY_NODE_ID ]; then # If Standby node is down, drop replication slot. ${PGHOME}/bin/psql -h ${OLD_PRIMARY_NODE_HOST} -p ${OLD_PRIMARY_NODE_PORT} \ - -c "SELECT pg_drop_replication_slot('${FAILED_NODE_HOST}');" >/dev/null 2>&1 + -c "SELECT pg_drop_replication_slot('${REPL_SLOT_NAME}');" >/dev/null 2>&1 if [ $? -ne 0 ]; then - echo ERROR: failover.sh: drop replication slot \"${FAILED_NODE_HOST}\" failed. You may need to drop replication slot manually. + echo ERROR: failover.sh: drop replication slot \"${REPL_SLOT_NAME}\" failed. You may need to drop replication slot manually. fi echo failover.sh: end: standby node is down. Skipping failover. diff --git a/src/sample/scripts/follow_primary.sh.sample b/src/sample/scripts/follow_primary.sh.sample index 5db5c6340..f10a74a5d 100755 --- a/src/sample/scripts/follow_primary.sh.sample +++ b/src/sample/scripts/follow_primary.sh.sample @@ -36,6 +36,7 @@ REPLUSER=repl PCP_USER=pgpool PGPOOL_PATH=/usr/bin PCP_PORT=9898 +REPL_SLOT_NAME=${NODE_HOST//[-.]/_} echo follow_primary.sh: start: Standby node ${NODE_ID} @@ -66,12 +67,12 @@ if [ $? -eq 0 ]; then echo follow_primary.sh: pg_rewind for node ${NODE_ID} - # Create replication slot "${NODE_HOST}" + # Create replication slot "${REPL_SLOT_NAME}" ${PGHOME}/bin/psql -h ${NEW_PRIMARY_NODE_HOST} -p ${NEW_PRIMARY_NODE_PORT} \ - -c "SELECT pg_create_physical_replication_slot('${NODE_HOST}');" >/dev/null 2>&1 + -c "SELECT pg_create_physical_replication_slot('${REPL_SLOT_NAME}');" >/dev/null 2>&1 if [ $? -ne 0 ]; then - echo follow_primary.sh: create replication slot \"${NODE_HOST}\" failed. You may need to create replication slot manually. + echo follow_primary.sh: create replication slot \"${REPL_SLOT_NAME}\" failed. You may need to create replication slot manually. fi ssh -T -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null postgres@${NODE_HOST} -i ~/.ssh/id_rsa_pgpool " @@ -88,7 +89,7 @@ if [ $? -eq 0 ]; then primary_conninfo = 'host=${NEW_PRIMARY_NODE_HOST} port=${NEW_PRIMARY_NODE_PORT} user=${REPLUSER} application_name=${NODE_HOST} passfile=''/var/lib/pgsql/.pgpass''' recovery_target_timeline = 'latest' restore_command = 'scp ${NEW_PRIMARY_NODE_HOST}:${ARCHIVEDIR}/%f %p' -primary_slot_name = '${NODE_HOST}' +primary_slot_name = '${REPL_SLOT_NAME}' EOT if [ ${PGVERSION} -ge 12 ]; then @@ -122,7 +123,7 @@ EOT primary_conninfo = 'host=${NEW_PRIMARY_NODE_HOST} port=${NEW_PRIMARY_NODE_PORT} user=${REPLUSER} application_name=${NODE_HOST} passfile=''/var/lib/pgsql/.pgpass''' recovery_target_timeline = 'latest' restore_command = 'scp ${NEW_PRIMARY_NODE_HOST}:${ARCHIVEDIR}/%f %p' -primary_slot_name = '${NODE_HOST}' +primary_slot_name = '${REPL_SLOT_NAME}' EOT if [ ${PGVERSION} -ge 12 ]; then @@ -136,10 +137,10 @@ EOT # drop replication slot ${PGHOME}/bin/psql -h ${NEW_PRIMARY_NODE_HOST} -p ${NEW_PRIMARY_NODE_PORT} \ - -c "SELECT pg_drop_replication_slot('${NODE_HOST}');" >/dev/null 2>&1 + -c "SELECT pg_drop_replication_slot('${REPL_SLOT_NAME}');" >/dev/null 2>&1 if [ $? -ne 0 ]; then - echo ERROR: follow_primary.sh: drop replication slot \"${NODE_HOST}\" failed. You may need to drop replication slot manually. + echo ERROR: follow_primary.sh: drop replication slot \"${REPL_SLOT_NAME}\" failed. You may need to drop replication slot manually. fi echo follow_primary.sh: end: pg_basebackup failed @@ -163,14 +164,14 @@ EOT exit 1 fi - # If start Standby failed, drop replication slot "${NODE_HOST}" + # If start Standby failed, drop replication slot "${REPL_SLOT_NAME}" else ${PGHOME}/bin/psql -h ${NEW_PRIMARY_NODE_HOST} -p ${NEW_PRIMARY_NODE_PORT} \ - -c "SELECT pg_drop_replication_slot('${NODE_HOST}');" >/dev/null 2>&1 + -c "SELECT pg_drop_replication_slot('${REPL_SLOT_NAME}');" >/dev/null 2>&1 if [ $? -ne 0 ]; then - echo ERROR: follow_primary.sh: drop replication slot \"${NODE_HOST}\" failed. You may need to drop replication slot manually. + echo ERROR: follow_primary.sh: drop replication slot \"${REPL_SLOT_NAME}\" failed. You may need to drop replication slot manually. fi echo ERROR: follow_primary.sh: end: follow primary command failed diff --git a/src/sample/scripts/recovery_1st_stage.sample b/src/sample/scripts/recovery_1st_stage.sample index 2aaca2151..88a57d7ab 100755 --- a/src/sample/scripts/recovery_1st_stage.sample +++ b/src/sample/scripts/recovery_1st_stage.sample @@ -14,6 +14,7 @@ PRIMARY_NODE_HOST=$(hostname) PGHOME=/usr/pgsql-13 ARCHIVEDIR=/var/lib/pgsql/archivedir REPLUSER=repl +REPL_SLOT_NAME=${DEST_NODE_HOST//[-.]/_} echo recovery_1st_stage: start: pg_basebackup for Standby node $DEST_NODE_ID @@ -33,12 +34,12 @@ else RECOVERYCONF=${DEST_NODE_PGDATA}/recovery.conf fi -## Create replication slot "${DEST_NODE_HOST}" +## Create replication slot "${REPL_SLOT_NAME}" ${PGHOME}/bin/psql -h ${PRIMARY_NODE_HOST} -p ${PRIMARY_NODE_PORT} \ - -c "SELECT pg_create_physical_replication_slot('${DEST_NODE_HOST}');" >/dev/null 2>&1 + -c "SELECT pg_create_physical_replication_slot('${REPL_SLOT_NAME}');" >/dev/null 2>&1 if [ $? -ne 0 ]; then - echo ERROR: recovery_1st_stage: create replication slot \"${DEST_NODE_HOST}\" failed. You may need to create replication slot manually. + echo ERROR: recovery_1st_stage: create replication slot \"${REPL_SLOT_NAME}\" failed. You may need to create replication slot manually. fi ## Execute pg_basebackup to recovery Standby node @@ -60,7 +61,7 @@ ssh -T -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null postgres@$DES primary_conninfo = 'host=${PRIMARY_NODE_HOST} port=${PRIMARY_NODE_PORT} user=${REPLUSER} application_name=${DEST_NODE_HOST} passfile=''/var/lib/pgsql/.pgpass''' recovery_target_timeline = 'latest' restore_command = 'scp ${PRIMARY_NODE_HOST}:${ARCHIVEDIR}/%f %p' -primary_slot_name = '${DEST_NODE_HOST}' +primary_slot_name = '${REPL_SLOT_NAME}' EOT if [ ${PGVERSION} -ge 12 ]; then @@ -75,10 +76,10 @@ EOT if [ $? -ne 0 ]; then ${PGHOME}/bin/psql -h ${PRIMARY_NODE_HOST} -p ${PRIMARY_NODE_PORT} \ - -c "SELECT pg_drop_replication_slot('${DEST_NODE_HOST}');" >/dev/null 2>&1 + -c "SELECT pg_drop_replication_slot('${REPL_SLOT_NAME}');" >/dev/null 2>&1 if [ $? -ne 0 ]; then - echo ERROR: recovery_1st_stage: drop replication slot \"${DEST_NODE_HOST}\" failed. You may need to drop replication slot manually. + echo ERROR: recovery_1st_stage: drop replication slot \"${REPL_SLOT_NAME}\" failed. You may need to drop replication slot manually. fi echo ERROR: recovery_1st_stage: end: pg_basebackup failed. online recovery failed -- 2.39.5