原始网页:https://www.cockroachlabs.com/docs/stable/stop-a-node.html


本小节将展示如何使用cockroach quit命令去暂时停止一个计划重新启动的节点。例如滚动升级集群,或者执行计划中维护(如升级系统软件)

如若需要永久移除节点来减小集群规模或者解决硬件故障,可以参考节点移除

概要

术语

实现机制

当用户停止一个节点时,CorckroachDB底层执行了以下操作:

在节点离线一段时间(默认5分钟)后,集群将此节点视为死亡节点,并将节点的range副本迁移到其他活跃节点上。

此后如果节点重新加入集群,集群将检查其Range副本是否仍然是集群Range组的有效成员。如果Range副本仍然有效且Range内的数据被修改,它将从群组的其他副本里接收更新。如果Range副本失效,则将从节点中删除。

用户须知

默认情况下,一个节点与集群失联超过5分钟,集群将视其为死亡节点,并将该节点的数据副本重新分布到其他节点上。对于计划中的维护(如升级系统软件)而暂时停止节点服务之前,若节点预计下线时间超过5分钟时,用户可通过增加集群配置项server.time_until_store_dead的值来匹配预估的维护时间窗口,从而避免集群对节点进行不必要的数据重分布。

例如用户需要对一组服务器进行维护,服务器上运行的节点最多可能会脱机15分钟,则在关停节点之前,用户适当地更改server.time_until_store_dead配置项的值。如下所示:

SET CLUSTER SETTING server.time_until_store_dead = '15m0s';

在维护结束以后,用户需要恢复上述配置项:

SET CLUSTER SETTING server.time_until_store_dead = '5m0s';

此外,至关重要的是确保负载均衡器不会将客户端流量分发到即将关闭的节点上,即使这节点可能只是关闭很短的时间。如果在节点关停之前发现负载均衡器的健康检查不能将该节点识别为未准备状态,则可以增加server.shutdown.drain_wait配置项的值。该配置将设置节点在指定时间内处于未准备状态。

SET CLUSTER SETTING server.shutdown.drain_wait = '10s';

概要

# Temporarily stop a node:
cockroach quit <flags>

# View help:
cockroach quit --help

Flags

通用

Flag 简介
--decommission 使用该Flag,集群将永久退役节点,详见退役节点

客户端连接

Flag 简介
--host 指定服务器ip地址,可以是集群的任意节点。

环境变量COCKROACH_HOST
默认localhost
--port
-p
指定服务器端口

环境变量COCKROACH_PORT
默认26257
--user
-u
指定SQL用户

环境变量COCKROACH_USER
默认root
--insecure 使用非安全模式的连接

环境变量COCKROACH_INSECURE
默认false
--certs-dir 指定存放着CA证书和客户端证书密钥的目录

环境变量COCKROACH_CERTS_DIR
默认${HOME}/.cockroach-certs/

更多细节可以查看:客户端连接参数

日志

cockroach quit默认输出日志错误到stderr。 更丰富的日志功能可查看:日志行为

示例

在集群内机器上停止节点

ps aux | grep cockroach

此外用户也可以检查节点日志,查看日志末是否输出server drained and shutdown completed内容。

在集群外机器上停止节点

安全模式

cockroach quit --certs-dir=certs --host=<address of node to stop>

非安全模式

cockroach quit --insecure --host=<address of node to stop>