升级Consul


Consul在参与集群的每个节点上长期运行。这些节点始终相互通信。因此,当使用Consul时升级的协议兼容性和约束是一件需要记住的重要事务。

本页介绍当一个新的版本发布如何升级Consul。

标准升级

对于升级我们努力保持向后兼容。为了做到这一点,节点相互传播它们的协议版本和构建版本。这使Client和Server可以在新功能可用时自动启用,或者优雅的回退到向后兼容的运行模式。

对于大多数升级,处理很简单。假定Consul的当前版本是A,然后版本B发布了。

1、在每一个服务端,安装版本B的Consul。

2、关闭版本A,启动版本B。

3、一旦所有的Server都已经升级,就可以按照相同的过程进行Client的部署。

4、完成!你现在正在运行最新的Consul Agent。你可以通过运行consul members命令来验证,确保所有的成员都有最新的构建版本和最高的协议版本。

后向不兼容升级

在某些情况下,可能会发布一个后向不兼容更新。这也没有问题,但是为了支持升级,我们会支持设置一个明确的协议版本。这个版本会禁止不兼容的功能,然后可以进行一个两阶段升级。

对于下面的步骤,假设您正在运行版本A,然后版本B出来了。

1、在每个节点安装版本B。

2、关闭版本A,使用 -protocol=PREVIOUS 参数启动版本B,PREVIOUS是版本A的协议版本(可以通过运行 consul -v 或者 consul members 命令来获取到)。

3、一旦所有的节点都在运行版本B,然后在每个节点不使用参数 -protocol 重启版本B。

4、完成!你现在运行着最新的Consul Agent,并使用最新的协议。你可以通过运行consul members命令来验证,确保所有的成员都在使用相同的、最新的协议版本。

让这种升级能够进行的关键是Consul的协议兼容性,协议版本系统将在下面讨论。

协议版本

默认情况下,Consul Agent使用他们可以使用的最新协议。然而,如果有任何协议变更,每个新版的Consul也可以使用之前的协议。

你可以通过运行 consul -v 看到你的Consul版本理解的协议版本。你可以看到输出类似下边这样的信息:

$ consul -v
Consul v0.7.0
Protocol 2 spoken by default, understands 2 to 3 (agent will automatically use protocol >2 when speaking to compatible agents)

这告诉我们Consul的版本,以及Agent使用和可以理解的协议版本。

请注意,为了减少与旧版本之间的兼容性问题,有时Consul会默认使用它理解的一个较低协议版本。例如,Consul Agent理解版本3,但是声明使用版本2,并且只和理解版本3的Agent使用版本3消息。当Agent升级后,这可以使功能自动升档。这是一种尽可能使用的策略。如果这不可用,你将需要按照上边的步骤进行一个后向不兼容的升级,这样的要求将在一个给定版本的说明中清楚的列出。

通过为Consul Agent指定 -protocol 参数,你可以告诉Consul Agent使用它可以理解的任何协议版本。这仅指定要使用的协议版本。每一个Consul Agent总是可以理解它在 consul -v 中声明的整个协议版本范围。

运行一个之前的协议版本,Consul的一些功能,特别是新功能,可能不可用。如果出现这种情况,Consul通常会警告你。一般情况下,你应该总是升级你的集群,以便你可以运行最新的协议版本。