最新Redis7哨兵模式(保姆级教学)

一定一定要把云服务器的防火墙打开一定要!!!!!!!!!否则不成功!!!!!!!!!

哨兵是什么

相当于吹哨人,吹哨人巡查监控后台master主机是否故障,如果故障了根据投票数自动将某一个库,转换为新主库,继续对外服务

​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​

哨兵的作用

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

案例演示

前期准备

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

一主二从:用于数据读取和存放

由于个人经费有限,只有三台云服务器演示,这里我就将三台哨兵配置到6379这个服务器上

案例步骤

1、/myredis目录下新建或者拷贝sentinel.conf文件

2、配置文件修改

首先我们拷贝三份不同端口的代码:

我们进入每个代码使用vim filename

将内容删除复制以下内容:

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 主机名 62.234.60.208 6379 2
sentinel auth-pass 主机名 密码

解释一下最后两个配置文件作用:

sentinel monitor <master-name><redis-port> <quorum> 设置要监控的master服务器,quorum表示最少有几个哨兵认可客观下线同意故障迁移的法定票数

master设置了密码,连接master服务的密码

先启动一主二从三个redis实例,则是正常的主从复制

这里我们不能忘记之前主机的配置,6379后续可能会变成从机,需要设置访问新主机的密码, 请设置masterauth项访问密码你其他机器所设置密码

master主机配置文件汇总

哨兵 启动

先启动三个哨兵,完成监控 redis-sentinel sentinel26379.conf --sentine

启动三个哨兵之哦胡在测试一侧主从复制

原有的master挂了

我们这里手动关闭6379服务器,模拟master挂了

此时我们可以等待一下,哨兵投票

此时我们可以看出,当主机down之后从机6381上位

我们看一下sentinel26379.log的日志

这是一段Redis Sentinel的日志,它记录了Redis服务器和Sentinel的一些状态变化。以下是一些关键事件的解释:

  1. sdown(主观下线):Sentinel认为某个服务器无法访问,可能是网络问题或者服务器崩溃。
  2. Redis is starting:Redis服务器正在启动。
  3. Warning: Could not create server TCP listening socket 0.0.0.0:26379: bind: Address already in use:Redis Sentinel试图在端口26379上启动,但是这个端口已经被其他进程使用了。
  4. +new-epoch:Sentinel开始了新的纪元,这通常意味着主服务器失效,Sentinel正在选举新的主服务器。
  5. +vote-for-leader:Sentinel投票选举新的领导者。
  6. +switch-master:Sentinel已经将主服务器从一个服务器切换到另一个服务器。
  7. +slave:Sentinel识别到一个新的从服务器。

以下是这段Redis Sentinel日志中每一行的解释:

  1. 4346:X 30 Dec 2023 20:25:14.957 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo:Redis服务器(PID为4346)正在启动。

  2. 4346:X 30 Dec 2023 20:25:14.957 # Redis version=7.0.14, bits=64, commit=00000000, modified=0, pid=4346, just started:显示Redis服务器的版本信息,位数,提交哈希,修改状态,进程ID和启动状态。

  3. 4346:X 30 Dec 2023 20:25:14.957 # Configuration loaded:Redis服务器已成功加载配置文件。

  4. 4346:X 30 Dec 2023 20:25:14.958 * monotonic clock: POSIX clock_gettime:Redis服务器正在使用POSIX的clock_gettime函数作为其单调时钟源。

  5. 4346:X 30 Dec 2023 20:25:14.958 # Warning: Could not create server TCP listening socket 0.0.0.0:26379: bind: Address already in use:Redis服务器试图在端口26379上创建一个TCP监听套接字,但是这个端口已经被其他进程使用了。

  6. 4346:X 30 Dec 2023 20:25:14.958 # Failed listening on port 26379 (TCP), aborting.:由于无法在端口26379上监听,Redis服务器正在终止。

  7. 26979:X 30 Dec 2023 20:25:58.361 # +sdown master mymaster 62.234.60.208 6379:Sentinel进程(PID为26979)报告主服务器(别名为mymaster,IP地址为62.234.60.208,端口号为6379)已经主观下线。

  8. 26979:X 30 Dec 2023 20:25:58.487 * Sentinel new configuration saved on disk:Sentinel进程已经将新的配置保存到磁盘上。

  9. 26979:X 30 Dec 2023 20:25:58.487 # +new-epoch 893:Sentinel进程已经开始了新的纪元(Epoch),编号为893。

  10. 26979:X 30 Dec 2023 20:25:58.493 * Sentinel new configuration saved on disk:Sentinel进程已经将新的配置保存到磁盘上。

  11. 26979:X 30 Dec 2023 20:25:58.494 # +vote-for-leader a380684d19db383c3e7110c9aee4af069db632d2 893:Sentinel进程正在为领导者(ID为a380684d19db383c3e7110c9aee4af069db632d2)投票,纪元编号为893。

  12. 26979:X 30 Dec 2023 20:25:59.395 # +config-update-from sentinel a380684d19db383c3e7110c9aee4af069db632d2 62.234.60.208 26381 @ mymaster 62.234.60.208 6379:Sentinel进程已经从另一个Sentinel(ID为a380684d19db383c3e7110c9aee4af069db632d2,IP地址为62.234.60.208,端口号为26381)那里更新了配置。

  13. 26979:X 30 Dec 2023 20:25:59.395 # +switch-master mymaster 62.234.60.208 6379 121.43.60.247 6381:Sentinel进程已经将主服务器从62.234.60.208:6379切换到了121.43.60.247:6381。

  14. 26979:X 30 Dec 2023 20:25:59.395 * +slave slave 118.31.6.132:6380 118.31.6.132 6380 @ mymaster 121.43.60.247 6381:Sentinel进程识别到一个新的从服务器(IP地址为118.31.6.132,端口号为6380)。

  15. 26979:X 30 Dec 2023 20:25:59.395 * +slave slave 62.234.60.208:6379 62.234.60.208 6379 @ mymaster 121.43.60.247 6381:Sentinel进程识别到一个新的从服务器(IP地址为62.234.60.208,端口号为6379)。

  16. 26979:X 30 Dec 2023 20:25:59.400 * Sentinel new configuration saved on disk:Sentinel进程已经将新的配置保存到磁盘上。

哨兵运行流程和选举原理

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

运行流程

三个哨兵监控一主二从运行中->主管下线->客观下线->选出领导者哨兵->由领导者哨兵确定新master

主观下线

SDown(主观下线) :单个Sentinel实例对服务器做出的下线判断,即单个sentinel认为某个服务下线(有可能是接收不到订阅,之间的网络不通等等原因)。主观下线就是说如果服务器在[sentinel down-after-milliseconds]给定的毫秒数之内没有回应PING命令或者返回一个错误消息, 那么这个Sentinel会主观的(单方面的)认为这个master不可以用了

sentinel down-after-milliseconds <masterName> <timeout>

表示master被当前sentinel实例认定为失效的间隔时间,这个配置其实就是进行主观下线的一个依据

master在多长时间内一直没有给Sentine返回有效信息,则认定该master主观下线。也就是说如果多久没联系上redis-servevr,认为这个redis-server进入到失效(SDOWN)状态。

客观下线

ODown(客观下线) :ODown需要一定数量的sentinel,多个哨兵达成一致意见才能认为一个master客观上已经down掉

quorum这个参数是进行客观下线的一个依据,法定人数/法定票数

意思是至少有quorum个sentinel认为这个master有故障才会对这个master进行下线以及故障转移。因为有的时候,某个sentinel节点可能因为自身网络原因导致无法连接master,而此时master并没有出现故障,所以这就需要多个sentinel都一致认为该master有问题,才可以进行下一步操作,这就保证了公平性和高可用。

相关推荐
希忘auto1 小时前
详解Redis的常用命令
redis·1024程序员节
云和数据.ChenGuang5 小时前
Django 应用安装脚本 – 如何将应用添加到 INSTALLED_APPS 设置中 原创
数据库·django·sqlite
woshilys5 小时前
sql server 查询对象的修改时间
运维·数据库·sqlserver
Hacker_LaoYi5 小时前
SQL注入的那些面试题总结
数据库·sql
建投数据6 小时前
建投数据与腾讯云数据库TDSQL完成产品兼容性互认证
数据库·腾讯云
Hacker_LaoYi7 小时前
【渗透技术总结】SQL手工注入总结
数据库·sql
岁月变迁呀7 小时前
Redis梳理
数据库·redis·缓存
独行soc7 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍06-基于子查询的SQL注入(Subquery-Based SQL Injection)
数据库·sql·安全·web安全·漏洞挖掘·hw
你的微笑,乱了夏天8 小时前
linux centos 7 安装 mongodb7
数据库·mongodb
黄油饼卷咖喱鸡就味增汤拌孜然羊肉炒饭8 小时前
SpringBoot如何实现缓存预热?
java·spring boot·spring·缓存·程序员