在 PostgreSQL 9.4.1 的切换和切回中是强制参数recover_target_timeline='latest'吗?

Posted

技术标签:

【中文标题】在 PostgreSQL 9.4.1 的切换和切回中是强制参数recover_target_timeline=\'latest\'吗?【英文标题】:Is it mandatory parameter recover_target_timeline='latest' in switchover and switchback in PostgreSQL 9.4.1?在 PostgreSQL 9.4.1 的切换和切回中是强制参数recover_target_timeline='latest'吗? 【发布时间】:2019-12-01 09:12:28 【问题描述】:

我已按照以下步骤进行切换和切回。

第 1 步:- 从 10.x.x.10 断开应用程序服务并执行以下操作

@Master(10.x.x.10)

pg_ctl -D /DATA_VEC/pgdata stop --mode=fast

@DR(20.x.x.20)

将DR提升为读写模式

第 2 步:- 从新的主节点启动主节点作为 DR

@Master(10.x.x.10) 创建recovery.conf

standby_mode = 'on'
primary_conninfo = 'user= password= host=20.x.x.20 port=9999
trigger_file = '/tmp/node1'
restore_command = 'cp /DATA_VEC/restore/%f "%p"'
pg_ctl -D /DATA_VEC/pgdata start

升级新备用服务器后,旧主服务器未与新主服务器同步(旧备用服务器) 来自主要 DR 服务器的日志。

2019-12-01 18:46:56 IST LOG:  database system was shut down in recovery at 2019-12-01 18:46:53 IST
2019-12-01 18:46:56 IST LOG:  entering standby mode
cp: cannot stat `/DATA_VEC/restore/00000002.history': No such file or directory
2019-12-01 18:46:56 IST LOG:
2019-12-01 18:46:56 IST LOG:  restored log file "00000002000000000000000C" from archive
2019-12-01 18:46:57 IST LOG:  consistent recovery state reached at 0/C000090
2019-12-01 18:46:57 IST LOG:  record with zero length at 0/C000090
2019-12-01 18:46:57 IST LOG:  database system is ready to accept read only connections
2019-12-01 18:46:57 IST LOG:  started streaming WAL from primary at 0/C000000 on timeline 2
2019-12-01 18:46:57 IST LOG:  replication terminated by primary server
2019-12-01 18:46:57 IST DETAIL:  End of WAL reached on timeline 2 at 0/C000090.
2019-12-01 18:46:57 IST LOG:  restored log file "00000002000000000000000C" from archive
2019-12-01 18:46:57 IST LOG:  record with zero length at 0/C000090
2019-12-01 18:46:57 IST LOG:  restarted WAL streaming at 0/C000000 on timeline 2
2019-12-01 18:46:57 IST LOG:  replication terminated by primary server
2019-12-01 18:46:57 IST DETAIL:  End of WAL reached on timeline 2 at 0/C000090.

@Master(10.x.x.10)

pg_xlog 内容

-bash-4.1$ cd pg_xlog
-bash-4.1$ ll
total 65552
-rw------- 1 postgres postgres      302 Dec  1 12:52 00000002000000000000000A.00000028.backup
-rw------- 1 postgres postgres 16777216 Dec  1 13:52 00000002000000000000000B
-rw------- 1 postgres postgres 16777216 Dec  1 14:28 00000002000000000000000C
-rw------- 1 postgres postgres 16777216 Dec  1 12:52 00000002000000000000000D
-rw------- 1 postgres postgres 16777216 Dec  1 12:52 00000002000000000000000E
-rw------- 1 postgres postgres       41 Dec  1 13:57 00000002.history
-rw------- 1 postgres postgres       83 Dec  1 13:57 00000003.history
drwx------ 2 postgres postgres     4096 Dec  1 13:57 archive_status

@in restore_command 位置内容:-

-bash-4.1$ cd /DATA_VEC/restore/ -bash-4.1$ ll total 49156 -rw------- 1 postgres postgres 16777216 Dec 1 18:45 00000002000000000000000A -rw------- 1 postgres postgres 16777216 Nov 30 21:22 00000002000000000000000B -rw------- 1 postgres postgres 16777216 Dec 1 18:45 00000002000000000000000C -rw------- 1 postgres postgres 83 Dec 1 18:45 00000003.history -bash-4.1$

根据 per_pg_xlog 时间线历史文件 00000003.historyarrived at standby 仍未开始从新的主流。

问题:- 1. recovery.conf文件中的recover_target_timeline='latest'是否是强制参数“通过流从新的主节点获取最新的时间线ID以开始流复制?

2.如果是,是否适用于所有 PostgreSQL 版本?比如从 9.3 到 11.5

【问题讨论】:

【参考方案1】:

如果您想要切换回功能,则必须设置recovery_target_timeline='latest',因为任何促销都会增加时间线。使用固定的目标时间线通常是为非常特殊的情况保留的(即,您需要在出现脑裂、时间线分歧的情况后恢复更改)。

回答您的具体问题:

    是的 是的

【讨论】:

以上是关于在 PostgreSQL 9.4.1 的切换和切回中是强制参数recover_target_timeline='latest'吗?的主要内容,如果未能解决你的问题,请参考以下文章

从存储中初始加载数据

centos7.5英文环境切换到中文环境,再切回中文环境后 ,terminal不能用

自定义Firefox的 "切换previous标签页"快捷键, 增加"切回last标签页"快捷键

我又切回MarkDown编辑器了

经验法则和切比雪夫法则

Win10微软帐户切换不回Administrator本地帐户的解决方法