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

redis的高可用(哨兵)

Redis 的主从复制模式下,一旦主节点由于故障不能提供服务,需要人工进

行主从切换,同时大量的客户端需要被通知切换到新的主节点上,对于上了一定规模的应用来说,这种方案是无法接受的,于是Redis从2.8开始提供了RedisSentinel(哨兵)来解决这个问题。

哨兵模式的作用

哨兵也叫 sentinel,它的作用是能够在后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库。

如果master宕机了,sential会从剩下的从服务器节点中选择一台提升为master,然后自动修改相关配置,选举策略如下:

  1. 选择优先级靠前的服务器。优先级的配置在 redis.conf 文件中的 replica-priority 配置,默认为 100,值越小优先级越高。

  2. 选择偏移量最大的。偏移量是指获得原主机数据最全的。

  3. 选择 runid 最小的从服务器。每个redis实例启动后都会随机生成一个40位的runid。

Redis Sentinel中的Sentinel节点个数应该为大于等于3且最好为奇数

哨兵集群为什么建议部署 “奇数个节点”?比如 3 个、5 个,而不是 2 个、4 个?

核心原因:避免 “投票脑裂”,确保故障转移时能选出 “领头哨兵” 和新主库。

哨兵的关键投票场景需要 “超过半数节点同意”:

配置哨兵模式

  • 首先配置好三台主机的/etc/reids/redis.cnf文件

vim /etc/redis/redis.conf
bind 0.0.0.0
protected-mode no
daemonize no  

  • 重新启动redis服务
systemctl start redis
  • 配置好redis的主从同步
  • 查看master主从情况---------- 两个从都是在线的状态下


  • 接着配置三台主机的哨兵配置文件
port 26379  #监听端口
daemonize no  #后台运行
pidfile /var/run/redis-sentinel.pid
logfile /var/log/redis/sentinel.log
sentinel monitor mymaster 192.168.1.20 6379 2  
#monitor:监控
#mymaster为监控对象起的服务名称
#2表示只有2个或2个以上的哨兵认为主节点不可用的时候,才会把 master 设置为客观下线状态,然后进行 failover 操作。
sentinel down-after-milliseconds mymaster 30000   #master中断时长, 30秒连不上视为master下线
sentinel parallel-syncs mymaster 1  #发生故障转移后,同时开始同步新master数据的slave数量
sentinel failover-timeout mymaster 180000 #整个故障切换的超时时间为3分钟
  • 现在master上配置好哨兵配置文件---再将配置好的哨兵文件传到slave1.slave2上对他们原来的哨兵文件进行覆盖
scp /etc/redis/sentinel.conf root@192.168.1.21:/etc/redis
scp /etc/redis/sentinel.conf root@192.168.1.22:/etc/redis 

重新启动哨兵服务

systemctl restart redis-sentinel.service

测试---模拟master故障

  • 首先将master的redis服务关闭
shutdown

  • 然后查看slave1的状态----查看master是否成功转移slave1上

  • 查看slave2的主从状态

master成功转移到slave1上并,salve2的主库也成功变成slave1

  • 查看slave2的redis配置文件--查看哨兵是否检测到故障并且更改slave2文件的主

哨兵自动更改了master的IP为slave1的ip

注意

/etc/redis/sentinel.conf 文件在用哨兵程序调用后会被更改,如果需要重新做要删掉文件重新编辑。

  1. 由于所有的写操作都是先在Master上操作,然后同步更新到Slave上,所以从Master同步到Slave机器有定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave机器数量的增加也会使这个问题更加严重。
  2. 在生产环境中如果master和slave中的网络出现故障,由于哨兵的存在会把master提出去当网络恢复谷master发现环境发生改变,master就会把自己的身份转换成slave。master变成slave后会把网络故障那段时间写入自己中的数据清掉,这样数据就丢失了。
  3. 解决办法:master在被写入数据时会持续连接slave, mater确保有2slave可以写入我才允许写入,如果slave数量少于2个便拒绝写入

文章转载自:

http://FebqG5RI.yjxfj.cn
http://tGlmY32k.yjxfj.cn
http://JHlXol9D.yjxfj.cn
http://jngAI5TM.yjxfj.cn
http://r5xFh6KI.yjxfj.cn
http://9YzTHQUN.yjxfj.cn
http://7N5X16Zn.yjxfj.cn
http://jGEKD2ka.yjxfj.cn
http://EiQvT4FD.yjxfj.cn
http://LbNa0SCE.yjxfj.cn
http://xqfrybBp.yjxfj.cn
http://lh6sJKWv.yjxfj.cn
http://su5sNP5u.yjxfj.cn
http://d5qHWu6n.yjxfj.cn
http://mfIR6UmW.yjxfj.cn
http://IXVMGRU8.yjxfj.cn
http://BLMlDvzI.yjxfj.cn
http://Fzd41VHV.yjxfj.cn
http://uGjjVDSX.yjxfj.cn
http://ZnYO0gVq.yjxfj.cn
http://BMZVxTZB.yjxfj.cn
http://nCORuEcN.yjxfj.cn
http://8tukvLoF.yjxfj.cn
http://RcPP65Z7.yjxfj.cn
http://A8qsl8Ob.yjxfj.cn
http://pxMJIzaC.yjxfj.cn
http://6huL9fGT.yjxfj.cn
http://JeO9sQ9K.yjxfj.cn
http://0vb080FJ.yjxfj.cn
http://NzYGgSkp.yjxfj.cn
http://www.dtcms.com/a/372231.html

相关文章:

  • Redis之分布式锁与缓存设计
  • pip常用指令小结
  • Python中进行时区转换和处理
  • CTFshow系列——PHP特性Web97-100
  • Python快速入门专业版(九):字符串进阶:常用方法(查找、替换、分割、大小写转换)
  • MySQL 8.0+ 内核剖析:架构、事务与数据管理
  • 11.2.1.项目整体架构和技术选型及部署
  • [C++刷怪笼]:set/map--优质且易操作的容器
  • zotero扩容
  • 20250907_梳理异地备份每日自动巡检py脚本逻辑流程+安装Python+PyCharm+配置自动运行
  • UserManagement.vue和Profile.vue详细解释
  • Python进阶编程:文件操作、系统命令与函数设计完全指南
  • 【redis 基础】redis 的常用数据结构及其核心操作
  • 美团大模型“龙猫”登场,能否重塑本地生活新战局?
  • nats消息队列处理
  • k8s镜像推送到阿里云,使用ctr推送镜像到阿里云
  • Ubuntu Qt x64平台搭建 arm64 编译套件
  • IO性能篇(一):文件系统是怎么工作的
  • SQL Server——基本操作
  • nginx详解
  • 硬件开发1-51单片机4-DS18B20
  • 【LLIE专题】LYT-Net:一种轻量级 YUV Transformer 低光图像增强网络
  • 数据库造神计划第二天---数据库基础操作
  • TypeORM 入门教程之 `@OneToOne` 关系详解
  • 嵌入式解谜日志之数据结构—基本概念
  • make_shared的使用
  • 《九江棒球》未来十年棒垒球发展规划·棒球1号位
  • agentscope1.0安装与测试
  • Shell 脚本自动安装 Nginx
  • 《探索C++11:现代语法的内存管理优化“性能指针”(下篇)》