原始网页:https://www.cockroachlabs.com/docs/stable/upgrade-cockroach-version.html


由于CockroachDB的多活高可用设计,用户可以对CockroachDB集群执行“滚动升级”。这意味着用户可以一次升级一个节点,而不会中断群集的整体运行状况和所有操作。

NOTE: 本小节展示如何从版本v1.1.x或是v2.0.x升级到版本v2.0.3。

Step 1: 查看可升级版本

升级的时候,用户可以跳过补丁版本,但不能跳过一个完整版本。 因此,如果用户

Step 2: 升级准备

当开始升级之前,请完成以下步骤:

  1. 确保集群配置了负载均衡器,或是客户端配置为可与多个节点交互。如果应用只与单一节点交互,停止节点服务来升级CockroachDB版本可能会导致应用的不可用。
  2. 通过集群任何节点来执行cockroach node status查看集群的整体健康状况。
  3. 如果任何应该处于活动状态的节点未被列出,请确定节点脱机的原因并在开始升级之前重新启动它们。
  4. 确保所有节点的build字段显示相同版本的CockroachDB。对于版本不一致的节点需要在升级前及时处理。
  5. 确保对于所有节点ranges_unavailableranges_underreplicated显示为0。如果集群中存在不可用或不足的Range,此时执行滚动升级会增加Range丢失、一致性出错导致集群不可用的风险。因此,在开始升级之前,确定并解决范围不可用和欠缺复制的原因非常重要。
  6. 通过对集群中的任何节点执行cockroach debug zip命令可以截取集群当前的状态。如果升级未按计划进行,通过截取到的详细信息协助用户和Cockroach Labs解决问题。
  7. 备份集群,可以在升级失败、集群出现异常的时候恢复集群到先前的状态。

Step 3: 执行滚动升级

对于需要滚动升级的每个节点,用户需要执行:

TIPS: 推荐使用脚本执行以下步骤,而不是手工执行。

WARNING: 用户一次仅升级一个节点,并需要在节点重新加入集群至少等待一分钟后再升级下一个节点。同时升级多个节点会增加Range一致性出错并导致集群不可用的风险。

1. 登陆节点所在机器

2. 停止cockroach进程

不使用systemd这样的进程管理器

请使用以下命令:

pkill cockroach

使用systemd进程管理器

可以执行以下命令停止进程而不让systemd重启它:

systemctl stop <systemd config filename>

3. 验证

查看进程是否正常退出:

ps aux | grep cockroach

用户也可以检查节点的日志以查找是否输出server drained and shutdown completed消息。

4. 下载与安装程序

下载于安装CockroachDB二进制文件

Mac

# Get the CockroachDB tarball:
curl -O https://binaries.cockroachdb.com/cockroach-v2.0.5.darwin-10.9-amd64.tgz
# Extract the binary:
tar xfz cockroach-v2.0.5.darwin-10.9-amd64.tgz

Linux

# Get the CockroachDB tarball:
wget https://binaries.cockroachdb.com/cockroach-v2.0.5.linux-amd64.tgz
# Extract the binary:
tar xfz cockroach-v2.0.5.linux-amd64.tgz

5. 修改环境变量

移除环境变量PATH当中旧版本cockroach程序的路径,更新为新版本cockroach程序的路径。

Mac

i="$(which cockroach)"; mv "$i" "$i"_old
cp -i cockroach-v2.0.5.darwin-10.9-amd64/cockroach /usr/local/bin/cockroach

Linux

i="$(which cockroach)"; mv "$i" "$i"_old
cp -i cockroach-v2.0.5.linux-amd64/cockroach /usr/local/bin/cockroach

6. 重启节点并加入集群

不使用systemd这类型的进程管理器

请使用以下的命令:

#其中`[other flags]`指的是启动节点用户自定义指定的flags
cockroach start --join=[IP address of any other node] [other flags]

使用systemd的进程管理器

执行以下命令来启动节点:

systemctl start <systemd config filename>

7. 验证

在重启节点后用户通过节点启动输出到stdout内容或是通过Admin界面查看节点是否正常启动。

8. 老版本程序处理

如果用户可以选择删除旧的二进制文件。

rm /usr/local/bin/cockroach_old

如果需要在服务器上保留该版本的二进制文件,则无需执行任何操作。

9. 等待必要的时间

在节点重新加入群集后至少等待一分钟,然后对下一个节点重复这些步骤。

Step 4: 监控升级后集群

在集群所有节点升级后,持续监控集群的稳定性和性能至少一天。

WARNING: 在此阶段请避免使用v2.0.3版本的任何新的功能,否则用户将无法将集群滚动降级到v1.1版本。此外建议不要在此阶段运行企业版的BACKUPRESTORE作业,因为schema更改检测或确保正确目标扩展等某些功能的行为在混合版本集群中可能会有所差异。

Step 5: 完成或恢复升级

持续监控升级后的集群至少一天:

完成升级

NOTE: 从v1.1.x升级到v2.0.3后,需要执行以下步骤。而对于v2.0.x系列中的升级,用户无需采取任何以下操作。

SELECT crdb_internal.node_executable_version();

需要确保所有的节点版本符合升级预期。由于你升级了每一个节点,所以这个版本应该在其他节点同样运行。

SET CLUSTER SETTING version = crdb_internal.node_executable_version();

这一步可实现v2.0.3带来的某些性能提升和错误修复。请注意完成此步骤后,集群将无法执行滚动降级到v1.1版本。在之后若使用v2.0.3的新功能导致了灾难性故障或损坏,用户唯一的选择是使用旧版本CockroachDB二进制文件启动新群集,执行备份恢复操作。

还原升级