redis入门到精通系列(九):redis哨兵模式详解

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 前面我们讲了redis的主从复制,为了实现高可用,会选择一台服务器作为master,多台服务器作为slave。现在有这样一种情况,master宕机了,这时系统会选择一台slave作为master,然后把宕机的master下线,再通知所有slave新的master是谁。这里就产生了一个问题,master是否宕机、选择哪台slave作为master都是谁来决定的?

点赞再看,养成习惯,听说微信搜《Java鱼仔》会让自己的技术更上一层楼


(一)哨兵概述


前面我们讲了redis的主从复制,为了实现高可用,会选择一台服务器作为master,多台服务器作为slave。现在有这样一种情况,master宕机了,这时系统会选择一台slave作为master,然后把宕机的master下线,再通知所有slave新的master是谁。这里就产生了一个问题,master是否宕机、选择哪台slave作为master都是谁来决定的?


在主从复制中由哨兵(sentinel)来完成这些操作,哨兵是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现故障时通过投票机制选择新的master。

哨兵也是一台redis服务器,通常配置哨兵数量为单数(竞选时避免打平)。


(二)哨兵的作用


1.监控:不断检查master和slave是否正常运行;master存活检测;master与slave运行情况检测


2.通知:当被检测服务器出现问题时,向其他哨兵和客户端发送通知


3.自动故障转移:端开master和slave连接,选取一个新的slave为master,将其他slave连接到新的master上


(三)哨兵的工作原理


3.1 监控阶段


监控是哨兵的作用之一,监控是为了同步各个节点的状态信息


1.获取其他各个哨兵的状态(是否在线),通过ping命令


2.获取master的状态,主要包括master的runid,各个slave的详细信息等等,通过info指令


3.获取所有的slave的状态(根据master中的slave信息),主要包括slave的runid,role,host,offset等等。


当两个sentinel分别获取到master或slave的监控信息后,为了数据的同步会相互交流数据,同样当第三个sentinel获得监控信息后,也会和另外两个sentinel互相同步数据。


3.2 通知阶段


通知阶段主要是各个sentinel的相互交流,假设一个系统有三个sentinel,当sentinel1询问主从服务器状态并且得到回复之后,他会他消息告诉sentinel2和sentinel3。同样的当sentinel2得到消息后也会告诉1和3。使得数据始终同步。


3.3 故障转移阶段


当一台master宕机了,这就进入了故障转移阶段。


1.首先一个sentinel发现给master不回应消息,于是把这个master的状态设置为sdown,并通知给其他的sentinel。其他的sentinel就会发送hello给该master,当一半以上(可以设置)的sentinel觉得这个master确实宕机了,于是master的状态就被设置为odown,这就进入了第二步。


2.既然master宕机了,那就需要选举新的master,哪个sentinel去选择master,需要经过sentinel内部的投票机制来实现。当选出去执行找出新master的sentinel后,进入第三步。


3.sentinel从slave中选择一个当成新的master有以下原则 淘汰未在线的 淘汰响应慢的 淘汰与原master断开时间久的 最终在剩下的slave中根据优先级,offset等选择一台成为新master


4.sentinel向新的master发送指令:


slaveof no one

向其他slave发送指令

slaveof 新masterIP 端口

(四)哨兵的操作


关于哨兵的操作建议在linux服务器下操作

开启哨兵:

redis-sentinel sentinel.conf (配置的文件名自定义)

配置文件

port 26379  
dir /tmp
sentinel monitor mymaster 127.0.0.1 6379 2  #设置哨兵监控的主机为127.0.0.1:6379,当2台哨兵认为宕机后则认为该主机宕机
sentinel down-after-milliseconds 30000   #连接多长时间未响应就认为被监控服务器宕机
parallel-syncs mymaster 1  #指定了在执行故障转移时, 最多可以有多少个从服务器同时对新的主服务器进行同步
failover-timeout mymaster 180000  #指定了故障转移的同步超时时间

sentinel monitor mymaster 127.0.0.1 6379 2:127.0.0.1 6379表示该哨兵监控的对象,其中mymaster是自己定义的一个名字,最后一位2表示当有2个哨兵认为这个被监控服务器宕了,就确认该服务器宕机。这一位的取值往往是哨兵数量/2+1,即一半以上。 当主机宕机后,哨兵会自动从从机中选出一台当成主机


网络异常,图片无法展示
|



相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
17天前
|
存储 NoSQL Redis
SpringCloud基础7——Redis分布式缓存,RDB,AOF持久化+主从+哨兵+分片集群
Redis持久化、RDB和AOF方案、Redis主从集群、哨兵、分片集群、散列插槽、自动手动故障转移
SpringCloud基础7——Redis分布式缓存,RDB,AOF持久化+主从+哨兵+分片集群
|
2月前
|
SQL 存储 NoSQL
Redis6入门到实战------ 一、NoSQL数据库简介
这篇文章是关于NoSQL数据库的简介,讨论了技术发展、NoSQL数据库的概念、适用场景、不适用场景,以及常见的非关系型数据库。文章还提到了Web1.0到Web2.0时代的技术演进,以及解决CPU、内存和IO压力的方法,并对比了行式存储和列式存储数据库的特点。
Redis6入门到实战------ 一、NoSQL数据库简介
|
2月前
|
NoSQL 算法 安全
Redis6入门到实战------ 四、Redis配置文件介绍
这篇文章详细介绍了Redis配置文件中的各种设置,包括单位定义、包含配置、网络配置、守护进程设置、日志记录、密码安全、客户端连接限制以及内存使用策略等。
Redis6入门到实战------ 四、Redis配置文件介绍
|
2月前
|
NoSQL Redis 数据安全/隐私保护
Redis6入门到实战------ 二、Redis安装
这篇文章详细介绍了Redis 6的安装过程,包括下载、解压、编译、安装、配置以及启动Redis服务器的步骤。还涵盖了如何设置Redis以在后台运行,如何为Redis设置密码保护,以及如何配置Redis服务以实现开机自启动。
Redis6入门到实战------ 二、Redis安装
|
2月前
|
NoSQL Java Redis
Redis6入门到实战------思维导图+章节目录
这篇文章提供了Redis 6从入门到实战的全面学习资料,包括思维导图和各章节目录,涵盖了NoSQL数据库、Redis安装配置、数据类型、事务、持久化、主从复制、集群等核心知识点。
Redis6入门到实战------思维导图+章节目录
|
2月前
|
NoSQL 安全 Java
Redis6入门到实战------ 三、常用五大数据类型(字符串 String)
这篇文章深入探讨了Redis中的String数据类型,包括键操作的命令、String类型的命令使用,以及String在Redis中的内部数据结构实现。
Redis6入门到实战------ 三、常用五大数据类型(字符串 String)
|
2月前
|
NoSQL 关系型数据库 Redis
Redis6入门到实战------ 九、10. Redis_事务_锁机制_秒杀
这篇文章深入探讨了Redis事务的概念、命令使用、错误处理机制以及乐观锁和悲观锁的应用,并通过WATCH/UNWATCH命令展示了事务中的锁机制。
Redis6入门到实战------ 九、10. Redis_事务_锁机制_秒杀
|
2月前
|
NoSQL Java Redis
Redis6入门到实战------ 八、Redis与Spring Boot整合
这篇文章详细介绍了如何在Spring Boot项目中整合Redis,包括在`pom.xml`中添加依赖、配置`application.properties`文件、创建配置类以及编写测试类来验证Redis的连接和基本操作。
Redis6入门到实战------ 八、Redis与Spring Boot整合
|
2天前
|
NoSQL 网络协议 Redis
Redis的主从复制和哨兵模式
本文详细介绍了Redis的主从复制配置、原理(包括全量复制和增量复制)以及如何搭建一主二从的Redis集群,同时还探讨了Redis哨兵模式的概念、配置文件、以及如何配置一主二从三哨兵的Redis哨兵模式,以实现高可用性。
下一篇
无影云桌面