Redis机制-主从模式、哨兵模式、分片集群

目录

一 主从复制

主从同步

1 全量同步

2. 增量同步

二 哨兵机制

服务状态检测

哨兵选主规则

脑裂(不同的网络分区)

三 分片集群

数据读写


Redis中提供的集群方案一共有三种方式

主从复制

哨兵模式

分片集群

一 主从复制

想要提升Redis的并发能力,就要搭建主从集群,实现读写分离,毕竟单节点的Redis的并发能力是有上限的。如图,主节点可以进行写操作,从节点只能进行读操作。

但是这又引出了另外一个问题,那就是如何保证主节点和从节点之间的数据一致呢?主从数据是如何进行同步的呢?

主从同步

1 全量同步

1.从节点第一次请求主节点进行数据同步时,会执行replicaof命令。

2.发送自己的id和偏移量给主节点。

3.主机此时会判断是否是第一次进行同步。

4.如果是第一次,那么就会返回主节点之中的版本数据。

5.从节点则会保存版本信息。

6.主节点会执行bgsave命令,然后生成一个RDB文件,RDB(Redis Database Backup file)数据备份文件,也是Redis数据快照。简单来说就是把内存中所有数据记录到磁盘中。当Redis实例故障重启后,从磁盘读取快照,恢复数据。

7,然后会将这个RDB文件发送给从节点。

8.从节点则会清空本地数据,执行该RDB文件。

9.在生成RDB文件的同时,主节点还会记录RDB期间所有发送过来的命令,保存到一个repl_baklog文件当中。然后发送给从节点。

10.从节点执行log文件,此时就达到了真正的主从数据同步。

2. 增量同步

假如从节点重启以后恢复,此时主节点和从节点之间数据已经有了差异,从节点会发送同步请求,那么此时,主节点还是会判断是否是第一次连接,如果不是,那么就发送log文件,此时从节点就可以进行增量同步。

值得注意的是,主节点的数据是存储在一个环形数组中的,如果这个数据的偏移量已经超过了数组的长度,那么增量同步也是会丢失数据的,此时就只能再进行全量同步了。

二 哨兵机制

Redis提供了哨兵机制来实现主从集群的自动故障恢复。

哨兵提供了三个功能:

监控:哨兵会不断地检查主节点和从节点是否按照预期工作

自动故障恢复:如果主节点故障,那么哨兵会选择一个从节点来担当主节点

通知:哨兵充当Redis客户端的服务发现来源,当集群发生故障转移时,会将最新的信息推送给Redis的客户端。

服务状态检测

主观下线:当某哨兵节点发现某个redis实例未在规定时间内响应的话,则认为该节点下线。

客观下线:当哨兵群有一半以上认为某个redis实例主观下线,则其也会客观下线,因此哨兵数量一般都为奇数。

哨兵选主规则

首先判断主从节点断开时间长短,如超过指定值就排除该从节点。

然后判断从节点的slave-priority值,越小优先级越高。

如果优先级一样,那么判断offset值,越大优先级越高

最后判断slave节点的运行id大小,越小优先级越高。

脑裂(不同的网络分区)

如果当前主节点突然出现暂时性 “失联”,而并不是真的发生了故障,此时监听的哨兵会自动启动主从切换机制。当这个原始的主库从假故障中恢复后,又开始处理请求,但是哨兵已经选出了新的主库,这样一来,旧的主库和新主库就会同时存在,这就是脑裂现象

脑裂最严重的问题就是客户端不知道往哪个节点写数据了。结果就是不同的客户端会给不同的服务器写数据,从而造成数据丢失的现象。

简单来说就是,主节点让从节点执行它的RDB文件,此时从节点会删除自己的数据,从而噪声数据丢失。

redis中存在两个配置参数

min_replicas_to_write N

min_replicas_max_lag 10

第一个参数标识,一个节点最少要有N个从节点,才可以进行写操作。

第二个参数标识,用于配置 master 多长时间(秒)无法得到从节点的响应,就认为这个节点失联。我们这里配置的是 10 秒,也就是说 master 10 秒都得不到一个从节点的响应,就会认为这个从节点失联,停止接受新的写入命令请求。

三 分片集群

当有海量数据和高并发问题时,就应该采用分片集群的结构。

集群中有多个主节点,且每个主节点保存不同数据

每个主节点有多个从节点

主节点之间通过心跳进行检测,充当哨兵

客户端可以访问任意节点,最终都会被转发到正确的节点

数据读写

分片集群中引入了哈希槽的概念,比如说Redis有16384个哈希槽,每个key通过CRC16检验之后会算出一个值模16384,得到的值就在16383之间,然后根据最后的结果快速得到数据在哪一个主节点之上。同一类数据还可以用{ }扩起来计算其有效果值,可以使得查找更为方便。

<think>嗯,用户想了解Redis集群中的主从复制、哨兵机制分片的概念及实现方式。首先,我需要回忆一下这些技术的基本原理和它们之间的关系。 主从复制,我记得是Redis实现高可用性的基础。主节点负责写操作,从节点复制主节点的数据,处理读请求。引用中提到主从复制是单向的,从节点只能有一个主节点。需要说明复制的流程,比如全量复制和增量复制的区别,以及如何配置。用户提供的引用[2]和[3]里提到主从架构的优势,比如数据冗余和高可用性,这些需要整合到回答中。 然后是哨兵模式主从复制如果主节点挂了,需要手动切换,而哨兵可以自动监控和故障转移。哨兵的作用包括监控、通知、自动故障转移和配置提供。要解释哨兵如何检测主节点下线,如何选举新的主节点,以及如何通知客户端。这里可能需要提到主观下线和客观下线的概念,但用户提供的引用中没有详细说明,所以是否需要补充?不过根据用户的问题,可能需要简要说明。 接下来是分片集群模式。分片是将数据分布到多个节点,Redis Cluster是官方解决方案。需要解释哈希槽的概念,数据如何分配到16384个槽,节点如何负责这些槽。还要提到客户端重定向和节点间通信,比如Gossip协议。用户提到分片原理,所以需要详细说明数据分片机制,可能涉及一致性哈希或者Redis的特定实现。 现在,需要确保回答符合用户的要求:结构清晰,分点说明每个概念的定义、原理、实现方式、优缺点。同时,要引用提供的参考文献中的内容,比如引用[2]和[3]关于主从复制的部分,引用[1]可能涉及配置文件的设置,但用户的问题更多是理论上的,所以可能引用较少。 需要检查是否有遗漏的部分,比如主从复制的配置步骤,哨兵的选举过程,集群模式的数据迁移等。但用户可能不需要过于详细的步骤,而是概念和原理层面的解释。另外,用户提到的分片原理是否和集群模式是一回事,需要明确说明Redis Cluster是分片的实现方式。 可能需要注意术语的准确性,比如分片(Sharding)和集群(Cluster)的关系,确保不混淆。此外,回答中需要包含用户提供的引用内容,例如主从复制的数据冗余优势来自引用[2],主节点可写从节点只读来自引用[3]。 最后,生成相关问题时要围绕这三个技术点,可能涉及比较、原理深入、应用场景等。比如主从复制与集群的区别,哨兵如何选举,分片的数据分布方式等。 总结步骤:分三个大点,每个点下分定义、原理、实现、优缺点。使用引用标注来源。确保LaTeX格式正确,行内公式用$,独立公式用$$。最后生成相关问题。</think>### Redis集群架构解析 #### 一、主从复制 **定义** 主从复制是通过数据单向复制实现读写分离的机制,主节点(Master)负责写操作,从节点(Slave)通过复制主节点数据提供读服务[^2][^3]。 **原理** 1. **全量复制**:从节点首次连接主节点时,主节点生成RDB快照文件并传输给从节点,从节点加载数据完成初始化同步。 2. **增量复制**:后续主节点将写命令通过`replication buffer`异步发送给从节点,保持数据一致性。 **实现方式** - 配置从节点:在从节点配置文件中添加`replicaof <master-ip> <master-port>`[^1]。 - 验证:通过`INFO replication`命令查看主从关系。 **优缺点** - 优点:读写分离提升性能;数据冗余提高可用性[^2]。 - 缺点:主节点故障需手动切换;写操作仍为单点瓶颈。 --- #### 二、哨兵模式(Sentinel) **定义** 哨兵模式主从复制的升级方案,通过独立进程监控主节点状态,实现自动故障转移。 **原理** 1. **监控**:哨兵每秒向主/从节点发送`PING`命令检测存活状态。 2. **故障判定**:若主节点未响应,哨兵集群通过投票机制将其标记为**客观下线**。 3. **选举新主**:根据优先级、复制偏移量等规则,从从节点中选举新主节点。 4. **切换通知**:更新客户端连接至新主节点。 **实现方式** - 配置文件:启动哨兵进程需配置`sentinel monitor <master-name> <ip> <port> <quorum>`。 - 示例: ```conf sentinel monitor mymaster 127.0.0.1 6379 2 ``` **优缺点** - 优点:自动化故障恢复;支持高可用。 - 缺点:配置复杂;扩容需手动调整。 --- #### 三、分片集群模式(Cluster) **定义** 分片(Sharding)通过数据分区实现水平扩展,Redis Cluster是其官方分布式解决方案。 **原理** 1. **哈希槽分配**:将数据划分为16384个槽(slot),每个节点负责部分槽。 $$ \text{slot} = \text{CRC16}(key) \mod 16384 $$ 2. **节点通信**:采用Gossip协议交换节点状态信息。 3. **重定向机制**:客户端访问错误节点时,返回`MOVED`指令引导至正确节点。 **实现方式** - 集群配置: ```bash redis-cli --cluster create <node1-ip:port> <node2-ip:port> ... --cluster-replicas 1 ``` - 数据迁移:通过`CLUSTER ADDSLOTS`动态分配槽。 **优缺点** - 优点:支持海量数据;无中心化架构。 - 缺点:跨槽事务不支持;运维复杂度高。 --- ### 对比总结 | 方案 | 适用场景 | 数据一致性 | 扩展性 | |--------------|----------------------|------------|--------| | 主从复制 | 读写分离、备份 | 最终一致 | 垂直 | | 哨兵模式 | 高可用、自动故障转移 | 最终一致 | 有限 | | 集群模式 | 大规模数据、高并发 | 分区一致 | 水平 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值