使用逻辑复制升级 Postgres 主要版本

Chi*_*lax 1 postgresql upgrade master-slave-replication postgresql-14

我们考虑了一些选项来将我们的 Postgres 服务器从当前 ( 10) 版本升级到最新 ( 14) 版本。我们决定不在主服务器上做任何事情 - 因为我们需要使用链接选项(所以就地,而不是复制),并且如果我们在新的 postgres 服务器启动后看到问题,我们无法回滚。我们认为首先进行复制会更安全。

pg_upgrade因此,我们计划使用复制来进行升级。这是我们到目前为止的计划:

  1. 在主和复制之间设置逻辑复制(因此从当前的流式复制更改)
  2. 复制完成并且它们同步后,停止复制 postgres 服务器 - 运行 Postgres 10。
  3. 执行pg_upgrade复制,然后启动它(逻辑复制将继续)
  4. 复制更新后,将复制切换到主复制,并将主复制切换到复制。
  5. 现在,所有客户端都将连接到 Postgres 14 上的复制
  6. 对新的复制\旧的主数据库执行相同的步骤(停止、pg_upgrade、启动,最后再次切换回来)

在继续之前我有一些问题:

  1. 是否可以从升级前的机制转移streaming replicationlogical replication升级前的机制?在这样做之前有什么需要考虑的吗?
  2. 我们正在考虑即使在升级后也保持复制机制的逻辑性。这是可取的吗?
  3. 该操作预计需要多长时间才能pg_upgrade完成?我知道这取决于各种参数,但是根据数据大小约为 600 GB 的事实进行粗略估计吗?由于这是复制所需的停机时间 - 所以没有备份。
  4. 这是一个好的策略吗?还是有更好的(安全、停机时间最短)选择?

在继续升级之前,请寻求有关这些问题的一些指导。

Lau*_*lbe 5

并非所有内容都通过逻辑复制进行复制:仅INSERT, UPDATEand DELETE(从 v11 开始也TRUNCATE)。所以它绝对不能替代流复制。此外,流复制的性能更好。

如果您在主数据库上挂起应用程序,等到备用数据库赶上来,然后提升备用数据库并使用copy_data = FALSE.

pg_upgrade使用该--link选项最多需要几分钟,因为仅迁移元数据。

您应该考虑按照说明升级两台服务器pg_upgrade- 停机时间只会更长一点,而且更简单。