Redis高可用——哨兵模式

Redis——哨兵模式

  • 一、Redis 哨兵模式
      • 1.哨兵模式的作用
      • 2.故障转移机制
      • 3.主节点的选举
  • 二、搭建Redis 哨兵模式
      • 1.修改 Redis 哨兵模式的配置文件(所有节点操作)
      • 2.启动哨兵模式
      • 3.查看哨兵信息
      • 4.故障模拟
      • 5.验证结果

一、Redis 哨兵模式

主从切换技术的方法是:当服务器宕机后,需要手动一台从机切换为主机,这需要人工干预,不仅费时费力而且还会造成一段时间内服务不可用。为了解决主从复制的缺点,就有了哨兵机制。

哨兵的核心功能:在主从复制的基础上,哨兵引入了主节点的自动故障转移。

1.哨兵模式的作用

●监控:哨兵会不断地检查主节点和从节点是否运作正常。

●自动故障转移:当主节点不能正常工作时,哨兵会开始自动故障转移操作,它会将失效主节点的其中一个从节点升级为新的主节点,并让其它从节点改为复制新的主节点。

●通知(提醒):哨兵可以将故障转移的结果发送给客户端。

哨兵结构由两部分组成,哨兵节点和数据节点:
●哨兵节点:哨兵系统由一个或多个哨兵节点组成,哨兵节点是特殊的redis节点,不存储数据。
●数据节点:主节点和从节点都是数据节点。

2.故障转移机制

1.由哨兵节点定期监控发现主节点是否出现了故障
每个哨兵节点每隔1秒会向主节点、从节点及其它哨兵节点发送一次ping命令做一次心跳检测。如果主节点在一定时间范围内不回复或者是回复一个错误消息,那么这个哨兵就会认为这个主节点主观下线了(单方面的)。当超过半数哨兵节点认为该主节点主观下线了,这样就客观下线了。

2.当主节点出现故障,此时哨兵节点会通过Raft算法(选举算法)实现选举机制共同选举出一个哨兵节点为leader,来负责处理主节点的故障转移和通知。所以整个运行哨兵的集群的数量不得少于3个节点。

3.由leader哨兵节点执行故障转移,过程如下:
●将某一个从节点升级为新的主节点,让其它从节点指向新的主节点;
●若原主节点恢复也变成从节点,并指向新的主节点;
●通知客户端主节点已经更换。

需要特别注意的是,客观下线是主节点才有的概念;如果从节点和哨兵节点发生故障,被哨兵主观下线后,不会再有后续的客观下线和故障转移操作。

3.主节点的选举

1.过滤掉不健康的(已下线的),没有回复哨兵 ping 响应的从节点。
2.选择配置文件中从节点优先级配置最高的。(replica-priority,默认值为100)
3.选择复制偏移量最大,也就是复制最完整的从节点。

哨兵的启动依赖于主从模式,所以须把主从模式安装好的情况下再去做哨兵模式

二、搭建Redis 哨兵模式

Master节点:192.168.30.50
Slave1节点:192.168.30.40
Slave2节点:192.168.30.30

systemctl stop firewalld
setenforce 0

1.修改 Redis 哨兵模式的配置文件(所有节点操作)

cp /opt/redis-7.0.9/sentinel.conf /usr/local/redis/conf/
chown redis.redis /usr/local/redis/conf/sentinel.confvim /usr/local/redis/conf/sentinel.conf
protected-mode no									#6行,关闭保护模式
port 26379											#10行,Redis哨兵默认的监听端口
daemonize yes										#15行,指定sentinel为后台启动
pidfile /usr/local/redis/log/redis-sentinel.pid		#20行,指定 PID 文件
logfile "/usr/local/redis/log/sentinel.log"			#25行,指定日志存放路径
dir /usr/local/redis/data							#54行,指定数据库存放路径
sentinel monitor mymaster 192.168.30.50 6379 2		#73行,修改 指定该哨兵节点监控192.168.30.50:6379这个主节点,该主节点的名称是mymaster,最后的2的含义与主节点的故障判定有关:至少需要2个哨兵节点同意,才能判定主节点故障并进行故障转移
#sentinel auth-pass mymaster abc123					#76行,可选,指定Master节点的密码,仅在Master节点设置了requirepass
sentinel down-after-milliseconds mymaster 3000		#114行,判定服务器down掉的时间周期,默认30000毫秒(30秒)
sentinel failover-timeout mymaster 180000			#214行,同一个sentinel对同一个master两次failover之间的间隔时间(180秒)

2.启动哨兵模式

先启master,再启slave
cd /usr/local/redis/conf/
redis-sentinel sentinel.conf &

在这里插入图片描述

3.查看哨兵信息

redis-cli -p 26379 info Sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_tilt_since_seconds:-1
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.30.50:6379,slaves=2,sentinels=3

在这里插入图片描述

4.故障模拟

查看redis-server进程号:
ps -ef | grep redis
root       65210      1  0 14:11 ?        00:00:04 redis-sentinel *:26379 [sentinel]
redis      65225      1  0 14:21 ?        00:00:02 /usr/local/redis/bin/redis-server 0.0.0.0:6379
root       65241   4316  0 14:44 pts/2    00:00:00 grep --color=auto redis杀死 Master 节点上redis-server的进程号
kill -9 65210			Master节点上redis-server的进程号

在这里插入图片描述

5.验证结果

tail -f /usr/local/redis/log/sentinel.log
7578:X 03 Jul 2023 14:51:40.505 * +slave-reconf-done slave 192.168.30.40:6379 192.168.30.40 6379 @ mymaster 192.168.30.50 6379
7578:X 03 Jul 2023 14:51:40.561 # +failover-end master mymaster 192.168.30.50 6379
7578:X 03 Jul 2023 14:51:40.561 # +switch-master mymaster 192.168.30.50 6379 192.168.30.30 6379
7578:X 03 Jul 2023 14:51:40.561 * +slave slave 192.168.30.40:6379 192.168.30.40 6379 @ mymaster 192.168.30.30 6379
7578:X 03 Jul 2023 14:51:40.561 * +slave slave 192.168.30.50:6379 192.168.30.50 6379 @ mymaster 192.168.30.30 6379
7578:X 03 Jul 2023 14:51:40.563 * Sentinel new configuration saved on disk
7578:X 03 Jul 2023 14:51:43.570 # +sdown slave 192.168.30.50:6379 192.168.30.50 6379 @ mymaster 192.168.30.30 6379
7578:X 03 Jul 2023 14:58:42.527 # -sdown slave 192.168.30.50:6379 192.168.30.50 6379 @ mymaster 192.168.30.30 6379
7578:X 03 Jul 2023 14:58:52.461 * +reboot slave 192.168.30.50:6379 192.168.30.50 6379 @ mymaster 192.168.30.30 6379
7578:X 03 Jul 2023 15:02:21.767 # +sdown slave 192.168.30.50:6379 192.168.30.50 6379 @ mymaster 192.168.30.30 6379redis-cli -p 26379 INFO Sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_tilt_since_seconds:-1
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.30.30:6379,slaves=2,sentinels=3

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/7873.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

少数人的晚餐

这不是影评。 这是过去现在和未来都必然发生的事情。 如下这句话选自这部电影: P-Power M-Money K-knowledge 但本文与电影无关。 有一句大家经常听到的话: “群众的眼睛是雪亮的” 但事实上更普遍存在的是: P一定掌握在少数人手中&…

数据库性能测试报告总结模板

目录 1计划概述 2参考资料 3术语解释 4系统简介 5测试环境 6测试指标 7测试工具和测试策略 8测试数据收集 9测试结果数据以及截图 9.1Jmeter性能指标 9.2硬件指标图 10 测试结论 需要完整报告模板记得文章末尾找我哦。 1计划概述 目的:找出系统潜在的…

Elasticsearch集群

单点的问题 单台机器存储容量有限,无法实现高存储。 单服务器容易出现单点故障,无法实现高可用。 单服务的并发处理能⼒有限,无法实现高并发。 集群的结构 数据分片:把数据拆分成多份,每一份存储到不同机器节点&a…

[Flask] Cookie与Session

由于HTTP的无状态性,为了使某个域名下的所有网页能够共享某些数据,Cookie和Session应运而生 1.Cookie对象 HTTP是无状态(stateless)协议,一次请求响应结束后,服务器不会留下任何关于对方状态的信息 也就是说,尽管在…

制造企业实施MES系统受到的影响因素有哪些?

实施MES系统会遇到哪些影响因素?或者说企业实施MES系统的交付率为什么低? 我觉得关键点在于:在当前MES产品化程度普遍不高的大环境下,对项目及管理软件本身认知过于简单,且缺失有经验行业人才,是当前大部分…

GitHub打不开的解决方案(超简单)

在国内,github官网经常面临打不开或访问极慢的问题,不挂梯子(VPN,飞机,魔法)使用体验极差,那有什么好办法解决GitHub官网访问不了的问题?今天小布教你几招轻松访问github官网。 git…

【运维】Windows 通过注册表禁用服务

【运维】Windows 通过注册表禁用服务 以这个服务为例子 Windows Push Notifications User Service 双击查看服务名称 WpnUserService_671f3 打开注册表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\{服务名称} HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Ser…

wireshark学习

抓包原理 哪种网络情况可以抓到包?(1)本机环境(2)集线器环境(3)交换机环境 交换机环境目前较为常用,这也分为三种情况(1)端口镜像(2&#xff09…

Jenkins构建Python项目提示:‘python‘ 不是内部或外部命令,也不是可运行的程序

一、问题描述(1) 今天Darren洋在jenkins里构建与飞书机器人通知时,用python编写脚本时发现了以下报错:Jenkins构建Python项目提示:‘python‘ 不是内部或外部命令,也不是可运行的程序 二、解决办法 在配置…

vue+leaflet笔记之热力图

vueleaflet笔记之热力图 文章目录 vueleaflet笔记之热力图开发环境代码简介插件简介与安装使用简介 详细源码(Vue3) 本文介绍了Web端使用 Leaflet开发库展示热力图方法 (底图来源:天地图),结合leaflet.heat插件可以很容易的做出热力图,通过调整其配置参…

记一次使用MySQL数据库ORM为 SqlSugar 事务无效的处理过程

在项目中使用了开源代码框架admin.net ,其使用的数据库ORM为SqlSugar 使用以下代码执行事务理论上应该有回滚发生,但数据任然删除了 [UnitOfWork][ApiDescriptionSettings(Name "Delete")] [HttpPost][DisplayName("删除菜单")]p…

【sap2000】【python】python相关的3个案例-1/3

python相关的3个案例 Python COM,Python NET,IronPython的区别 这三个术语都与 Python 语言和其他编程平台(尤其是 Microsoft .NET 及其组件)之间的互操作性有关。我们来看看它们之间的主要区别: Python COM&#xf…