Redis Software 中的机架-区域感知
提示
来自deepseek解释
原文链接:https://redis.io/docs/latest/operate/rs/clusters/configure/rack-zone-awareness/
机架-区域感知有助于确保在机架或区域故障时的高可用性。
当您在 Redis Software 集群中启用机架-区域感知时,您为每个节点分配一个机架-区域 ID。该 ID 用于将节点映射到物理机架或逻辑区域。然后集群可以确保主分片、对应的副本分片以及关联的端点放置在不同机架或区域的节点上。
在机架或区域发生故障时,其余机架和区域中的副本和端点会被提升。这确保了在机架或区域故障时的高可用性。
每个集群的机架和区域数量没有限制。每个节点可以属于不同的机架,或者多个节点可以属于同一个机架。
机架-区域感知会影响各种集群、节点和数据库操作,例如节点再平衡、节点移除、节点替换、分片和端点迁移以及数据库故障转移。
机架-区域 ID 规则
机架-区域 ID 必须符合以下规则:
- 最大长度为 63 个字符。
- 字符由字母、数字和连字符('-')组成。自 Redis Software 6.4.2-61 起也支持下划线('_')。
- ID 以字母开头,以字母或数字结尾。
机架-区域 ID 不区分大小写(大写和小写字母视为相同)。
节点布局指南
避免将大多数节点放置在一个可用区内。
如果 Redis Software 集群由三个节点组成(推荐的最小值),请遵循以下指南:
为实现高可用性,三个节点必须分布在三个不同的机架或区域中。
使用可用区时,所有三个区域应位于同一个区域内,以避免潜在的延迟问题。
设置机架-区域感知
要启用机架-区域感知,您需要为集群、节点和数据库进行配置。
为集群启用机架-区域感知后,无法将其关闭。
为节点分配机架 ID 后,无法更改。
新集群
您可以在集群创建期间为集群及其节点设置机架-区域感知:
在 Cluster 界面的 Configuration 部分,启用 Rack zone awareness。
选择 Next 继续进入 Node 配置界面。
为当前节点输入 Rack-zone ID。
完成集群设置。
对于您添加到集群的每个节点,分配一个不同的 Rack-zone ID。
现有集群
如果您在集群创建期间未配置机架-区域感知,您可以使用 REST API 为现有集群配置机架-区域感知:
对于集群中的每个节点,使用 REST API 更新节点分配不同的机架-区域 ID:
shPUT /v1/nodes/<node-ID> { "rack_id": "rack-zone-ID" }更新集群策略以启用机架-区域感知:
shPUT /v1/cluster/policy { "rack_aware": true }
设置二维机架-区域感知
自 Redis Software 7.22 版本起,您可以分配 second_rack_id 来设置二维机架-区域感知。
您可以使用二维机架-区域感知在区域或机架内创建逻辑子区域。
新集群
要在集群创建期间设置二维机架-区域感知,除了 rack_id 之外,还可以使用 REST API 或 rladmin 为集群中的每个节点分配一个 second_rack_id。
REST API 方法
要创建具有二维机架-区域感知的新集群,您可以使用引导 REST API 请求:
在第一个节点上创建新集群,将
rack_aware设置为true,并为第一个节点分配rack_id和second_rack_id:shPOST /v1/bootstrap/create_cluster { "action": "create_cluster", "cluster": { "nodes": [], "name": "<cluster.fqdn>" }, "credentials": { "username": "<admin-email>", "password": "<admin-password>" }, "node": { "identity": { "rack_id": "<availability-zone-ID>", "second_rack_id": "<rack-ID>" } }, "policy": { "rack_aware": true } }加入您要添加到集群的每个新节点,并为其分配不同的
rack_id和second_rack_id:shPOST /v1/bootstrap/join_cluster { "action": "join_cluster", "cluster": { "nodes": [], "name": "<cluster.fqdn>" }, "credentials": { "username": "<admin-email>", "password": "<admin-password>" }, "node": { "identity": { "rack_id": "<availability-zone-ID>", "second_rack_id": "<rack-ID>" } } }
命令行方法
要使用命令行创建具有二维机架-区域感知的新集群:
运行
rladmin cluster create在一个节点上创建初始集群,启用机架-区域感知,并分配rack_id和second_rack_id:sh$ rladmin cluster create name <cluster-name> \ username <admin-email> \ password <admin-password> \ rack_aware \ rack_id <node-rack-ID> \ second_rack_id <second-node-rack-ID>对于您要添加到集群的每个新节点,运行
rladmin cluster join并分配不同的rack_id和second_rack_id:sh$ rladmin cluster join nodes <node-IP-address> \ username <admin-email> \ password <admin-password> \ rack_id <node-rack-ID> \ second_rack_id <second-node-rack-ID>
现有集群
您可以使用 REST API 为现有集群配置二维机架-区域感知。
对于集群中的每个节点,使用 REST API 更新节点,分配不同的 second_rack_id:
PUT /v1/nodes/<node-ID>
{ "second_rack_id": "rack-ID" }启用数据库机架-区域感知
在为数据库启用机架-区域感知之前,您必须为集群及其节点配置机架-区域感知。更多信息请参见设置机架-区域感知。
要为数据库启用机架-区域感知,请使用 REST API 请求:
PUT /v1/bdbs/<database-ID>
{ "rack_aware": true }重新排列数据库分片
在为现有数据库启用机架-区域感知后,您应使用 REST API 生成优化的分片放置蓝图,并使用它将分片重新排列到不同的机架或区域中。
发送以下
GET请求:shGET /v1/bdbs/<database-ID>/actions/optimize_shards_placement从响应头中复制
cluster-state-id。复制 JSON 响应体,它表示新的分片放置蓝图。
在请求头中,包含来自
optimize_shards_placement响应的 。在请求体中添加以下 JSON,并将 替换为新的蓝图:
sh{ "shards_blueprint": <shard placement blueprint> }发送以下
PUT请求以重新排列分片:shPUT /v1/bdbs/<database-ID>
无机架-区域感知的分片放置
即使数据库关闭了机架-区域感知,集群仍然确保主分片和副本分片放置在不同的节点上。