主从架构和集群
Redis 的 主从架构 和 集群(Redis Cluster) 是两种差别的分布式部署方式。
- 主从架构(Master-Slave Replication)是一种简朴的复制机制,一个主节点(Master)负责写操作,多个从节点(Slave)同步主节点的数据,只负责读操作。
- Redis 集群是一种分布式架构,通过数据分片(sharding)将数据分散到多个节点,每个节点负责一部门数据,同时支持高可用和主动故障转移。
- 主从是集群的底子,Redis 集群内部每个 Master 和其 Slave 之间,现实上就是主从复制的关系。
主从复制(同步)
是形貌主节点(Master)将数据同步到从节点(Slave)的过程,Redis 的主从复制分为两个阶段:全量同步和增量同步。
1. 全量同步
触发场景:
- 从节点初次连接主节点。
- 从节点与主节点停止后数据差距太大。
流程:
- 从节点发送 PSYNC 命令给主节点,请求同步。
- 主节点执行 BGSAVE,生成 RDB 文件(内存快照)。
- 主节点将 RDB 文件发送给从节点。
- 从节点加载 RDB 文件,清空自身数据并恢复主节点的状态。
- 主节点将生成 RDB 期间的写命令(缓冲区)发送给从节点,从节点执行这些命令。
效果:从节点的数据与主节点完全一致。
2. 增量同步
增量同步允许从服务器从断点处继续同步,而不是每次从头开始同步。
关键机制
- 复制偏移量(Replication Offset):主从节点记录各自处理的命令字节数,用于判定数据差距。
- 复制积压缓冲区(Replication Backlog):主节点维护一个固定大小的缓冲区,存储最近的写命令,支持断线重连后的增量同步。
- 运行 ID(Run ID):主节点的唯一标识,重启后变化。从节点用它判定是否连接的是同一个主节点。
断线重连的增量同步
- 从节点断开:
- 主节点继续写:
- 客户端发送:SET city “Beijing”(20 字节)。
- 主节点偏移量变为 140,缓冲区追加 SET city “Beijing”。
- 从节点重连:
- 主节点检查:
- 偏移量 120 在缓冲区内。
- 从缓冲区提取 120 到 140 的命令:SET city “Beijing”。
- 主节点发送给从节点。
- 从节点执行:
- 执行 SET city “Beijing”,偏移量变为 140。
- 效果:
- 主从一致:name: “Alice”, age: 25, city: “Beijing”。
哨兵模式
哨兵模式(Sentinel)是 主从架构 下的一个增强机制,而不是直接属于集群模式。
哨兵模式是一组运行 redis-sentinel 的进程,负责监控 Redis 主从节点的康健状态,管理故障转移和配置更新。如果发现主节点挂了,它就会选举一个从节点切换为主节点,而且把新主节点的相干信息通知给从节点和客户端。
哨兵是一个额外的进程,可以在已有的 redis 上配置,也可以在独立呆板上运行哨兵(更推荐,不会哨兵节点一起挂)
- 机器 A: Master (6379) + Sentinel1 (26379)
- 机器 B: Slave1 (6380) + Sentinel2 (26380)
- 机器 C: Slave2 (6381) + Sentinel3 (26381)
复制代码 哨兵选新节点
- 主节点下线 :每个哨兵定期向主节点发送 PING,规定时间没回这个哨兵就认为主节点挂了。该哨兵向其他哨兵扣问:“你们觉得主节点下线了吗?”。如果到达法定人数,主节点就被标记为“客观下线”。
- 选举领导者哨兵 :哨兵发现主节点挂了就请其他哨兵选自己当领导者,其他哨兵遵循 “先到先得” 的原则投票,末了票高者得。
- 领导者哨兵选新节点 :领导者选一个新主节点,通知其他哨兵和从节点。
选择标准:【1.配置优先级—>2.复制偏移量 offset 大—>3.运行 ID看随机】
redis 集群
16384 个槽分配给多个 Master,key 通过 CRC16 哈希映射到槽。每个 Master 有 Slave,主故障时 Slave 主动晋升 。
接下来的题目就是,这些哈希槽怎么被映射到详细的 Redis 节点上的呢?有两种方案:
- 均匀分配: 在使用 cluster create 命令创建 Redis 集群时,Redis 会主动把全部哈希槽均匀分布到集群节点上。好比集群中有 9 个节点,则每个节点上槽的个数为 16384/9 个。
- 手动分配: 可以使用 cluster meet 命令手动创建节点间的连接,构成集群,再使用 cluster addslots 命令,指定每个节点上的哈希槽个数。
优点
- 数据分片,容量可扩展
- 多点写,提升写性能
- 高可用,主动故障转移
- 分布式存储,负载均衡
- 支持动态扩缩容
缺点
- 部署和维护较复杂
- 集群同步题目: 当某些节点失败或者网络出故障,集群中数据同步的题目也会出现。数据同步的复杂度和工作量随着节点的增长而增长,同步时间也较长,导致一定的读写延迟。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |