将Patroni升级到Etcd新版本3.3

将Patroni升级到Etcd新版本3.3

💡 原文英文,约1900词,阅读约需7分钟。
📝

内容提要

本文介绍了将Patroni集群升级到Etcd 3.5.xx的步骤,包括置于维护模式、关闭服务、清理旧数据、安装新版本、创建新集群、修改配置文件等。最后,从维护模式中恢复,Patroni接管PostgreSQL集群。

🔎

延伸解读

升级的核心挑战:API版本切换

Etcd 3.3默认使用API v2,而3.5默认使用v3,且旧API的键在新版本中不可见。这意味着升级后,Patroni原有的动态配置无法直接读取,需要Patroni从本地patroni.dynamic.json文件恢复并重新写入Etcd。对于已有集群,这可能会影响依赖旧API的工具、自动化和监控,需提前评估。

配置方式转变:从环境变量到YAML

文章指出,过去使用环境变量配置Etcd,但在客户环境中排查问题困难。因此推荐改用YAML配置文件,使配置更明确、易读。示例中展示了包含节点名称、数据目录、监听地址、集群初始成员等关键参数的YAML结构,这有助于减少配置错误并提升可维护性。

升级步骤的关键前提与风险

升级过程需先将Patroni置于维护模式,再停止Patroni和Etcd服务,清理旧数据目录,安装新版本并重建Etcd集群。文章特别强调,这些步骤仅适用于单个Patroni集群专用的Etcd;如果Etcd同时服务多个Patroni集群或其他应用,则不能直接套用,否则可能影响其他服务。

Patroni的配置恢复机制

升级后,Patroni启动时会自动将patroni.dynamic.json中的动态配置复制到新的Etcd集群。用户可通过patronictl show-config验证配置是否成功恢复。这一设计降低了因Etcd数据清空导致配置丢失的风险,但前提是PostgreSQL数据目录中的该文件完好无损。

❓

Q&A

如何将Patroni集群升级到Etcd 3.5版本?

首先将Patroni置于维护模式,关闭服务,清理旧数据,安装新版本Etcd,创建新集群,修改配置文件,最后恢复维护模式。

Etcd 3.5与3.3版本有什么主要区别?

Etcd 3.5的默认API版本为3,而3.3的默认API版本为2,旧版本的API在新版本中不可见。

为什么建议将Etcd从3.3升级到3.5?

Etcd 3.3已经过时,且其生命周期已结束,继续使用可能存在安全风险。

在配置Etcd时,使用YAML文件有什么优势?

使用YAML文件配置Etcd比环境变量更清晰,便于故障排除。

如何验证Patroni配置是否成功复制回Etcd?

可以使用命令`patronictl -c /etc/patroni/patroni.yml show-config`来验证配置。

升级Etcd时,如何确保PostgreSQL不受影响?

在升级过程中,将Patroni置于维护模式,以确保PostgreSQL服务不受影响。

🏷️

标签

➡️

继续阅读