和所有的数据库一样,Redis也支持集群化,Redis的集群分为分布式集群和主从集群。大部分公司采取的都是主从集群。所以在本篇文章内,我们将着重介绍Redis的主从集群及哨兵机制。

由于Redis的主从同步是异步进行的,所以Redis主从集群不满足事务的一致性,同时Redis在主从网络不可用的情况下,主节点依旧可以提供服务,所以Redis主从集群满足事物的可用性。Redis只能保证数据的最终一致性

主从同步

Redis的主从同步主要是通过以下几种方式来进行同步的。

增量同步

增量同步,本质上是同步的主节点的修改指令。即Redis主节点将所有key的修改指令写入到一段定长的内存缓冲区中,然后将修改指令同步到从节点,同时从节点将指令执行情况(偏移量)反馈到主机节点,以此来进行主从同步。

注意:由于主节点的指令缓冲区是定长的,所以当缓冲区写满后,又会缓冲区起始位置开始覆盖写入新的指令。

快照同步

当某种原因(如主从网络延迟、从节点执行指令效率过低等)导致增量同步的数据不一致的时候,就需要快照同步来修复数据。快照同步首先需要将主节点上的数据进行一次bgsave,将内存数据全部持久化到磁盘,然后同过网络传输到从节点,写入从节点磁盘。从节点再使用快照加载数据,当数据加载完成后,从节点反馈给主节点,继续进行增量同步。

注意:当主节点的指令缓冲区设置过小时,会导致快照同步陷入死循环,因此主机节点的指令缓冲区一定要设置合理。

无盘复制

本质上相当于快照同步,只不过少了主节点数据写入磁盘的步骤,换成主节点内存数据直接写入从节点的磁盘,然后继续快照同步的后续操作 。

哨兵模式

什么是哨兵

在传统的Redis主从集群中,主节点一旦出现故障,需要人工介入干预,切换集群的主从节点,同时通知应用方,这无疑是无法接受的。令人高兴的是Redis从2.8版本之后,开始支持哨兵模式了,改变了传统的人肉运维方式。

哨兵的作用是什么

Sentinel(哨兵)主要负责持续监控Redis主从集群的健康,并负责实现主从集群的自动选主过程,同时将选主结果通知到客户端。

哨兵是如何完成主从集群选主的

哨兵模式主要分为哨兵节点和数据节点(图中的Master 和 Slave节点),一次完整的选主流程如下:

1. 在该模式下,客户端首先会遍历所有的哨兵,获取主节点信息,然后连接到主节点;

2. 在主从集群内部其运转如下:

2.1. 每个哨兵节点向所有数据节点发送每十秒钟一次的ping信息;

2.2. 若一个数据节点距离最后一次ping成功的时间超过预设值,则该节点被哨兵认为是主观下线

2.3. 当Master节点被标记为主观下线时,所有哨兵节点都会以每秒一次的频率确认Master是否真的进入了主观下线;

2.4. 当超过一定数量的哨兵都确认Master进入了主观下线后,Master会被标记为客观下线

2.5. 若在此过程中Master恢复了对哨兵ping请求的响应,Master会被移除主观下线标记;

2.6. 当Master被客观下线后,哨兵会从新选择合适的从节点升级为主节点;

2.7. 新的选主完成后,将重新所有节点的主从配置文件,同时所有从节点将从新的主节点同步数据;

2.8. 若选主流程的时间超过预设值后,选主将会失败;

3. 主从集群内部选主完成后,哨兵会利用Redis是Pub/Sub(发布/订阅)功能,通知客户端重新初始化连接池,连接到新的主节点。

Redis系列推荐

Redis03——Redis是如何删除你的数据的

Redis02——Redis内存数据如何保存到磁盘

Redis01——Redis究竟支持哪些数据结构

Redis04——五分钟明白Redis的哨兵模式的更多相关文章

  1. Redis-Sentinel Redis的哨兵模式

    Redis-Sentinel Redis的哨兵模式Redis Sentinel 模式简介Redis-Sentinel是官方推荐的高可用解决方案,当redis在做master-slave的高可用方案时, ...

  2. redis的哨兵模式

    我是在一台服务器上安装了三个redis  一主两从 想安装gcc gcc-c++ make tcl  lrzsz yum -y install gcc gcc-c++ make tcl  lrzsz ...

  3. redis主从+redis的哨兵模式

    三台机器分布 192.168.189.129  //  master的角色 192.168.189.130  //  slave1的角色 192.168.189.131  //  salve2的角色 ...

  4. redis主从+哨兵模式(借鉴)

    三台机器分布 192.168.189.129  //  master的角色 192.168.189.130  //  slave1的角色 192.168.189.131  //  salve2的角色 ...

  5. Redis进阶:Redis的哨兵模式搭建

    Redis进阶:Redis的哨兵模式搭建 哨兵机制介绍 单机版的Redis存在性能瓶颈,Redis通过提高主从复制实现读写分离,提高了了Redis的可用性,另一方便也能实现数据在多个Redis直接的备 ...

  6. redis架构~哨兵模式

    一 哨兵模式稳定版本  redis哨兵模式是redis自带的高可用框架,稳定版本为redis2.8以上二 哨兵模式建立  1 避免单点故障,建立启动多个哨兵进程  2 哨兵模式启动命令 redis-s ...

  7. Redis 16 哨兵模式

    参考源 https://www.bilibili.com/video/BV1S54y1R7SB?spm_id_from=333.999.0.0 版本 本文章基于 Redis 6.2.6 概述 主从切换 ...

  8. Redis sentinel 哨兵模式集群方案配置

    第一个方案是创建 redis cluster,第二种方案就是用哨兵模式来进行主从替换以及故障恢复.兵模式集群方案配置 一.sentinel介绍 Sentinel作用: 1):Master状态检测 2) ...

  9. Redis sentinel 哨兵模式

    一.sentinel介绍 Sentinel作用: 1):Master状态检测 2):如果Master异常,则会进行Master-Slave切换,将其中一个Slave作为Master,将之前的Maste ...

随机推荐

  1. FastDFS安装部署

    博主本人平和谦逊,热爱学习,读者阅读过程中发现错误的地方,请帮忙指出,感激不尽 服务器信息: Storage:192.168.247.20 Traker:192.168.247.21 一.搭建环境准备 ...

  2. python-django-fastdfs+Nginx的安装和配置_20191122

    python-django-fastdfs+Nginx的安装和配置 FastDFS文件系统 FastDFS文件系统简介: 是c语言编写的,是淘宝的架构师写的,存储淘宝的图片,后来开源了, fastDF ...

  3. 3dmax2015卸载/安装失败/如何彻底卸载清除干净3dmax2015注册表和文件的方法

    3dmax2015提示安装未完成,某些产品无法安装该怎样解决呢?一些朋友在win7或者win10系统下安装3dmax2015失败提示3dmax2015安装未完成,某些产品无法安装,也有时候想重新安装3 ...

  4. LeetCode Day 5

    LeetCode0005 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab& ...

  5. SPSS|Data|Transfer|Analysis|Label|One sample test|Testval|Criables|

    生物统计与实验设计-使用SPSS Data用于整合:Transfer用于预处理:Analysis用于数据的二维呈现:Label是在报表中呈现的名字: 给离散值编码: 对于离散值做数学计算: 均值比较用 ...

  6. Welcome to Fan Ouyang’s website!

    Welcome to Fan Ouyang's website! 欧阳璠,哲学博士,湖南娄底人. 目前为浙江大学教育学院课程与学习科学系教育技术专业百人计划研究员. 2013-2018年 明尼苏达大学 ...

  7. pycharm全局搜索快捷键无反应

    原因:和搜狗输入法的快捷键冲突

  8. python运算符和常用数据类型转换

    运算符 算术运算符 运算符 描述 实例 + 加 两个对象相加 a + b 输出结果 30 - 减 得到负数或是一个数减去另一个数 a - b 输出结果 -10 * 乘 两个数相乘或是返回一个被重复若干 ...

  9. 签章新的pom文件

    <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...

  10. Java中的字符串比较

    在C++中,两个字符串比较的代码可以为: (string1==string2) 但是在java中,这个代码即使在两个字符串完全相同的情况下也会返回 false ,Java中必须使用 string1.e ...