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之间,然后根据最后的结果快速得到数据在哪一个主节点之上。同一类数据还可以用{ }扩起来计算其有效果值,可以使得查找更为方便。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值