集群节点的维护模式
准备集群节点进行维护。
使用维护模式以防止在Redis Enterprise服务器上进行硬件修补或操作系统维护期间丢失数据。当维护模式开启时,所有分片将从正在维护的节点移出并迁移到另一个可用节点。
激活维护模式
当你激活维护模式时,Redis Enterprise 会执行以下操作:
-
检查节点的关闭是否会导致法定人数丢失。如果是这样,维护模式将不会开启。
维护模式不能防止仲裁丢失。如果您为集群中的大多数节点激活维护模式并同时重启它们,仲裁将丢失,这可能导致数据丢失。
-
如果不存在维护模式的快照,或者当您激活维护模式时使用
overwrite_snapshot
,Redis Enterprise 将创建一个新的节点快照,记录节点的分片和端点配置。 -
将节点标记为仲裁节点,以防止分片和端点迁移到该节点。
此时,
rladmin status
显示节点的分片字段为黄色,表示分片无法迁移到该节点。 -
当有可用空间时,迁移分片并将端点绑定到其他节点。
维护模式默认不会降级主节点。当原始主节点重新启动时,集群会选举一个新的主节点。
在激活维护模式时,将demote_node
选项添加到rladmin
命令中以降级主节点。
要激活节点的维护模式,请运行以下命令:
rladmin node <node_id> maintenance_mode on overwrite_snapshot
如果满足以下条件,您可以开始服务器维护:
-
所有分片和端点已移至其他节点
-
仍有足够的节点在线以维持法定人数
防止副本分片迁移
如果没有足够的资源将所有分片移动到其他节点,您可以在不迁移副本分片的情况下开启维护模式。
在维护模式下阻止副本分片迁移之前,请考虑以下影响:
-
在维护期间,副本分片仍保留在节点上。
-
如果维护节点发生故障,主分片没有副本分片来维持数据冗余和高可用性。
-
在故障转移期间,节点上剩余的副本分片仍然可以被提升以保持可用性。
要在不进行副本分片迁移的情况下激活维护模式,请运行:
rladmin node <node_id> maintenance_mode on evict_ha_replica disabled evict_active_active_replica disabled
降级主节点
如果维护可能影响与主节点的连接,您可以在激活维护模式时降级主节点。这允许集群选举一个新的主节点。
要在激活维护模式时降级主节点,请运行:
rladmin node <node_id> maintenance_mode on demote_node
验证维护模式激活
要验证节点的维护模式,请使用rladmin status
并查看节点的分片字段。如果该值显示为黄色(如前所示),则节点处于维护模式。
避免在维护模式已经激活时再次激活。维护模式的激活是叠加的。如果你对一个已经处于维护模式的节点再次激活维护模式,你将需要两次停用维护模式才能恢复全部功能。
停用维护模式
当你停用维护模式时,Redis Enterprise:
-
加载一个指定的节点快照或默认为最新的维护模式快照。
-
取消将节点标记为仲裁节点,以允许分片和端点迁移到该节点。
-
恢复快照时节点中的分片和端点。
-
删除快照。
在服务器维护后要停用维护模式,请运行:
rladmin node <node_id> maintenance_mode off
默认情况下,需要快照才能停用维护模式。如果无法恢复快照,停用将被取消,节点将保持在维护模式。在这种情况下,可能需要重置节点状态。
指定快照
当您关闭维护模式时,可以从维护模式快照或之前由rladmin node <node_id> snapshot create
创建的任何快照中恢复节点配置。如果您未指定快照,Redis Enterprise 默认使用最新的维护模式快照。
要获取可用快照的列表,请运行:
rladmin node <node_id> snapshot list
要在关闭维护模式时指定快照,请运行:
rladmin node <node_id> maintenance_mode off snapshot_name <snapshot_name>
跳过分片恢复
您可以在关闭维护模式后防止迁移的分片和端点返回到原始节点。
要关闭维护模式并跳过分片恢复,请运行:
rladmin node <node_id> maintenance_mode off skip_shards_restore
重置节点状态
在极端情况下,您可能需要重置节点的状态。运行以下命令来执行此操作:
$ rladmin tune node <node_id> max_listeners 100
$ rladmin tune node <node_id> quorum_only disabled
请谨慎使用这些命令。为了获得最佳效果,在运行这些命令之前请联系支持。
集群状态示例
此示例展示了当您为节点开启维护模式时,rladmin status
的输出如何变化。
开启维护模式前的集群状态:
redislabs@rp1_node1:/opt$ rladmin status
CLUSTER NODES:
NODE:ID ROLE ADDRESS EXTERNAL_ADDRESS HOSTNAME SHARDS
*node:1 master 172.17.0.2 rp1_node1 2/100
node:2 slave 172.17.0.4 rp3_node1 2/100
node:3 slave 172.17.0.3 rp2_node1 0/100
开启维护模式后的集群状态:
redislabs@rp1_node1:/opt$ rladmin node 2 maintenance_mode on
Performing maintenance_on action on node:2: 0%
created snapshot NodeSnapshot<name=maintenance_mode_2019-03-14_09-50-59,time=None,node_uid=2>
node:2 will not accept any more shards
Performing maintenance_on action on node:2: 100%
OK
redislabs@rp1_node1:/opt$ rladmin status
CLUSTER NODES:
NODE:ID ROLE ADDRESS EXTERNAL_ADDRESS HOSTNAME SHARDS
*node:1 master 172.17.0.2 rp1_node1 2/100
node:2 slave 172.17.0.4 rp3_node1 0/0
node:3 slave 172.17.0.3 rp2_node1 2/100
在为节点2开启维护模式后,Redis Enterprise 会保存其配置的快照,然后将其分片和端点移动到节点3。
现在节点2有0/0
分片,因为在维护模式下分片无法迁移到它。
维护模式 REST API
你也可以通过向REST API请求发送/nodes/{node_uid}/actions/{action}
激活维护模式 (REST API)
使用 POST /nodes/{node_uid}/actions/maintenance_on
POST https://<hostname>:9443/v1/nodes/<node_id>/actions/maintenance_on
{
"overwrite_snapshot": true,
"evict_ha_replica": true,
"evict_active_active_replica": true
}
你可以将evict_ha_replica
和evict_active_active_replica
设置为false
来防止副本分片迁移。
maintenance_on
请求返回一个 JSON 响应体:
{
"status":"queued",
"task_id":"<task-id-guid>"
}
停用维护模式 (REST API)
使用 POST /nodes/{node_uid}/actions/maintenance_off
POST https://<hostname>:9443/v1/nodes/<node_id>/actions/maintenance_off
{ "skip_shards_restore": false }
skip_shards_restore
布尔标志允许 maintenance_off
操作在设置为 true
时跳过分片恢复。
maintenance_off
请求返回一个 JSON 响应体:
{
"status":"queued",
"task_id":"<task-id-guid>"
}
跟踪操作状态
您可以发送请求到 /nodes/{node_uid}/actions/{action}
maintenance_on
和 maintenance_off
操作。
此请求返回maintenance_on
操作的状态:
GET https://<hostname>:9443/v1/nodes/<node_id>/actions/maintenance_on
响应体:
{
"status":"completed",
"task_id":"38c7405b-26a7-4379-b84c-cab4b3db706d"
}