<redis集群>二.哨兵模式

一.哨兵模式介绍

哨兵模式的概念:

是一个分布式系统,依托于主从模式,用于对主从结构中的每台服务器进行监控,当出现故障时通过投票机制选择新的 Master 并将所有 Slave 连接到新的 Master。所以整个运行哨兵的集群的数量不得少于3个节点

哨兵检测主redis,一般来说不会检测从redis,至少有两个哨兵认为主redis节点down掉才会选举其他从redis节点为新的主节点

哨兵模式的作用

  1. 监控:哨兵会不断地检查主节点和从节点是否运作正常。
  2. 自动故障转移:当主节点不能正常工作时,哨兵会开始自动故障转移操作,它会将失效主节点的其中一个从节点升级为新的主节点,并让其他从节点改为复制新的主节点。
  3. 通知(提醒):哨兵可以将故障转移的结果发送给客户端。

哨兵模式的缺点

  1. 写操作无法负载均衡
  2. 存储能力受到单机的限制
  3. 哨兵无法对从节点进行自动故障转移,在读写分离场景下,从节点故障会导致读服务不可用,需要对从节点做额外的监控、切换操作。

哨兵模式的结构

  1. 哨兵节点:哨兵系统由一个或多个哨兵节点组成,哨兵节点是特殊的redis节点,不存储数据。
  2. 数据节点:主节点和从节点都是数据节点。

<redis集群>二.哨兵模式_第1张图片

注:sentinel为哨兵

哨兵模式中的故障恢复算法

在Redis哨兵模式中,投票算法(Voting Algorithm)用于决定在多个哨兵节点之间如何选择一个主服务器。这个算法通常基于以下规则:

  1. 多数投票原则:哨兵节点将根据多数投票原则来决定主服务器。如果有超过半数的哨兵节点支持同一个主服务器,那么该主服务器将被选为新的主服务器。
  2. 权重考虑:每个哨兵节点可能有不同的权重,这取决于其健康状态和性能表现。在投票过程中,哨兵节点将根据其权重进行加权投票。
  3. 时间窗口:为了防止虚假报警,哨兵节点会等待一定时间窗口后再进行投票。在这个窗口内,如果哨兵节点检测到主服务器的故障或故障恢复,那么它会重新进行投票。

Redis哨兵模式使用特定的协议(如TCP协议)来与其他哨兵节点进行通信,并执行上述的投票算法。在算法执行后,哨兵节点会更新其本地数据库,并通知其他节点。一旦新的主服务器被选出,所有客户端请求都将被导向新的主服务器

哨兵模式的配置文件 /etc/redis-sentinel.conf

二.哨兵模式配置过程

此实验依托于redis主从同步(主从同步见上一篇帖),为方便将使用一台linux虚拟机进行。

1.复制redis配置文件,变成一主两从,以确保redis可读取不同的配置文件,在主从同步实验中已复制了配置文件为主6379,从6380,此实验再复制一个从为6381

Cp /etc/6380.conf /etc/6381.conf

搜索dir找到dir /var/lib/redis修改为dir /var/lib/redis/6381

命令行:%s/6380/6381/g 将6380更改为6381(注意不要将slaveof字段更改成6381,可以检查一下)

Mkdir  /var/lib/redis/6381         #创建6381的日志文件

Redis-server /etc/6381.conf        #启动

检查一主两从是否配置完成

2.复制哨兵配置文件以对应不同的redis

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

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

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

3.更改redis日志文件路径

vim /etc/6379.conf         #进入主redis配置文件

搜索logfile找到logfile /var/log/redis/redis.log 更改为logfile /var/log/redis/6379/redis.log

vim /etc/6380.conf #进入主redis配置文件

搜索logfile找到logfile /var/log/redis/redis.log 更改为logfile /var/log/redis/6380/redis.log

vim /etc/6381.conf #进入主redis配置文件

搜索logfile找到logfile /var/log/redis/redis.log 更改为logfile /var/log/redis/6381/redis.log

wq保存退出

4.创建redis日志文件

cd /var/log/redis

查看是否有redis.log日志文件,rm -rf删除redis.log

Mkdir 6379 6380 6381 #创建redis对应的日志目录

5.更改哨兵配置文件

  • vim /etc/26379.conf #进入哨兵配置文件
搜索logfile找到logfile /var/log/redis/sentinel.log 更改为logfile /var/log/redis/6379/sentinel.log

搜索mymaster找到sentinel monitor mymaster 127.0.0.1 6379 2(#Sentinel 开始监控名为 "mymaster" 的主服务器,该服务器运行在 IP 地址为 127.0.0.1、端口号为 6379 的机器上,并且当有至少两个 Sentinel 认为此服务器已失效时,才会进行故障转移)更改为redis主IP,sentinel monitor mymaster 192.168.112.161 6379 2

更改Redis服务器监听的IP地址,搜索bind找到bind 127.0.0.1 192.168.1.1,复制这行取消注释,更改为bind 192.168.112.161

搜索daemonize no将no改为yes,若没有这一行,可在最后添加daemonize yes

搜索port更改匹配端口号为port 26379

wq保存退出
Redis-sentinel /etc/26379.conf         #启动
  • vim /etc/26380.conf #进入哨兵配置文件
搜索logfile找到logfile /var/log/redis/sentinel.log 更改为logfile /var/log/redis/6380/sentinel.log

搜索mymaster找到sentinel monitor mymaster 127.0.0.1 6379 2更改为redis主IP,sentinel monitor mymaster 192.168.112.161 6379 2

更改Redis服务器监听的IP地址,搜索bind找到bind 127.0.0.1 192.168.1.1,复制这行取消注释,更改为bind 192.168.112.161

搜索daemonize no将no改为yes,若没有这一行,可在最后添加daemonize yes

搜索port更改匹配端口号为port 26380

wq保存退出

Redis-sentinel /etc/26380.conf #启动
  • vim /etc/26381.conf #进入哨兵配置文件
搜索logfile找到logfile /var/log/redis/sentinel.log 更改为logfile /var/log/redis/6381/sentinel.log

搜索port更改匹配端口号为port 26381

其他同上

Redis-sentinel /etc/26381.conf #启动

注:哨兵最好一个一个启动,不要一起全部启动

6.

cd /var/lib/redis/26379   26380  26381

进入到哨兵目录中查看是否生成了哨兵日志文件

Netstat -anput | grep redis         #查看哨兵进程是否启动
  1. 测试

down掉主redis,进入6380和6380redis

redis-cli -h 192.168.112.161 -p 6380

192.168.112.161:6380>ROLE #查看主从状态

若哨兵模式已经成功启用,则主redis失效后,哨兵将会在6380和6381中选举一个新的主redis,另外一个为从redis

当旧的主redis6379重新启动后,6379则会变成从redis

选举日志路径:/var/lib/redis/6379/redis.log 若没有自行创建6379目录,则在/var/lib/redis中

你可能感兴趣的:(数据库,redis,linux,运维,缓存)