集群节点的维护模式

准备集群节点进行维护。

使用维护模式以防止在Redis Enterprise服务器上进行硬件修补或操作系统维护期间丢失数据。当维护模式开启时,所有分片将从正在维护的节点移出并迁移到另一个可用节点。

激活维护模式

当你激活维护模式时,Redis Enterprise 会执行以下操作:

  1. 检查节点的关闭是否会导致法定人数丢失。如果是这样,维护模式将不会开启。

    维护模式不能防止仲裁丢失。如果您为集群中的大多数节点激活维护模式并同时重启它们,仲裁将丢失,这可能导致数据丢失。

  2. 如果不存在维护模式的快照,或者当您激活维护模式时使用overwrite_snapshot,Redis Enterprise 将创建一个新的节点快照,记录节点的分片和端点配置。

  3. 将节点标记为仲裁节点,以防止分片和端点迁移到该节点。

    此时,rladmin status 显示节点的分片字段为黄色,表示分片无法迁移到该节点。

  4. 当有可用空间时,迁移分片并将端点绑定到其他节点。

维护模式默认不会降级主节点。当原始主节点重新启动时,集群会选举一个新的主节点。

在激活维护模式时,将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:

  1. 加载一个指定的节点快照或默认为最新的维护模式快照。

  2. 取消将节点标记为仲裁节点,以允许分片和端点迁移到该节点。

  3. 恢复快照时节点中的分片和端点。

  4. 删除快照。

在服务器维护后要停用维护模式,请运行:

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请求发送POST /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_replicaevict_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>"
}

跟踪操作状态

您可以发送请求到 GET /nodes/{node_uid}/actions/{action} 来跟踪 statusmaintenance_onmaintenance_off 操作。

此请求返回maintenance_on操作的状态:

GET https://<hostname>:9443/v1/nodes/<node_id>/actions/maintenance_on

响应体:

{
    "status":"completed",
    "task_id":"38c7405b-26a7-4379-b84c-cab4b3db706d"
}
RATE THIS PAGE
Back to top ↑