Patch is created by Kazufumi Noto.
<listitem>
<para>
- <literal>repl</literal>ユーザのパスワード入力なしで、ストリーミングレプリケーションとオンラインリカバリを行うために、または<literal>postgres</literal>ユーザで<application>pg_rewind</application>を実行するために、すべてのサーバにて<literal>postgres</literal>ユーザのホームディレクト<filename>/var/lib/pgsql</filename> に<filename>.pgpass</filename>を作成・配置し、パーミッションを 600 に設定しておきます。
+ <literal>repl</literal>ユーザのパスワード入力なしで、ストリーミングレプリケーションとオンラインリカバリを行うために、または<literal>postgres</literal>ユーザで<application>pg_rewind</application>を実行するために、すべてのサーバにて<literal>postgres</literal>ユーザのホームディレクトリ<filename>/var/lib/pgsql</filename> に<filename>.pgpass</filename>を作成・配置し、パーミッションを 600 に設定しておきます。
</para>
<programlisting>
[全サーバ]# su - postgres
<para>
フェイルオーバはこのように障害時に発生しますが、手動で意図的にフェイルオーバさせることもできます。
これを<emphasis>スイッチオーバ</emphasis>と呼びます。
- ã\81\9fã\81¨ã\81\88ã\81°ã\80\81ã\82¹ã\82£ッチオーバで<productname>PostgreSQL</productname>を意図的に切り離して、その間にバックアップを取得するなどの運用が考えられます。
- ã\82¹ã\82£ッチオーバでは、単に<productname>Pgpool-II</productname>内の状態情報をダウン状態にするだけ(ただし、<xref linkend="guc-failover-command">は起動される)で、<productname>PostgreSQL</productname>をダウンさせるわけではないことに注意してください。
- スィッチオーバは<xref linkend="PCP-DETACH-NODE">コマンドで実行できます。
+ ã\81\9fã\81¨ã\81\88ã\81°ã\80\81ã\82¹ã\82¤ッチオーバで<productname>PostgreSQL</productname>を意図的に切り離して、その間にバックアップを取得するなどの運用が考えられます。
+ ã\82¹ã\82¤ッチオーバでは、単に<productname>Pgpool-II</productname>内の状態情報をダウン状態にするだけ(ただし、<xref linkend="guc-failover-command">は起動される)で、<productname>PostgreSQL</productname>をダウンさせるわけではないことに注意してください。
+ スイッチオーバは<xref linkend="PCP-DETACH-NODE">コマンドで実行できます。
</para>
<para>
- ã\83\95ã\82§ã\82¤ã\83«ã\82ªã\83¼ã\83\90ã\81ªã\81\84ã\81\97ã\82¹ã\82£ッチオーバで切り離された<productname>PostgreSQL</productname>ノードは、デフォルト設定においては自動でもとの状態(アタッチ状態)には戻りません。
+ ã\83\95ã\82§ã\82¤ã\83«ã\82ªã\83¼ã\83\90ã\81ªã\81\84ã\81\97ã\82¹ã\82¤ッチオーバで切り離された<productname>PostgreSQL</productname>ノードは、デフォルト設定においては自動でもとの状態(アタッチ状態)には戻りません。
-D オプションを指定して<productname>Pgpool-II</productname>を再起動するか、<xref linkend="PCP-ATTACH-NODE">コマンドを使用します。
その際、<xref linkend="SQL-SHOW-POOL-NODES">を使って、replication_stateが"streaming"になっていることを確認することをお勧めします。
これは、スタンバイサーバがプライマリサーバとストリーミングレプリケーションで正常に接続されており、データベース内容の整合性が取れていることを示します。
## If there's no main node anymore, skip failover.
if [ $NEW_MAIN_NODE_ID -lt 0 ]; then
echo failover.sh: All nodes are down. Skipping failover.
- exit 0
+ exit 0
fi
-## Test passwrodless SSH
+## Test passwordless SSH
ssh -T -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null postgres@${NEW_MAIN_NODE_HOST} -i ~/.ssh/id_rsa_pgpool ls /tmp > /dev/null
if [ $? -ne 0 ]; then
- echo failover.sh: passwrodless SSH to postgres@${NEW_MAIN_NODE_HOST} failed. Please setup passwrodless SSH.
+ echo failover.sh: passwordless SSH to postgres@${NEW_MAIN_NODE_HOST} failed. Please setup passwordless SSH.
exit 1
fi
echo follow_primary.sh: start: Standby node ${NODE_ID}
-## Test passwrodless SSH
+## Test passwordless SSH
ssh -T -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null postgres@${NEW_PRIMARY_NODE_HOST} -i ~/.ssh/id_rsa_pgpool ls /tmp > /dev/null
if [ $? -ne 0 ]; then
- echo follow_main.sh: passwrodless SSH to postgres@${NEW_PRIMARY_NODE_HOST} failed. Please setup passwrodless SSH.
+ echo follow_main.sh: passwordless SSH to postgres@${NEW_PRIMARY_NODE_HOST} failed. Please setup passwordless SSH.
exit 1
fi
## Check the status of Standby
ssh -T -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null \
-postgres@${NODE_HOST} -i ~/.ssh/id_rsa_pgpool ${PGHOME}/bin/pg_ctl -w -D ${NODE_PGDATA} status
+ postgres@${NODE_HOST} -i ~/.ssh/id_rsa_pgpool ${PGHOME}/bin/pg_ctl -w -D ${NODE_PGDATA} status
## If Standby is running, synchronize it with the new Primary.
# start Standby node on ${NODE_HOST}
ssh -T -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null \
- postgres@${NODE_HOST} -i ~/.ssh/id_rsa_pgpool $PGHOME/bin/pg_ctl -l /dev/null -w -D ${NODE_PGDATA} start
+ postgres@${NODE_HOST} -i ~/.ssh/id_rsa_pgpool $PGHOME/bin/pg_ctl -l /dev/null -w -D ${NODE_PGDATA} start
fi
${PGPOOL_PATH}/pcp_attach_node -w -h localhost -U $PCP_USER -p ${PCP_PORT} -n ${NODE_ID}
if [ $? -ne 0 ]; then
- echo ERROR: follow_primary.sh: end: pcp_attach_node failed
- exit 1
+ echo ERROR: follow_primary.sh: end: pcp_attach_node failed
+ exit 1
fi
# If start Standby failed, drop replication slot "${REPL_SLOT_NAME}"
echo pgpool_remote_start: start: remote start Standby node $DEST_NODE_HOST
-## Test passwrodless SSH
+## Test passwordless SSH
ssh -T -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null postgres@${DEST_NODE_HOST} -i ~/.ssh/id_rsa_pgpool ls /tmp > /dev/null
if [ $? -ne 0 ]; then
- echo ERROR: pgpool_remote_start: passwrodless SSH to postgres@${DEST_NODE_HOST} failed. Please setup passwrodless SSH.
+ echo ERROR: pgpool_remote_start: passwordless SSH to postgres@${DEST_NODE_HOST} failed. Please setup passwordless SSH.
exit 1
fi
echo recovery_1st_stage: start: pg_basebackup for Standby node $DEST_NODE_ID
-## Test passwrodless SSH
+## Test passwordless SSH
ssh -T -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null postgres@${DEST_NODE_HOST} -i ~/.ssh/id_rsa_pgpool ls /tmp > /dev/null
if [ $? -ne 0 ]; then
- echo recovery_1st_stage: passwrodless SSH to postgres@${DEST_NODE_HOST} failed. Please setup passwrodless SSH.
+ echo recovery_1st_stage: passwordless SSH to postgres@${DEST_NODE_HOST} failed. Please setup passwordless SSH.
exit 1
fi
set -o xtrace
-DATADIR=$1 # main dabatase cluster
-DEST=$2 # hostname of the DB node to be recovered
-DESTDIR=$3 # database cluster of the DB node to be recovered
-PORT=$4 # PostgreSQL port number
+DATADIR=$1 # main dabatase cluster
+DEST=$2 # hostname of the DB node to be recovered
+DESTDIR=$3 # database cluster of the DB node to be recovered
+PORT=$4 # PostgreSQL port number
PGHOME=/usr/pgsql-13
ARCHIVEDIR=/var/lib/pgsql/archivedir # archive log directory