我正在尝试将postgres数据库从9.6升级到10,而没有任何停机时间。能做到吗?

最佳答案

正如“一匹没有名字的马”所说的,逻辑复制在您的情况下是一个非常好的选择。
唯一的问题是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-跳过Docker的部分,看看pglogical是如何工作的。
唯一的小问题是必须将pglogical添加到“shared_preload_libraries”参数中,并且必须重新启动postgresql服务,这在生产中有时是很困难的。。。
我用pglogical做了很多测试(这里有一些注释-http://postgresql.freeideas.cz/pglogical-postgresql-9-6-small-hints-debian/),尽管最后我从未在生产中使用过pglogical。所以我没有长期使用的经验。
但我认为有些问题可能类似于PG 10和PG 11中逻辑复制的内部实现。下面是我目前在PG 11上使用内部逻辑复制时的注意事项-http://postgresql.freeideas.cz/setting-logical-replication-is-not-entirely-straight-forward/-也许可以从中得到一些帮助。
我给你的建议是:
使用完全相同的操作系统在云虚拟机上的其他机器上制作PG 9.6数据库的热备份副本,如果可能,使用PG_basebackup进行磁盘类型和配置-您可以在这里找到一些灵感:
http://postgresql.freeideas.cz/pg_basebackup-bash-script-backup-archiving-google-storage/
http://postgresql.freeideas.cz/pg_basebackup-experiences/
或者如果您已经在其他计算机或虚拟机上使用pg_basebackup对db restore最新备份进行tar备份(http://postgresql.freeideas.cz/pg_basebackup-pgbarman-restore-tar-backup/
start与普通服务器(而不是热备用服务器)相同,并在此数据库副本上对pglogical进行测试,测试PG 10的某些测试安装-尽可能靠近生产环境进行测试,包括至少模拟类似强度的DML操作-这将显示计算机/VM上的负载差异。
我强烈建议设置监控,例如使用telegraf+infloxdb+Grafana(我认为最简单的实现方式),以便以后能够分析CPU和内存使用情况-这对于生产上的使用可能是非常关键的一部分!
希望在短期和成功的测试之后实施它并庆祝你的成功:-)请写下你的经历。因为我相信很多人会欢迎的。

关于postgresql - 是否可以在零停机时间内将Postgres 9.6升级到10。可以遵循哪些方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54327015/

10-15 19:48