Redis哨兵模式之Sentinel模式(一)

发布于:2025-07-05 ⋅ 阅读:(18) ⋅ 点赞:(0)

一、场景引入

  • 我们知道Redis采用高可用架构方案,在Redis进行主从复制时,当主节点宕机时,主从复制不具备自动恢复能力,此时如果还需要进行主从复制,就需要人工过程进行干预,同时还会造成一段时间内服务器会处于一个不可用的状态,同时也会导致安全性也会处于一个不可用的状态。
  • 使用了Redis哨兵模式,弥补其主从模式哨兵的不足,Sentinel通过监控Master和Slave,获取Redis服务工作状态是否正常,当主机发生故障时,Sentinel会自动进行故障转移,将监控的从机提升为主服务器(Master,从而保证系统可用性。
  • 哨兵(Sentinel)即是一个分布式系统,当一个架构中运行多个哨兵Sentinel进程,这些的进程之间使用协议gossipprotocols,  接收Master下线信息,并根据投票协议来决定故障的转移,从而决定哪个slave作为新的Master。
  • 每个哨兵会定时向其他哨兵(Sentinel)、Master、Slave发生定时消息以确认是否存活,如果发现其在指定时间内未回应,即认为对方机器已经挂了,主观认为其宕机了(sdown).
  • 虽然哨兵作为一个单独的可执行文件Redis-Sentinel,但实际上他是一个运行在Redis上的特殊配置服务,通过--Sentinel来启动哨兵

二、Sentinel工作原理

Sentinel服务启动之后,会先读取到Sentinel.conf主配置文件,并通过文件Sentinel monitor主配置文件信息指定要监控的Master机器,为了考虑到主库的IP和端口故障切换变化,所以尽量用IP和端口表示这个库,从而让一个哨兵监控多个主从网状系统。

Sentinel与监控主机建立连接之后,Sentinel会定时执行以下操作:

  • 每10s会向Master数据库和从数据库发送INFO命令
  • 每隔1s向Master、slave其他哨兵节点发送PING命令
  • Sentinel启动后,向主库发送INFO命令使得Sentinel可以获取当前主库的相关信息

三、主要功能

  • 集群监控:监控Redis的Master和Slave状态
  • 消息通知:如果Redis实例出现故障,那么哨兵信息报警发给管理员
  • 故障转移:Master节点出现故障时,会自动转移到slave上
  • 配置中心:配置出现故障时,会通知client客户端新的Master地址

sdown与odown区别和差异:sdown针对Redis实例做出单个下线状态判断,而odown是单个Sentinel向另一个Sentinel发送消息通知Master已经down掉了,那么即可认为此时状态是odown状态了。

四、Sentinel实战

redis哨兵环境部署

Redis哨兵:10.0.0.8
Redis主库:10.0.0.6
Redis从库:10.0.0.7
  • yum源安装redis服务

1.Redis哨兵服务启动

/usr/bin/redis-sentinel /etc/redis-sentinel.conf 

2.备份一份Redis-sentinel.conf目录

cp /etc/redis-sentinel.conf /tmp/

3.去掉配置文件空行

grep -v "^#" /etc/redis-sentinel.conf | grep -v "^$"

配置文件修改部分详解

重启Sentinel哨兵服务

/usr/bin/redis-sentinel /etc/redis-sentinel.conf 

检查进程和端口的使用情况

ps -ef | grep redis
netstat -tnlp | grep 26379

查看哨兵日志

more /var/log/redis/sentinel.log 

哨兵集群中出现Redis中master服务宕机,通过选举机制转移了

通过检查哨兵配置文件发现只修改了哨兵配置文件,但是主从配置中的replicaof不会改变。

但如果说重启了redis服务,那么将会导致出现主从配置连接异常情况(建议使用源码编译安装

软件包源码安装

  • Redis软件编译安装
## 下载redis安装包
wget http://download.redis.io/releases/redis-6.2.7.tar.gz 
## 解压并进行预编译操作
yum -y install tar
tar zxf redis-6.2.7.tar.gz
cd redis-6.2.7/
yum -y install jemalloc jemalloc-devel
yum -y install gcc
# 假设已下载并解压 redis-7.0.12.tar.gz
cd redis-7.0.12
yum -y install make
make distclean  # 清理
make -j$(nproc)  # 编译
make PREFIX=/usr/local/redis install  # 安装到指定目录
cp sentinel.conf /usr/local/redis/
  • 生效环境变量(/etc/profile)
echo "export PATH=/usr/local/redis/bin:$PATH" >> /etc/profile
  • 确定其版本是否一致
/usr/local/redis/bin/redis-server --version
Redis server v=6.2.7 sha=00000000:0 malloc=jemalloc-5.1.0 bits=64 build=fec0b680d2210c
  • 替换源文件删除空行和包含#号行的内容
sed -i -e '/#/d' -e '/^$/d' sentinel.conf
  • 完成sentinel.conf和redis.conf配置修改
## 源码安装的启动目录
/usr/local/redis/bin/redis-sentinel /usr/local/redis/sentinel.conf
nohup/usr/local/redis/bin/redis-server /usr/local/redis/redis.conf &
  • 通过源码编译方式完成了一主两从服务的搭建

  • 检查哨兵是否能更改主从配置节点信息