目录
一、什么是分片集群?
前面谈到哨兵的作用就是无人值守运维,无非就是master宕机,slave再顶上去。但此时会有一个大问题, master挂掉后,写操作会被暂时中断,哨兵们需要投票选举新的master,选举新的leader,由leader推动故障切换流程,至此新的master才能对外提供写操作。在老master宕机到新master上位这个前期,redis服务处于一个半瘫痪状态,只能读不能写,就会导致数据流失,这个过程的持续时间可能还会因为硬件、网络等原因增长。因此承受单点高并发的master只有一个是远远不够的。所以Redis就引入了集群。
Redis集群支持多个Master,每个Master又可以挂载多个Slave——读写分离、支持数据的高可用、支持海量数据的读写存储操作
由于Cluster自带SentineI的故障转移机制,内置了高可用的支持,无需再去使用哨兵功能
客户端与Redis的节点连接,不再需要连接集群中所有的节点,只需要任意连接集群中的一个可用节点即可
二、如何分片
Redis集群的槽位slot负责分配到各个物理服务节点,由对应的集群来负责维护节点、插槽和数据之间的关系;Redis集群没有使用一致性hash,而是引入了哈希槽来实现分片集群。哈希槽将整个数据集分成固定数量的槽,每个槽都有一个唯一的编号,通常是从 0 到 16383。
在 Redis 分片集群中,有多个节点(主节点和从节点),每个节点负责存储其中一部分的槽数据。节点之间通过集群间通信协议进行数据的交互和同步。
当一个客户端发送一个命令到 Redis 分片集群时,集群会根据命令涉及的键的哈希值将命令路由到正确的槽上。这个槽所在的节点负责处理这个命令并返回结果给客户端。
三、分片过程
1. 客户端发送命令到 Redis 分片集群中的任意一个节点。
2. 节点根据命令涉及的键的哈希值计算出对应的槽号。
3. 节点根据槽号确定该槽所在的节点,并将命令路由到该节点。
4. 该节点处理命令并返回结果给客户端
当节点加入或离开集群时,Redis 分片集群会自动进行数据的重新分片和迁移,以保持数据的均衡和高可用性。
四、搭建分片集群
ip |
Port |
角色 |
192.168.154.129 |
1001 |
master |
192.168.154.129 |
1002 |
master |
192.168.154.129 |
1003 |
master |
192.168.154.129 |
2001 |
slave |
< |