文章目录

  • 集群
    • 1 主从复制
      • 1.1 建立连接阶段
      • 1.2 数据同步阶段
      • 1.3 命令传播阶段
    • 2 哨兵
      • 2.1 监控阶段
      • 2.2 通知阶段
      • 2.3 故障转移阶段
    • 3 集群

集群

1 主从复制

为提高系统可用性,使用多台服务器提供服务

主从复制:将master中的数据即时、有效的复制到slave中

如果master宕机了,可以临时推选一个slave当选master

作用

  • 读写分离
  • 负载均衡
  • 故障恢复
  • 数据冗余,实现数据热备份
  • 高可用基石

工作流程

  1. 建立连接阶段
  2. 数据同步阶段
  3. 命令传播阶段

1.1 建立连接阶段

// 连接方式1:客户端发送命令
slaveof <masterip> <masterport>
// 连接方式2:启动时加服务器参数
redis-server --slaveof <masterip> <masterport>
// 连接方式3:配置文件增加服务器配置
slaveof <masterip> <masterport>// 断开连接,客户端发送命令
slaveof no one

1.2 数据同步阶段

1.3 命令传播阶段

命令传播阶段出现了断网现象

  • 网络闪断闪联:忽略
  • 短时间网络中断:部分复制
  • 长时间网络中断:全量复制

部分复制的三个核心要素

  • 服务器的运行id:是每一台服务器每次运行的身份识别码,是随机的40位十六进制字符。用于slave识别身份,每次操作同一台服务器。id由服务器在启动时自动生成,首次连接slave时会发送给slave
  • 主服务器的复制积压缓冲区:FIFO队列,用于存储服务器执行过程中的命令,每次传播命令除了会发送给slave,还会存储在复制积压缓冲区
  • 主从服务器的复制偏移量:复制积压缓冲区由偏移量和字节值(存储指令)组成,offerset用于slave和master记录当前发送的命令到哪个位置

心跳机制,实现双方连接在线

  • master心跳:指令ping,用于判断slave是否在线
  • slave心跳:指令replconf ACK {offset},用于判断master是否在线和汇报自己的复制偏移量,获取最新数据

2 哨兵

哨兵是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现故障时通过投票机制选择新的master并讲所有slave连接到新的master

哨兵也是redis服务器,通常配置为单数

作用

  • 监控:不断检查master和slave是否正常运行
  • 通知:当被监控的服务器出现问题时,向其他客户端发送通知
  • 自动故障转移:断开master与slave连接,选取一个新的slave作为master
// 启动哨兵
redis-sentinel sentinel.conf// 哨兵配置文件
// 2个哨兵觉得主服务器挂了就是真的挂了
sentinel monitor mymaster 127.0.0.1 6379 2
// 主服务器30s没相应,认定为挂了
sentinel down-after-milliseconds mymaster 30000
// 新的主服务器上任后,最多1个同步
sentinel parallel-syncs mymaster 1
// 同步超过180s算作超时
sentinel failover-timeout mymaster 180000

2.1 监控阶段

  1. sentinel向master发送info指令寻求信息(包含master和slave的信息)
  2. sentinel与master建立cmd连接用于发送通信指令
  3. sentinel向slave发送info指令寻求信息
  4. 当新的sentinel进来之后,同样向master发送info指令寻求信息,并建立cmd连接
  5. 新的sentinel与原先的sentinel定时发送ping命令并建立连接
  6. 一般情况下,sentinel以每十秒一次的频率向被监视的主服务器和从服务器发送info指令。如果主服务器处于下线状态,或正在故障转移,则对从服务器发送info指令的频率改为每秒一次
  7. 多个sentinel之间以每两秒一次的频率向hello频道发送消息来向其他sentinel宣告自己的存在
  8. sentinel以每秒一次的频率向主服务器、从服务器、其他sentinel发送ping命令判断是否在线

2.2 通知阶段

2.3 故障转移阶段

  1. 当其中的一个sentinel发现master挂了的时候,master标记为主观下线s_down
  2. 其他sentinel会去确认master是否挂了,如果是则master标记为客观下线o_down
  3. sentinel内部进行投票,每个sentinel投给最先收到竞选消息的sentinel,选出一个谈判者
  4. sentinel挑选备选master,依次按照在线的、响应快的、与原master最近沟通的、优先级、offset、runid小的,从slave中选择一个新master
  5. 向新master发送slaveof no one指令,向其他slave发送slaveof和新master的ip端口

3 集群

集群通过分片的方式来保存数据库中的键值对:数据库被分为16384个槽(将key通过hash计算再取模上一个值,得出存储的槽),每个节点可以处理其中的一部分槽,强调分布式,每个服务器之间都知道key所对应的槽在哪个服务器

重新分片:将属于某个槽的所有键值对从一个节点转移至另一个节点

执行命令

  • 如果键所在的槽在当前节点,那么直接执行命令,否则返回一个MOVED错误,指引客户端重定向至正确的节点,并再次发送命令
  • 当客户端向源节点发送命令,但是当前槽正好被迁移至别的数据库时,返回一个ASK错误,指引客户端转向正在导入槽的目标节点,并再次发送命令

MOVEN错误和ASK错误的区别

  • MOVED错误代表槽的负责权已经从一个节点转向另一个节点:在客户端收到MOVED错误之后,以后每次收到这个槽的命令,都可以直接将命令发送至正确的服务器上
  • ASK错误只是在两个节点正在迁移槽的过程中使用的临时措施:在客户端收到ASK错误之后,只会在接下来一次命令中将请求转向正确的服务器,不会对以后的命令产生影响
// 与ip和port所指定的节点握手,连接到对应的集群中
cluster meet <ip> <port>
// 将某个槽指派给当前节点
cluster addslots <slot> [slot ...]
// 查看一个键属于哪个槽
cluster keyslot <key>// cluster配置// 是否开启集群模式
cluster-enabled yes|no
// cluster配置文件名,该文件自动生成
cluster-config-file <filename>
// 节点服务器响应超时时间
cluster-node-timeout <milliseconds>
// master连接的slave最小数量
cluster-migration-barrier <count>

消息

  • MEET消息:当发送者接收到客户端的CLUSTER MEET命令后,发送者会发送MEET消息,请求接收者加入发送者当前集群
  • PING消息:集群里每隔节点每隔一段时间会发送PING消息检测别的节点是否在线
  • PONG消息:接收者收到MEET消息或者PING消息时,会回复一条PONG消息
  • FAIL消息:当一个主节点旁段另一个主节点进入FAIL状态时,会广播一条关于另一个节点FAIL的消息,其他节点会标记它下线
  • PUBLISH消息:当一个节点收到PUBLISH命令时,会向集群广播一条PUBLISH命令,所有接收到这条命令的节点都会执行相同的PUBLISH命令

Redis基础(八)——集群相关推荐

  1. Redis 主从及集群

    Redis 系列笔记: 第一篇:Redis 基础命令 第二篇:Redis 常见应用场景 第三篇:Redis Cluster集群搭建 第四篇:Redis 主从及哨兵搭建 第五篇:Redis 主从及集群 ...

  2. redis 登录_Redis集群架构+Dubbo开发框架+SSO单点登录+Nginx+ZooKeeper

    Redis集群架构 [课程介绍] Redis是现在使用为广泛的NoSQL数据库技术,其自身不仅拥有着良好的操作性能,也被广泛的应用于各种集群架构的数据整合处理之中,而本课程将通过Redis的核心作用, ...

  3. 用Redis存储Tomcat集群的Session

    用Redis存储Tomcat集群的Session 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 前段时间,我花了不少时间来寻求一种方法,把新开发的代码推 ...

  4. Redis 3种集群方式,别傻傻分不清!

    文章目录 Redis 3种集群方式,别傻傻分不清! 1 redis 主从模式配置 前言 redis 主从模式配置 首先更改配置文件 (redis.windows.conf ) 配置主从配置 (redi ...

  5. Redis高可用集群-哨兵模式(Redis-Sentinel)搭建配置教程【Windows环境】

    ================================================= 人工智能教程.零基础!通俗易懂!风趣幽默!大家可以看看是否对自己有帮助! 点击查看高清无码教程 == ...

  6. Redis几种集群模式

    此文由转载 https://blog.csdn.net/wy0123/article/details/79583506 现在越来越多的项目都会利用到redis,多实例redis服务比单实例要复杂的多, ...

  7. redis 主从 哨兵 集群 及原理

    1.主从哨兵 1.主从哨兵架构图: 此图为最常见的一主两从结构,一个master主机,两个slave主机.每台主机上都运行着两个进程: redis-server 服务,处理redis正常的数据操作与响 ...

  8. redis 04:Redis高可用集群

    文章目录 一.Redis集群方案比较 二.Redis高可用集群搭建 三.Java操作redis集群 四.Redis集群原理分析 五.集群伸缩 5.1 集群扩展 5.1 缩容集群 六.总结 以下参考了图 ...

  9. redis 主从 哨兵 集群部署

    介绍 Redis是当前比较热门的NOSQL系统之一,它是一个key-value存储系统.和Memcache类似,但很大程度补偿了Memcache的不足,它支持存储的value类型相对更多,包括stri ...

  10. 降本40%!Redis多租户集群的容器化实践

    本文转载自dbaplus社群 本文根据石鹏老师在[deeplus直播第260期]线上分享演讲内容整理而成.(文末有获取本期PPT&回放的方式,不要错过) 石鹏 VIPKID基础架构存储平台负责 ...

最新文章

  1. javascript运动系列第二篇——变速运动
  2. SQLite 入门教程(一)基本控制台(终端)命令
  3. git 2.30.1最新版本的使用
  4. 隐写术写在简历上面_隐写术用纯英语解释
  5. 老外用的文件服务器,云存储服务市场乱战 老外到底都用啥
  6. 生物信息服务器集群,IBM刀片服务器集群推动生物信息研究
  7. 运动世界校园显示服务器异常,运动世界校园为什么成绩异常 成绩异常相关
  8. 三年级计算机上册期末测试题,三年级上册期末试卷
  9. 2022年(2023届)西电计算机保研经历分享(清深、自所、计算所、浙科南、北航、哈工等)
  10. 联想Y430p win8.1装win7双系统
  11. leetcode系列-链表
  12. 288. Unique Word Abbreviation
  13. 2.Conv2d实现
  14. Vue源码之计算属性watcher
  15. 安装quagga(虚拟路由器)
  16. 【小西】优化若依导出功能,若依继承导出
  17. Chrony与NTP对比
  18. Minecraft开服器(Python编写)
  19. 60+CSS技巧教程资源大全
  20. firefox无法使用yslow的解决方案

热门文章

  1. 四、mysql数据常用命令
  2. Java笔试面试题001
  3. 12.Bridge-桥接模式
  4. 程序员如何探索新技术
  5. 项目开发中自定义字段设计原则
  6. 考英语四级误用六级题 千余考生困教室4个小时
  7. 基于Servlet3.0的编程式SpringMVC实例详解
  8. Web开发——HTML基础(HTML表单/下拉列表/多行输入)
  9. JAVA_SE基础——46.引用数据类型变量.值交换[独家深入解析]
  10. Step by Step 使用HTML5开发一个星际大战游戏(1)