滚动升级
在集群中的 EMQX 节点可以一次一个地进行升级,无需停掉整个集群。这个过程被称为滚动升级。为了实现平滑的客户端会话迁移,在 EMQX 企业版中您可以使用集群重平衡功能,在升级节点之前将客户端从节点中迁移到其他节点。关于集群再平衡的更多信息,请参见此文档。
升级到 EMQX 5.9 或更高版本的重要 License 说明
从 5.9.0 版本开始,EMQX 企业版采用商业源代码许可协议发布,替代了之前开源版与企业版分开的模式。
TIP
关于 License 变更的详细信息,请参阅 EMQX Licensing FAQ。
尽管升级 EMQX 的技术步骤(如替换可执行文件)与之前版本类似,但从 5.9.0 开始引入了关键的 License 变更,特别是对于集群部署。如果您正从 5.9 之前的开源版本升级,或从单节点部署切换到集群部署,请务必注意以下几点:
- 新的 Licensing 模式:EMQX 5.9.0 及以上版本默认提供 EMQX 社区版 License。该 License 允许启用所有功能,但仅支持单节点部署。
- 集群要求:之前的开源版本支持集群部署。而在 5.9.0 及以上版本中,默认情况下不再支持集群功能。如果您希望保留集群能力,必须申请商业 License。
- License 配置要求:在集群中启动任何运行 5.9.0 及以上版本的节点之前,必须在该节点上正确配置商业 License。如果未配置或配置错误,该节点将无法在集群中正常工作。
注意
如果在 emqx.conf
中添加 License 的配置,那么来自 Dashboard、HTTP API 或 CLI 的更改会在节点重启后失效, 这是因为节点启动加载配置时,emqx.conf
和环境变量具有最高优先级。
EMQX 5.10 或更高版本的滚动升级注意事项
从 EMQX 5.10.0 开始,仅支持 v2 路由表。旧版的 v1 路由表(在 5.4.0 之前的版本中为默认)已不再兼容。因此,仍在使用 v1 路由表的集群(尤其是从早期版本逐步滚动升级而来的集群)无法执行滚动升级到 5.10.0 或更高版本。
重要说明
如果你的集群仍使用 v1 路由表,必须执行整集群重启以完成升级。
检查当前路由表
在升级前,可以通过以下命令检查集群当前使用的路由表:
$ emqx eval 'emqx_router:get_schema_vsn()'
- 如果输出为
v2
,则可以正常执行滚动升级。 - 如果输出为
v1
,则需要按照下方步骤执行整集群重启。
升级使用 v1 路由表的集群
如果你的集群当前使用 v1 路由表,请按照以下步骤升级到 EMQX 5.10.0 或更高版本:
- 停止集群中所有节点。
- 删除所有配置文件中定义的
broker.routing.storage_schema
选项。 - 将所有节点升级到 5.10.0 或更高版本。
- 先启动核心节点。
- 再启动复制节点。
如何执行滚动升级
集群节点的滚动升级过程如下:
- 使用集群重平衡将客户端从节点中清除。(可选)
- 停止旧版本节点。
- 备份节点的配置文件和数据目录。
- 安装新版本的 EMQX。
- 启动新版本节点。
注意
在滚动升级期间,请勿进行集群范围的配置更改。从 Dashboard、HTTP API 或 CLI 进行的配置更改将应用于集群中的所有节点。在滚动升级期间进行配置更改可能会导致节点不同步。
使用 RPM 和 DEB 包进行升级
如果您使用的是 RPM 或 DEB 包,可以直接安装新版本包覆盖旧版本,以完成升级。
使用 Docker 进行升级
如果您使用的是 Docker 部署,可以通过拉取新版本镜像并重启容器的方式完成升级。
从开源版升级到企业版
如果您正在运行 EMQX 的开源版本,并希望升级到企业版,这个过程与升级到开源版的新版本相同。
在安装和升级方面,EMQX 的开源版和企业版没有区别。唯一的注意点是,在每次升级后,您需要手动为企业版节点配置您的 License, 但是在所有节点升级之前,不能将 License 应用于整个集群。
例如,在 etc/base.hocon
(如果升级到 e5.8.5
之前的版本,则在 etc/emqx.conf
) 中添加以下行:
license.key = "你的 license"
注意
如果在 emqx.conf 中添加 License 的配置,那么来自 Dashboard、HTTP API 或 CLI 的更改会在节点重启后失效, 这是因为节点启动加载配置时,emqx.conf
和环境变量具有最高优先级。