当前位置: 首页 > article >正文

深刻理解Redis集群(下):Redis 哨兵(Sentinel)模式

2793baf6550fe78d6a05b3cf8355e854.png

背景

38f752085d188a5b3b56832d049ff58c.png

现在对3个节点的sentinel进行配置。sentinel的配置文件在redis的安装目录中已经存在,只需要复制到指定的位置即可。

sentinel是独立进程,有对应的脚本来执行。

基于之前的redis 一主二从的架构,我们继续启动3个sentinel进程。

哨兵模式的架构图如下:

8249d8c3f143448cf4a1a75bf7c9f02d.png

启动哨兵们

  • sentinel6379.conf

protected-mode no
port 26379


daemonize yes
pidfile "/var/run/redis-sentinel_26379.pid"
logfile "/usr/local/redis-6.2.14/logs/redis-sentinel_26379.log"
dir "/private/tmp"


sentinel monitor mymaster 127.0.0.1 6379 2


sentinel announce-hostnames no
# Generated by CONFIG REWRITE
user default on nopass ~* &* +@all
sentinel myid c384816840b671b2f194ebd417458c6bbd08230c
sentinel config-epoch mymaster 0
sentinel leader-epoch mymaster 0
sentinel current-epoch 0
sentinel known-replica mymaster 127.0.0.1 6381
sentinel known-replica mymaster 127.0.0.1 6380
sentinel known-sentinel mymaster 127.0.0.1 26381 789f7ad2247aa6104665ced751c1956e87ec175b
sentinel known-sentinel mymaster 127.0.0.1 26380 e43e1bc4459a782d2049f8ab1dd8938e17c90ced

启动sentinel,查看哨兵信息:

5c5edba30197294e8c1eecd471601d6b.png

  • sentinel6380.conf

protected-mode no
port 26380


daemonize yes
pidfile "/var/run/redis-sentinel_26379.pid"
logfile "/usr/local/redis-6.2.14/logs/redis-sentinel_26379.log"
dir "/private/tmp"


sentinel monitor mymaster 127.0.0.1 6379 2


sentinel announce-hostnames no
# Generated by CONFIG REWRITE
user default on nopass ~* &* +@all
sentinel myid c384816840b671b2f194ebd417458c6bbd08230c
sentinel config-epoch mymaster 0
sentinel leader-epoch mymaster 0
sentinel current-epoch 0
sentinel known-replica mymaster 127.0.0.1 6381
sentinel known-replica mymaster 127.0.0.1 6380
sentinel known-sentinel mymaster 127.0.0.1 26381 789f7ad2247aa6104665ced751c1956e87ec175b
sentinel known-sentinel mymaster 127.0.0.1 26380 e43e1bc4459a782d2049f8ab1dd8938e17c90ced

启动sentinel,查看哨兵信息:

2654812ec3c426c8780573125c0097e2.png

  • sentinel6381.conf

protected-mode no
port 26381


daemonize yes
pidfile "/var/run/redis-sentinel_26379.pid"
logfile "/usr/local/redis-6.2.14/logs/redis-sentinel_26379.log"
dir "/private/tmp"


sentinel monitor mymaster 127.0.0.1 6379 2


sentinel announce-hostnames no
# Generated by CONFIG REWRITE
user default on nopass ~* &* +@all
sentinel myid c384816840b671b2f194ebd417458c6bbd08230c
sentinel config-epoch mymaster 0
sentinel leader-epoch mymaster 0
sentinel current-epoch 0
sentinel known-replica mymaster 127.0.0.1 6381
sentinel known-replica mymaster 127.0.0.1 6380
sentinel known-sentinel mymaster 127.0.0.1 26381 789f7ad2247aa6104665ced751c1956e87ec175b
sentinel known-sentinel mymaster 127.0.0.1 26380 e43e1bc4459a782d2049f8ab1dd8938e17c90ced

启动sentinel,查看哨兵信息:

19f0d3b5cf980e0706717ec5d009c9f8.png

故障转移测试

redis日志

  • 我们kill掉原Master进程,即6379的redis-server,看日志

9c8b7008e346a41cade58b948d4d7bc6.png

  • 看下6380的redis-server日志

68026fa532dc77886189561ed394c94e.png

3ee3f5ca5654118bd925ebc3edcc02ab.png

06 Sep 2024 15:49:18.869:开始断开和Master进程的连接,接着持续报错说复制失败,不断地重试

(中间有30s的重试)

06 Sep 2024 15:49:49.205 * MASTER MODE enabled,即6380实例被sentinel选举为Master节点

  • 看下6381的redis-server日志

a6a05372ede5602dbc62dcb372ecbec4.png

70da5e7091476c12e979b4c22afaa105.png

06 Sep 2024 15:49:18.870 # Error condition on socket for SYNC: Connection refused开始断开和Master进程的连接,接着持续报错说复制失败,不断地重试

(中间有30s的重试)

06 Sep 2024 15:49:49.262 * REPLICAOF 127.0.0.1:6380 enabled ,即6380实例被sentinel选举为Master节点后,6381实例也接受现实,开始从6380实例进行数据同步

redis-sentinel日志

让我们进入到之前配置好的文件夹

82c7365dd3fe08e101b4582c47a8c76e.png

  • redis-sentinel_26379进程日志

6b96a8dbdc043e52839d4b8169c267b5.png

  • redis-sentinel_26380进程日志

37fb0ec4578a214135ed9b784c840428.png

  • redis-sentinel_26381进程日志

b6b631f10f8e74cba327f55ef315e87b.png

故障恢复

  • 重新启动6379实例

  • 通过26379-sentinel,虽然原Master重启了,但目前Master还是6380

bf6b40852b1998f9d2b33227d687ab9e.png

其他文章

Kafka消息堆积问题排查

基于SpringMVC的API灰度方案

理解到位:灾备和只读数据库

SQL治理经验谈:索引覆盖

Mybatis链路分析:JDK动态代理和责任链模式的应用

大模型安装部署、测试、接入SpringCloud应用体系

Mybatis插件-租户ID的注入&拦截应用


http://www.kler.cn/a/331527.html

相关文章:

  • Restaurants WebAPI(二)——DTO/CQRS
  • cenos如何升级git到2以上版本
  • Dhatim FastExcel 读写 Excel 文件
  • Python编程常用的19个经典案例
  • Zabbix6.0升级为6.4
  • Service Discovery in Microservices 客户端/服务端服务发现
  • 3DGS中Densification梯度累计策略的改进——绝对梯度策略(Gaussian Opacity Fields)
  • 国外电商系统开发-运维系统功能清单开发
  • 【S32K3 RTD LLD篇5】K344 ADC SW+HW trigger
  • LLM 构建Data Multi-Agents 赋能数据分析平台的实践之⑥:NL2SQL技术探讨
  • 无人化焦炉四大车系统 武汉正向科技 工业机车无人远程控制系统
  • 2024大二上js高级+ES6学习9.26(闭包,递归函数)
  • 申请免费或试用VPS服务
  • 音视频基础理论
  • Scrapy 爬虫的大模型支持
  • uniapp修改uni-ui组件样式(对微信小程序/H5有效,vue3)
  • MobX-Miniprogram:微信小程序的状态管理利器
  • JavaScript使用渐变来美化对象!
  • 【Kubernetes】常见面试题汇总(五十)
  • Unity初识+面板介绍
  • Linux基础命令reboot详解
  • Python | Leetcode Python题解之第452题用最少数量的箭引爆气球
  • Webpack模式-Resolve-本地服务器
  • 1.9 物理层设备
  • Maya动画--基础约束
  • 【每天学个新注解】Day 14 Lombok注解简解(十三)—@onX(onMethod= 、onConstructor= 、onParam=)