是否可以在零停机的情况下将 postgres 9.6 升级到 10。可以遵循哪些方法?

Is it possible to upgrade postgres 9.6 to 10 with zero downtime. What are the approaches that can be followed?

我正在尝试在不停机的情况下将我的 postgres 数据库从 9.6 升级到 10。这能做到吗?

如"a_horse_with_no_name"所述,逻辑复制在您的情况下是一个很好的选择。

唯一的问题是 9.6 还没有内部实现,所以你必须在两个数据库上使用扩展 "pglogical" - 在这里我找到了一些描述 - https://rosenfeld.herokuapp.com/en/articles/infrastructure/2017-11-10-upgrading-postgresql-from-9-6-to-10-with-minimal-downtime-using-pglogical - 跳过关于 [=52= 的部分] 看看 pglogical 是如何工作的。

唯一的小问题是必须将 pglogical 添加到 "shared_preload_libraries" 参数中并且必须修复 postgresql 服务tarted,这在生产中有时会很困难...

我用 pglogical 做了很多测试(这里有一些注释 - http://postgresql.freeideas.cz/pglogical-postgresql-9-6-small-hints-debian/)尽管最后我从未在生产中使用过 pglogical。所以我没有长期使用的经验。

但我认为有些问题可能类似于 PG 10 和 11 中逻辑复制的内部实现。所以这是我目前在 PG 11 上使用内部逻辑复制的笔记 - http://postgresql.freeideas.cz/setting-logical-replication-is-not-entirely-straight-forward/ - 也许它的某些内容会对您有所帮助。

我给你的建议是:

  • 在云 VM 上的其他机器上使用完全相同的 OS 制作 PG 9.6 数据库的热备份副本,如果可能,使用 pg_basebackup 磁盘类型和配置 - 您可以找到一些灵感这里:
  • 或者如果您已经将 pg_basebackup 用于 tar 数据库备份,则在其他机器或 VM 上恢复最新备份 (http://postgresql.freeideas.cz/pg_basebackup-pgbarman-restore-tar-backup/)
  • start 作为普通服务器(而不是热备用)并针对 PG 10 的某些测试安装在您的数据库副本上测试 pglogical - 尽可能接近生产环境进行测试,包括至少模拟类似强度的 DML 操作——这将向您展示机器/虚拟机负载的差异。
  • 我强烈建议设置监控,例如使用 telegraf + influxdb + Grafana(我认为最简单的实现方式)以便稍后能够分析 CPU 和内存使用情况 - 这对于在生产 !
  • 希望经过简短而成功的测试后实施它并庆祝您的成功 :-) 请写下您的经历。因为我相信很多人会欢迎它。