From 0e9abcf59ac21fdb8506e7cd75fea5cf5b9f777a Mon Sep 17 00:00:00 2001 From: Bo Peng Date: Fri, 1 Jul 2022 14:41:00 +0900 Subject: [PATCH] Add ssh options to restore_command in sample scripts. Patch is created by Jon SCHEWE and updated by Bo Peng. --- src/sample/scripts/escalation.sh.sample | 6 +++++- src/sample/scripts/failover.sh.sample | 6 +++--- src/sample/scripts/follow_primary.sh.sample | 14 +++++++------- src/sample/scripts/pgpool_remote_start.sample | 5 +++-- src/sample/scripts/recovery_1st_stage.sample | 7 ++++--- .../replication_mode_recovery_1st_stage.sample | 9 +++++---- .../replication_mode_recovery_2nd_stage.sample | 3 ++- 7 files changed, 29 insertions(+), 21 deletions(-) diff --git a/src/sample/scripts/escalation.sh.sample b/src/sample/scripts/escalation.sh.sample index e9f9af0f9..5ae7e6f4b 100755 --- a/src/sample/scripts/escalation.sh.sample +++ b/src/sample/scripts/escalation.sh.sample @@ -4,6 +4,10 @@ set -o xtrace +POSTGRESQL_STARTUP_USER=postgres +SSH_KEY_FILE=id_rsa_pgpool +SSH_OPTIONS="-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i ~/.ssh/${SSH_KEY_FILE}" + PGPOOLS=(server1 server2 server3) VIP=192.168.137.150 @@ -12,7 +16,7 @@ DEVICE=enp0s8 for pgpool in "${PGPOOLS[@]}"; do [ "$HOSTNAME" = "$pgpool" ] && continue - ssh -T -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null postgres@$pgpool -i ~/.ssh/id_rsa_pgpool " + ssh -T ${SSH_OPTIONS} ${POSTGRESQL_STARTUP_USER}@$pgpool " /usr/bin/sudo /sbin/ip addr del $VIP/24 dev $DEVICE " done diff --git a/src/sample/scripts/failover.sh.sample b/src/sample/scripts/failover.sh.sample index b5119ccf4..b35c43487 100755 --- a/src/sample/scripts/failover.sh.sample +++ b/src/sample/scripts/failover.sh.sample @@ -35,6 +35,7 @@ PGHOME=/usr/pgsql-14 REPL_SLOT_NAME=${FAILED_NODE_HOST//[-.]/_} POSTGRESQL_STARTUP_USER=postgres SSH_KEY_FILE=id_rsa_pgpool +SSH_OPTIONS="-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i ~/.ssh/${SSH_KEY_FILE}" echo failover.sh: start: failed_node_id=$FAILED_NODE_ID failed_host=$FAILED_NODE_HOST \ @@ -47,7 +48,7 @@ if [ $NEW_MAIN_NODE_ID -lt 0 ]; then fi ## Test passwordless SSH -ssh -T -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ${POSTGRESQL_STARTUP_USER}@${NEW_MAIN_NODE_HOST} -i ~/.ssh/${SSH_KEY_FILE} ls /tmp > /dev/null +ssh -T ${SSH_OPTIONS} ${POSTGRESQL_STARTUP_USER}@${NEW_MAIN_NODE_HOST} ls /tmp > /dev/null if [ $? -ne 0 ]; then echo failover.sh: passwordless SSH to ${POSTGRESQL_STARTUP_USER}@${NEW_MAIN_NODE_HOST} failed. Please setup passwordless SSH. @@ -72,8 +73,7 @@ fi ## Promote Standby node. echo failover.sh: primary node is down, promote new_main_node_id=$NEW_MAIN_NODE_ID on ${NEW_MAIN_NODE_HOST}. -ssh -T -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null \ - ${POSTGRESQL_STARTUP_USER}@${NEW_MAIN_NODE_HOST} -i ~/.ssh/${SSH_KEY_FILE} ${PGHOME}/bin/pg_ctl -D ${NEW_MAIN_NODE_PGDATA} -w promote +ssh -T ${SSH_OPTIONS} ${POSTGRESQL_STARTUP_USER}@${NEW_MAIN_NODE_HOST} ${PGHOME}/bin/pg_ctl -D ${NEW_MAIN_NODE_PGDATA} -w promote if [ $? -ne 0 ]; then echo ERROR: failover.sh: end: failover failed diff --git a/src/sample/scripts/follow_primary.sh.sample b/src/sample/scripts/follow_primary.sh.sample index c686b19a4..819d21b71 100755 --- a/src/sample/scripts/follow_primary.sh.sample +++ b/src/sample/scripts/follow_primary.sh.sample @@ -39,6 +39,7 @@ PCP_PORT=9898 REPL_SLOT_NAME=${NODE_HOST//[-.]/_} POSTGRESQL_STARTUP_USER=postgres SSH_KEY_FILE=id_rsa_pgpool +SSH_OPTIONS="-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i ~/.ssh/${SSH_KEY_FILE}" echo follow_primary.sh: start: Standby node ${NODE_ID} @@ -51,7 +52,7 @@ if [ $? -ne 0 ]; then fi # Test passwordless SSH -ssh -T -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ${POSTGRESQL_STARTUP_USER}@${NEW_PRIMARY_NODE_HOST} -i ~/.ssh/${SSH_KEY_FILE} ls /tmp > /dev/null +ssh -T ${SSH_OPTIONS} ${POSTGRESQL_STARTUP_USER}@${NEW_PRIMARY_NODE_HOST} ls /tmp > /dev/null if [ $? -ne 0 ]; then echo follow_main.sh: passwordless SSH to ${POSTGRESQL_STARTUP_USER}@${NEW_PRIMARY_NODE_HOST} failed. Please setup passwordless SSH. @@ -78,7 +79,7 @@ if [ $? -ne 0 ]; then 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 ${POSTGRESQL_STARTUP_USER}@${NODE_HOST} -i ~/.ssh/${SSH_KEY_FILE} " +ssh -T ${SSH_OPTIONS} ${POSTGRESQL_STARTUP_USER}@${NODE_HOST} " set -o errexit @@ -91,7 +92,7 @@ ssh -T -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ${POSTGRESQL_ cat > ${RECOVERYCONF} << 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' +restore_command = 'scp ${SSH_OPTIONS} ${NEW_PRIMARY_NODE_HOST}:${ARCHIVEDIR}/%f %p' primary_slot_name = '${REPL_SLOT_NAME}' EOT @@ -111,7 +112,7 @@ EOT if [ $? -ne 0 ]; then echo follow_primary.sh: end: pg_rewind failed. Try pg_basebackup. - ssh -T -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ${POSTGRESQL_STARTUP_USER}@${NODE_HOST} -i ~/.ssh/${SSH_KEY_FILE} " + ssh -T ${SSH_OPTIONS} ${POSTGRESQL_STARTUP_USER}@${NODE_HOST} " set -o errexit @@ -122,7 +123,7 @@ if [ $? -ne 0 ]; then cat > ${RECOVERYCONF} << 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' +restore_command = 'scp ${SSH_OPTIONS} ${NEW_PRIMARY_NODE_HOST}:${ARCHIVEDIR}/%f %p' primary_slot_name = '${REPL_SLOT_NAME}' EOT @@ -154,8 +155,7 @@ EOT fi # start Standby node on ${NODE_HOST} - ssh -T -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null \ - ${POSTGRESQL_STARTUP_USER}@${NODE_HOST} -i ~/.ssh/${SSH_KEY_FILE} $PGHOME/bin/pg_ctl -l /dev/null -w -D ${NODE_PGDATA} start + ssh -T ${SSH_OPTIONS} ${POSTGRESQL_STARTUP_USER}@${NODE_HOST} $PGHOME/bin/pg_ctl -l /dev/null -w -D ${NODE_PGDATA} start fi diff --git a/src/sample/scripts/pgpool_remote_start.sample b/src/sample/scripts/pgpool_remote_start.sample index dc1424f6f..1ef29dd84 100755 --- a/src/sample/scripts/pgpool_remote_start.sample +++ b/src/sample/scripts/pgpool_remote_start.sample @@ -9,11 +9,12 @@ DEST_NODE_PGDATA="$2" PGHOME=/usr/pgsql-14 POSTGRESQL_STARTUP_USER=postgres SSH_KEY_FILE=id_rsa_pgpool +SSH_OPTIONS="-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i ~/.ssh/${SSH_KEY_FILE}" echo pgpool_remote_start: start: remote start Standby node $DEST_NODE_HOST ## Test passwordless SSH -ssh -T -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ${POSTGRESQL_STARTUP_USER}@${DEST_NODE_HOST} -i ~/.ssh/${SSH_KEY_FILE} ls /tmp > /dev/null +ssh -T ${SSH_OPTIONS} ${POSTGRESQL_STARTUP_USER}@${DEST_NODE_HOST} ls /tmp > /dev/null if [ $? -ne 0 ]; then echo ERROR: pgpool_remote_start: passwordless SSH to ${POSTGRESQL_STARTUP_USER}@${DEST_NODE_HOST} failed. Please setup passwordless SSH. @@ -21,7 +22,7 @@ if [ $? -ne 0 ]; then fi ## Start Standby node -ssh -T -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ${POSTGRESQL_STARTUP_USER}@${DEST_NODE_HOST} -i ~/.ssh/${SSH_KEY_FILE} " +ssh -T ${SSH_OPTIONS} ${POSTGRESQL_STARTUP_USER}@${DEST_NODE_HOST} " $PGHOME/bin/pg_ctl -l /dev/null -w -D ${DEST_NODE_PGDATA} status if [ \$? -eq 0 ]; then diff --git a/src/sample/scripts/recovery_1st_stage.sample b/src/sample/scripts/recovery_1st_stage.sample index 6895ec532..925c7498c 100755 --- a/src/sample/scripts/recovery_1st_stage.sample +++ b/src/sample/scripts/recovery_1st_stage.sample @@ -17,11 +17,12 @@ REPLUSER=repl REPL_SLOT_NAME=${DEST_NODE_HOST//[-.]/_} POSTGRESQL_STARTUP_USER=postgres SSH_KEY_FILE=id_rsa_pgpool +SSH_OPTIONS="-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i ~/.ssh/${SSH_KEY_FILE}" echo recovery_1st_stage: start: pg_basebackup for Standby node $DEST_NODE_ID ## Test passwordless SSH -ssh -T -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ${POSTGRESQL_STARTUP_USER}@${DEST_NODE_HOST} -i ~/.ssh/${SSH_KEY_FILE} ls /tmp > /dev/null +ssh -T ${SSH_OPTIONS} ${POSTGRESQL_STARTUP_USER}@${DEST_NODE_HOST} ls /tmp > /dev/null if [ $? -ne 0 ]; then echo recovery_1st_stage: passwordless SSH to ${POSTGRESQL_STARTUP_USER}@${DEST_NODE_HOST} failed. Please setup passwordless SSH. @@ -45,7 +46,7 @@ if [ $? -ne 0 ]; then fi ## Execute pg_basebackup to recovery Standby node -ssh -T -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ${POSTGRESQL_STARTUP_USER}@$DEST_NODE_HOST -i ~/.ssh/${SSH_KEY_FILE} " +ssh -T ${SSH_OPTIONS} ${POSTGRESQL_STARTUP_USER}@$DEST_NODE_HOST " set -o errexit @@ -57,7 +58,7 @@ ssh -T -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ${POSTGRESQL_ cat > ${RECOVERYCONF} << EOT 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' +restore_command = 'scp ${SSH_OPTIONS} ${PRIMARY_NODE_HOST}:${ARCHIVEDIR}/%f %p' primary_slot_name = '${REPL_SLOT_NAME}' EOT diff --git a/src/sample/scripts/replication_mode_recovery_1st_stage.sample b/src/sample/scripts/replication_mode_recovery_1st_stage.sample index 999766f74..bdd582f8a 100755 --- a/src/sample/scripts/replication_mode_recovery_1st_stage.sample +++ b/src/sample/scripts/replication_mode_recovery_1st_stage.sample @@ -17,11 +17,12 @@ REPLUSER=repl MAX_DURATION=60 POSTGRESQL_STARTUP_USER=postgres SSH_KEY_FILE=id_rsa_pgpool +SSH_OPTIONS="-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i ~/.ssh/${SSH_KEY_FILE}" echo recovery_1st_stage: start: pg_basebackup for Standby node $DEST_NODE_ID ## Test passwordless SSH -ssh -T -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ${POSTGRESQL_STARTUP_USER}@${DEST_NODE_HOST} -i ~/.ssh/${SSH_KEY_FILE} ls /tmp > /dev/null +ssh -T ${SSH_OPTIONS} ${POSTGRESQL_STARTUP_USER}@${DEST_NODE_HOST} ls /tmp > /dev/null if [ $? -ne 0 ]; then echo recovery_1st_stage: passwordless SSH to ${POSTGRESQL_STARTUP_USER}@${DEST_NODE_HOST} failed. Please setup passwordless SSH. @@ -37,7 +38,7 @@ else fi ## Execute pg_basebackup to recovery Standby node -ssh -T -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ${POSTGRESQL_STARTUP_USER}@${DEST_NODE_HOST} -i ~/.ssh/${SSH_KEY_FILE} " +ssh -T ${SSH_OPTIONS} ${POSTGRESQL_STARTUP_USER}@${DEST_NODE_HOST} " set -o errexit @@ -49,7 +50,7 @@ ssh -T -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ${POSTGRESQL_ cat > ${RECOVERYCONF} << EOT primary_conninfo = 'host=${MAIN_NODE_HOST} port=${MAIN_NODE_PORT} user=${REPLUSER} application_name=${DEST_NODE_HOST} passfile=''/var/lib/pgsql/.pgpass''' recovery_target_timeline = 'latest' -restore_command = 'scp ${MAIN_NODE_HOST}:${ARCHIVEDIR}/%f %p' +restore_command = 'scp ${SSH_OPTIONS} ${MAIN_NODE_HOST}:${ARCHIVEDIR}/%f %p' EOT if [ ${PGVERSION} -ge 12 ]; then @@ -73,7 +74,7 @@ if [ $? -ne 0 ]; then fi # start target server as a streaming replication standby server -ssh -T -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ${POSTGRESQL_STARTUP_USER}@$DEST_NODE_HOST -i ~/.ssh/${SSH_KEY_FILE} " +ssh -T ${SSH_OPTIONS} ${POSTGRESQL_STARTUP_USER}@$DEST_NODE_HOST " $PGHOME/bin/pg_ctl -l /dev/null -w -D $DEST_NODE_PGDATA start " diff --git a/src/sample/scripts/replication_mode_recovery_2nd_stage.sample b/src/sample/scripts/replication_mode_recovery_2nd_stage.sample index 63936feb2..ac95f9e34 100755 --- a/src/sample/scripts/replication_mode_recovery_2nd_stage.sample +++ b/src/sample/scripts/replication_mode_recovery_2nd_stage.sample @@ -12,6 +12,7 @@ PGHOME=/usr/pgsql-14 ARCHIVEDIR=/var/lib/pgsql/archivedir # archive log directory POSTGRESQL_STARTUP_USER=postgres SSH_KEY_FILE=id_rsa_pgpool +SSH_OPTIONS="-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i ~/.ssh/${SSH_KEY_FILE}" # Force to flush current value of sequences to xlog ${PGHOME}/bin/psql -p $PORT -t -c 'SELECT datname FROM pg_database WHERE NOT datistemplate AND datallowconn' template1| @@ -25,6 +26,6 @@ done psql -p $PORT -c "SELECT pgpool_switch_xlog('$ARCHIVEDIR')" template1 # start target server as a streaming replication standby server -ssh -T -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ${POSTGRESQL_STARTUP_USER}@$DEST_NODE_HOST -i ~/.ssh/${SSH_KEY_FILE} " +ssh -T ${SSH_OPTIONS} ${POSTGRESQL_STARTUP_USER}@$DEST_NODE_HOST " $PGHOME/bin/pg_ctl -l /dev/null -w -D $DEST_NODE_PGDATA promote " -- 2.39.5