外观
Redis 集群的扩容与缩容
扩容
扩容方法和过程:
1.新增节点到集群:使用redis-cli --cluster add-node
<新节点IP>:<新节点端口> <现有节点IP>:<现有节点端口>命令,将新节点以 “待分配” 状态加入到现有 Redis
集群中。
2.重新分配槽:Redis
集群共有 16384
个槽,通过redis-cli --cluster reshard
<现有节点IP>:<现有节点端口>命令,手动指定迁移槽的数量以及目标节点,把现有节点的部分槽分配给新增节点。
3.数据迁移:槽重新分配后,槽中的数据会逐个键值对地从原节点迁移到目标节点。Redis
使用异步方式传输数据,并通过 MIGRATE
指令实现原子化迁移。
4.更新元数据:数据迁移完成后,Redis
自动更新集群元数据,以反映槽分配的变化。
扩容期间发生的事情:
1.性能变化:新节点需要从其他节点获取大量数据副本,会消耗一定的网络带宽和计算资源,可能会使整个集群的读写性能在短期内有所下降。
2.故障转移时间变长:由于节点增加,故障转移涉及的范围更大,时间可能会变长,在一定程度上会影响集群的可用性。
3.数据一致性问题:虽然 Redis
采用异步方式保证数据迁移,但在新节点加入前后,仍可能出现数据在不同节点之间的同步不完全一致的情况。
缩容
缩容方法和过程:
1.删除从节点:使用redis-cli --cluster del-node
<集群中任一节点IP:端口> <要删除的从机节点nodeId>命令,先删除要缩容的主节点对应的从节点。
2.重新分配槽:将待下线主节点的槽分配给其他主节点,使用redis-cli --cluster reshard
命令指定要迁移的槽数量、源节点(待下线主节点)和目标节点,把槽迁移到其他节点。
3.删除主节点:槽和数据迁移完成后,使用redis-cli --cluster del-node
命令删除待下线的主节点。
缩容期间发生的事情:
1.数据迁移压力:需要将待下线节点的数据迁移到其他节点,可能会导致网络带宽占用增加和部分节点负载升高。
2.业务访问异常:如果操作不当,如数据迁移未完成就删除节点,或者元数据更新不及时,可能会导致客户端请求出现 MOVED
异常、超时报错等,影响业务访问。
3.集群拓扑变化:从节点删除后,集群的复制关系发生变化;主节点删除后,集群的槽分配和数据存储结构也会改变,可能需要一定时间让集群内各节点完成拓扑信息的更新和同步。