目录
Redis哨兵(sentinel)
哨兵是什么?
干什么?
案例
架构
步骤
安装三台linux
配置三台哨兵
sentinel02
测试
模拟master宕机
对比配置文件
哨兵运行流程和选举原理
SDown主观下线(Subjectively Down)
ODown客观下线(Objectively Down)
选举出领导者哨兵
领导者哨兵如何选出来的?
选新的master(im)
新主登基
群臣俯首
旧主拜服
哨兵使用建议
首页 数据库 Redis 深入搞懂Redis中的哨兵

深入搞懂Redis中的哨兵

Apr 26, 2023 pm 05:59 PM
redis 数据库 后端

Redis哨兵详解,哨兵搭建流程,哨兵的运行流程和选举原理(主观下线,客观下线,如何选举出哨兵leader)。

深入搞懂Redis中的哨兵

Redis哨兵(sentinel)

哨兵是什么?

吹哨人巡查监控后台master主机是否故障,如果故障了根据投票数自动将某一个从库转换为新主库,继续对外服务。【相关推荐:Redis视频教程

俗称,无人值守运维。

干什么?

  • 主从监控:监控主从redis库运行是否正常
  • 消息通知:哨兵可以将故障转移的结果发送给客户端
  • 故障转移:将其中一个Slave作为新的Master
  • 配置中心:客户端通过连接哨兵来获得当前Redis服务的主节点地址

案例

架构

3个哨兵:自动监控和维护集群,不存放数据,只是吹哨人。

1主2从:用于读取和存放数据

202304010855603.png

步骤

  • 将redis安装路径下的 sentinel.conf 拷贝到 myredis目录下

    cp sentinel.conf /myredis/sentinel26379.conf
    登录后复制
  • 修改配置文件

    vim sentinel26379.conf
        
    bind 0.0.0.0
        
    # protected-mode yes 修改为 protected-mode no
    protected-mode no
    
    # daemonize no 修改为 daemonize yes
    daemonize yes
    
    # port 
    port 26379
    
    # pid文件名字,pidfile
    pidfile /var/run/redis_26379.pid
        
    # log文件名字,logfile(修改 logfile "" 为 logfile "/myredis/26379.log")
    logfile "/myredis/26379.log"
    
    # 指定当前的工作目录(修改 dir /temp 为 dir /myredis)
    dir /myredis
    登录后复制

    设置要监控的master服务器

    quorum:确认客观下线的最少哨兵数量。同意故障迁移的法定票数。

    # sentinel monitor <master-name> <ip> <redis-port> <quorum>
    登录后复制

    设置连接master服务的密码

    # sentinel auth-pass <master-name> <password>
    登录后复制

    我们知道,网络是不可靠的,有时候一个sentinel会因为网络堵塞而误以为一个master redis已经死掉了,在sentinel集群环境下需要多个sentinel互相沟通来确认某个master是否真的死了,quorum这个参数是进行客观下线的一个依据,意思是至少有quorum个sentinel认为这个master有故障,才会对这个master进行下线以及故障转移。因为有的时候,某个sentinel节点可能因为自身网络原因,导致无法连接master,而此时master并没有出现故障,所以,这就需要多个sentinel都一致认为该master有问题,才可以进行下一步操作,这就保证了公平性和高可用。

安装三台linux

ip和port分别为

# sentinel00
192.168.157.112    26379
# sentinel01
192.168.157.113    26380
# sentinel02
192.168.157.118    26381
登录后复制

配置三台哨兵

sentinelxxxx.conf 文件

sentinel00

sentinel26379.conf

bind 0.0.0.0
daemonize yes
protected-mode no
port 26379
logfile "/myredis/sentinel26379.log"
pidfile /var/run/redis-sentinel26379.pid
dir /myredis
sentinel monitor mymaster 192.168.157.115 6379 2
sentinel auth-pass mymaster 1234
登录后复制

sentinel01

sentinel26380.conf

bind 0.0.0.0
daemonize yes
protected-mode no
port 26380
logfile "/myredis/sentinel26380.log"
pidfile /var/run/redis-sentinel26380.pid
dir /myredis
sentinel monitor mymaster 192.168.157.115 6379 2
sentinel auth-pass mymaster 1234
登录后复制

sentinel02

sentinel26381.conf

bind 0.0.0.0
daemonize yes
protected-mode no
port 26381
logfile "/myredis/sentinel26381.log"
pidfile /var/run/redis-sentinel26381.pid
dir /myredis
sentinel monitor mymaster 192.168.157.115 6379 2
sentinel auth-pass mymaster 1234
登录后复制

测试

  • 基于之前的 redis复制,启动1主2从测试是否主从复制是否正常,输入 info replication 查看是否正常

  • 启动三台哨兵,完成监控

    redis-sentinel /myredis/sentinel26379.conf --sentinel
    redis-sentinel /myredis/sentinel26380.conf --sentinel
    redis-sentinel /myredis/sentinel26381.conf --sentinel
    登录后复制
  • 测试主从复制,一切良好

  • 查看日志

202304011721679.png

  • 查看配置文件 sentinel.conf

202304011826583.png

> 后面为自动新增内容
登录后复制

-

模拟master宕机

  • master主机

    # 模拟宕机
    shudown
    登录后复制

    问题

    1. 两台从机数据是否正常?(yes)
    2. 会不会从剩下的两台机器中选出新的master?(yes)
    3. 之前的master重启之后会不会重新上位,重新成为master?(no)
  • salve获取数据

202304011832816.png

  • 查看新的master

202304011834404.png

  • 重写启动原master

    master不会重新上位。

202304011841757.png

对比配置文件

文件的内容,在运行期间会被sentinel动态修改。master—slave主从关系切换后,配置文件内容会自动发生改变。

  • sentinel6379.conf 文件

202304011847201.png

  • 旧 master

202304011849202.png

  • 新master

202304011851925.png

202304011853295.png

哨兵运行流程和选举原理

当一个主从配置中的master失效后,sentinel可以选举出一个新的master用于自动替换原master的工作,主从配置中的其他redis服务自动指向新的master同步数据,一般建议sentinel采取奇数台,防止某一台sentinel无法连接到master导致误切换。

SDown主观下线(Subjectively Down)

SDOWN(主观不可用)是单个哨兵自己主观检测到的关于master的状态,从sentinel的角度来看,如果发送了PING心跳后,在一定时间内没有收到合法的回复,就到达了SDOQN的条件。

sentinel配置文件中的 down-after-milliseconds 设置了主观下线的时间长度(默认30秒)。

# sentinel down-after-milliseconds <masterName> <timeout>
sentinel down-after-milliseconds mymaster 30000
登录后复制

ODown客观下线(Objectively Down)

ODOWN需要一定数量的sentinel,多个哨兵达成一致意见才能确认一个master客观上已经宕机了。

# sentinel monitor <master-name> <ip> <redis-port> <quorum>
sentinel monitor mymaster 127.0.0.1 6379 2
登录后复制

选举出领导者哨兵

当主节点被判断客观下线后,各个哨兵节点会进行协商,先选举出一个领导者哨兵节点,并由该领导者哨兵节点进行failover(故障迁移)

领导者哨兵如何选出来的?

Raft算法

监视该主节点的所有哨兵都有可能被选为领导者,选举使用的算法是Raft算法;Raft算法的基本思路是先到先得,即在一轮选举中,哨兵A向B发送成为领导者的申请,如果B没有同意过其他哨兵,则会同意A成为领导者。

202304011935310.png

选新的master(im)

整个过程由sentinel自己独立完成,无需人工干涉。

新主登基

某一个slave被选中成为master

选出新的master的规则,剩余slave节点健康的前提下

  1. redis.conf文件中,优先级slave-priority或者replica-priority最高节点(数字越小优先级越高)
  2. 复制偏移量offset最大的从节点。
  3. 最小Run ID的从节点。

202304012011553.png

群臣俯首

  • 执行 slaveof no one 命令让选出来的从节点成为新的主节点,并通过 slaveof 命令让其他节点成为其从节点。

  • sentinel leader 会对选举出来的新 master 执行 slaveof no one,将其提升为master节点

  • sentinel leader 向其他slave发送命令,让剩余的slave成为新的master节点的slave。

旧主拜服

  • 将之前的已经下线的旧master设置为新选出的新master的从节点,当旧master重新上线后,它会成为新master的从节点
  • sentinel leader 会让原来的master降级为slave并恢复正常工作。

哨兵使用建议

  • 哨兵节点数量应该为多个,哨兵本身应该为集群,保证高可用
  • 哨兵节点数量应该是奇数
  • 各个哨兵节点的配置应该一致
  • 如果哨兵节点部署在docker等容器里面,尤其要注意端口的正确映射
  • 哨兵集群 + 主从复制,并不能保证数据零丢失

更多编程相关知识,请访问:编程视频!!

以上是深入搞懂Redis中的哨兵的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

redis集群模式怎么搭建 redis集群模式怎么搭建 Apr 10, 2025 pm 10:15 PM

Redis集群模式通过分片将Redis实例部署到多个服务器,提高可扩展性和可用性。搭建步骤如下:创建奇数个Redis实例,端口不同;创建3个sentinel实例,监控Redis实例并进行故障转移;配置sentinel配置文件,添加监控Redis实例信息和故障转移设置;配置Redis实例配置文件,启用集群模式并指定集群信息文件路径;创建nodes.conf文件,包含各Redis实例的信息;启动集群,执行create命令创建集群并指定副本数量;登录集群执行CLUSTER INFO命令验证集群状态;使

redis底层怎么实现 redis底层怎么实现 Apr 10, 2025 pm 07:21 PM

Redis 使用哈希表存储数据,支持字符串、列表、哈希表、集合和有序集合等数据结构。Redis 通过快照 (RDB) 和追加只写 (AOF) 机制持久化数据。Redis 使用主从复制来提高数据可用性。Redis 使用单线程事件循环处理连接和命令,保证数据原子性和一致性。Redis 为键设置过期时间,并使用 lazy 删除机制删除过期键。

redis怎么查看所有的key redis怎么查看所有的key Apr 10, 2025 pm 07:15 PM

要查看 Redis 中的所有键,共有三种方法:使用 KEYS 命令返回所有匹配指定模式的键;使用 SCAN 命令迭代键并返回一组键;使用 INFO 命令获取键的总数。

redis如何查看版本号 redis如何查看版本号 Apr 10, 2025 pm 05:57 PM

要查看 Redis 版本号,可以使用以下三种方法:(1) 输入 INFO 命令,(2) 使用 --version 选项启动服务器,(3) 查看配置文件。

redis-server找不到怎么办 redis-server找不到怎么办 Apr 10, 2025 pm 06:54 PM

解决redis-server找不到问题的步骤:检查安装,确保已正确安装Redis;设置环境变量REDIS_HOST和REDIS_PORT;启动Redis服务器redis-server;检查服务器是否运行redis-cli ping。

redis指令怎么用 redis指令怎么用 Apr 10, 2025 pm 08:45 PM

使用 Redis 指令需要以下步骤:打开 Redis 客户端。输入指令(动词 键 值)。提供所需参数(因指令而异)。按 Enter 执行指令。Redis 返回响应,指示操作结果(通常为 OK 或 -ERR)。

redis zset怎么使用 redis zset怎么使用 Apr 10, 2025 pm 07:27 PM

Redis 有序集合(ZSet)用于存储有序元素集合,并按关联分数进行排序。ZSet 的用法步骤包括:1. 创建 ZSet;2. 添加成员;3. 获取成员分数;4. 获取排名;5. 获取排名范围的成员;6. 删除成员;7. 获取元素个数;8. 获取分数范围内的成员个数。

redis怎么读源码 redis怎么读源码 Apr 10, 2025 pm 08:27 PM

理解 Redis 源码的最佳方法是逐步进行:熟悉 Redis 基础知识。选择一个特定的模块或功能作为起点。从模块或功能的入口点开始,逐行查看代码。通过函数调用链查看代码。熟悉 Redis 使用的底层数据结构。识别 Redis 使用的算法。

See all articles