Redis高可用的方案有持久化、主从复制(及读写分离)、哨兵和集群。

主从复制

主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点,后者称为从节点;数据的复制是单向的,只能由主节点到从节点。默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。

主从复制的作用是:读写分离,可以由主节点提供写服务,由从节点提供读服务,这样来扩展主节点的读能⼒,分担主节点读压⼒ 、容灾恢复,⼀旦主节点宕机,从节点作为主节点的备份可以随时顶上来、主从复制还是哨兵和集群能够实施的基础。

主从复制同步数据的方式:

主从刚连接的时候,进⾏全量同步、全同步结束后,进⾏增量同步

全量复制:

用于初次复制或其他无法进行部分复制的情况,将主节点中的所有数据都发送给从节点。主服务器收到全量复制的命令后会执行bgsave开启⼀个后台进程⽤于将redis中的

数据⽣成⼀个rdb⽂件 ,主服务器会缓存所有接收到的来⾃客户端的写命令,当后台进程bgsave执行完成后,会将该rdb⽂件传递给从服务器从服务器会将rdb⽂件保存在磁盘并通过读取该⽂件将数据加载到内存 ,之后主服务器会将在此期间缓存的命令通过redis传输协议发送给从服务器然后从服务器将这些命令依次作⽤于⾃⼰本地的数据集上最终达到数据的⼀致性。

增量复制:

从服务器初始化后开始正常⼯作时主服务器发⽣的写操作同步到从服务器的过程。主服务器每执⾏⼀个写命令就会向从服务器发送相同的写命令,从服务器接收并执⾏收到的写命令

特点:

主从复制对于 主/从 redis服务器来说是⾮阻塞的,所以同步期间都可以正常处理外界请求

⼀个主redis可以含有多个从redis,每个从redis可以接收来⾃其他从redis服务器的连接

从节点不会让key过期,⽽是主节点的key过期删除后,成为del命令传输到从节点进⾏删除

哨兵(sentinel

主从复制虽然提高了数据的高可用性,但是存在的问题是遇到故障时不能自动恢复,比如一个主从服务中,一个服务器宕机了,那就得手动的将一台从服务器转换成主服务,这段时间内服务就得关闭,造成一段时间内服务不能够使用,影响了用户体验。而哨兵就能解决故障恢复无法自动化的问题。

哨兵通过发送命令给多个节点,等待Redis服务器响应,监控运⾏的多个Redis实例的运⾏情况当哨兵监测到主服务宕机,会⾃动选取其中一台从服务器切换成主服务,通知其它的从服务器并修改配置⽂件。

哨兵的三个作用:

监控((Monitoring):监控主从节点是否正常运行及其运行情况

通知:(Notification): 当哨兵监测到某个节点出现问题时,哨兵会通过API向其他应用程序发送通知

自动转移故障(Automatic failover):当检测到主节点宕机后,断开与宕机主节点连接的所有从节点,在从节点中选取一个作为主节点,然后将其他的从节点连接到这个最新主节点的上。当客户端试图连接失效的主服务器时,集群也会向客户端返回新主服务器的地址, 使得集群可以使⽤新主服务器代替失效服务器

注意:哨兵也是一台 Redis 服务器,只是不对外提供任何服务

哨兵相关配置:

sentinel auth-pass masterName password

sentinel auth-pass定义服务的密码

sentinel monitor {masterName} {masterIp} {masterPort} {quorum}

masterName指定了主节点名称,masterIp和masterPort指定了主节点地址,quorum是判断主节点客观下线的哨兵数量阈值:当判定主节点下线的哨兵数量达到quorum时,对主节点进行客观下线。

sentinel down-after-milliseconds {masterName} {time}

sentinel down-after-milliseconds与主观下线的判断有关:哨兵使用ping命令对其他节点进行心跳检测,如果其他节点超过down-after-milliseconds配置的时间没有回复,哨兵就会将其进行主观下线。down-after-milliseconds的默认值是30000,即30s;可以根据不同的网络环境和应用要求来调整:值越大,对主观下线的判定会越宽松,好处是误判的可能性小,坏处是故障发现和故障转移的时间变长,客户端等待的时间也会变长。

sentinel failover-timeout {masterName} {time}

sentinel failover-timeout与故障转移超时的判断有关,但是该参数不是用来判断整个故障转移阶段的超时,而是其几个子阶段的超时,例如如果主节点晋升从节点时间超过timeout,或从节点向新的主节点发起复制操作的时间(不包括复制数据的时间)超过timeout,都会导致故障转移超时失败。failover-timeout的默认值是180000;如果超时,则下一次该值会变为原来的2倍。

sentinel哨兵核心流程:

Sentinel会每秒Ping一下监测节点是否能够正常运行,超过时间不响应,则认为主观下线。Sentinel 在给定的时间范围内,从其他 Sentinel 那 ⾥接收到了⾜够数量的主服务器下线报告,那么 Sentinel 就会将主服务器的状态从主观下线改变 为客观下线。之后投票选择主节点,如果没有⾜够的节点同意master下线,则状态会被移除。

主观下线:⼀个服务器没有在 down-after-milliseconds 选项所 指定的时间内, 对向它发送 PING 命令的 Sentinel 返回⼀个有效回复(valid reply)哨兵节点就会将其进行主观下线。

客观下线:哨兵节点在对主节点进行主观下线后,会通过sentinel is-master-down-by-addr命令询问其他哨兵节点该主节点的状态;如果判断主节点下线的哨兵数量达到一定数值,则对该主节点进行客观下线。

集群(Cluster)

前面我们用Sentinel解决了主从复制故障不能自动迁移的问题,但是主节点的写性能和存储能力依然是受到了Redis单机容量有限的限制,所以使用Redis集群去解决这个问题,将Redis的数据根据一定的规则分配到多台机器。

集群(Cluster)

Cluster模式是Redis3.0开始推出,由多个节点群组成的分布式服务集群,Redis的数据分布在这些节点中。集群不需要Sentinel哨兵也可以完成故障自动迁移。 使用集群时需要将redis配置文件中的cluster-enabled 配置打开。 采⽤⽆中⼼结构,每个节点保存数据和整个集群状态, 各个节点会互相通信,采⽤gossip协议交换节点元数据信息,每个节点都和其他所有节点连接 。一个集群⾄少需要6个节点才可以保证⾼可⽤,即3主3从。

原理:

redis cluster集群采⽤数据分⽚中的哈希槽来进⾏数据存储与读取的,Cluster会预分好16384个槽,每个节点负责其中的一部分槽位。当需要在 Redis 集群中放置⼀个数据时,Cluster默认会根据 CRC16算法CRC16(key) mod 16384 的值,决定将⼀个key放到哪个槽位中。

常见的配置:

cluster-enabled yes:开启集群模式(cluster);

cluster-config-file:该参数指定了集群配置文件的位置,记录集群节点信息。以集群模式启动时,会首先寻找是否有集群配置文件,如果有则使用文件中的配置启动,如果没有,则初始化配置并将配置保存到文件中

cluster-node-timeout time:节点连接超时时间

cluster-announce-ip ip:集群节点的ip,当前节点的ip

cluster-announce-port port:集群节点映射端⼝

若有不对之处还希望指正为谢!@~@

引用:《Redis设计与实现》、《Redis实战》

Redis基础学习(2)相关推荐

  1. Redis基础学习记录(1)

    最近因为一些原因用到Redis不得不学一点,就想着记录一下学习的印记.若有不对的地方还望指出为谢. Redis (REmote DIctionary Server) 是用 C 语言开发的一个开源的高性 ...

  2. Redis基础学习(四)—Redis的持久化

    一.概述 Redis的强大性能很大程度上都是因为数据时存在内存中的,然而当Redis重启时,所有存储在内存中的数据将会丢失,所以我们要将内存中的数据持久化. Redis支持两种数据持久化的方式: RD ...

  3. redis基础学习(一)— 配置项

    输入redis-cli进入redis 1.查询配置项命令: CONFIG GET 配置项名称 2.设置配置项命令: CONFIG SET 配置项名称  "设置值" 3.配置项说明: ...

  4. Redis基础-下载安装、配置、数据类型、指令、Jedis、持久化

    Redis基础 学习计划 1. Redis入门 (了解) (操作) 2. 数据类型 (重点) (操作) (理解) 3. 常用指令 (操作) 4. Jedis (重点) (操作) 5. 持久化 (重点) ...

  5. Redis基础入门及五大数据结构API使用

    Redis基础学习笔记 入门 中文网 基于Linux搭建学习 Linux安装Redis 上传到linux,移动到opt目录 tar -zcvf ....gz解压 进入配置 使用命令make–>m ...

  6. redis基础命令和数据操作命令学习笔记

    redis基础命令和数据操作命令学习笔记 基础命令 安装成功后,redis的启动命令:先修改配置文件.将服务改成默认运行.然后以配置文件启动服务 redis-server config/redis-c ...

  7. 20200624SparkStreaming学习笔记+redis基础

    数据可视化 Spring Boot整合Echarts动态获取HBase的数据 1) 动态的传递进去当天的时间     a) 在代码中写死     b) 让你查询昨天的.前天的咋办?         在 ...

  8. 【超全必看】Redis基础入门学习笔记(附示例代码)

    Redis简介 许多网站在海量用户访问的高并发情况下出现崩溃问题,根本原因是关系型数据库. 关系型数据库的缺点 性能瓶颈:磁盘IO性能低下 扩展瓶颈:数据关系复杂,扩展性差,不便于大规模集群 解决思路 ...

  9. redis学习(1)之redis基础和配置主从

    redis介绍 redis介绍 为什么会出现redis呢? redis特性 速度快 基于key-value 丰富的功能 简单稳定 支持的语言多 持久化 主从复制 redis应用场景 缓存 排行榜系统 ...

最新文章

  1. 最近面试了一位4年的Java,什么都不知道!还自认为很牛逼...
  2. 7-3 逆序的三位数 (Java)
  3. 雷达篇(八)合成孔径雷达工作模式
  4. Java业务逻辑pyqt_PyQt5 UI界面与业务逻辑分离
  5. TypeError: unhashable type: 'numpy.ndarray'
  6. 重磅推荐,计算机视觉开源周报20191003期
  7. appium定位元素java篇【转】
  8. 如何避免成为新技术背后的“奶嘴一族”
  9. 【滑动窗口】leetcode209:长度最小的子数组
  10. linux命令 语法 pdf,Linux命令详解词典pdf
  11. Java进阶之计算机组成原理概述
  12. java中实现注册时Email邮件激活验证
  13. 未转变者服务器怎么弄指令权限,未转变者基础指令
  14. 区块链技术应用场景有哪些?
  15. 我的七个建议 作者:Joel Spolsky
  16. 一、入门Python第一课
  17. [Matlab]二维隐函数绘图
  18. FOC:在MCU上检验Clark和Park坐标变换是否正确
  19. 基于CST相控阵天线快速设计方法
  20. MetaQ安装部署文档

热门文章

  1. NOIP2002-普及组复赛-第三题-选数
  2. CCF201612-5 卡牌游戏(募集解题代码)
  3. HDU1880 魔咒词典【文本处理】
  4. UVA10666 The Eurocup is Here!【数学模式】
  5. UVA10733 The Colored Cubes【Polya定理】
  6. Bailian3858 和数【暴力+集合】
  7. Bailian4067 回文数字(Palindrome Number)【数学】
  8. Bailian2744 子串【字符串】
  9. 一题多解 —— 判断一个数是否为奇数
  10. 机器学习套路 —— 样本集的拆分(正样本、负样本)