Redis哨兵(Sentinel)模式

主从切换技术的方法是:当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力,还会造成一段时间内服务不可用。这不是一种推荐的方式,更多时候,我们优先考虑哨兵模式。


一、哨兵模式概述

哨兵模式是一种特殊的模式,首先Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行。其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。


这里的哨兵有两个作用:

通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器和从服务器。


当哨兵监测到master宕机,会自动将slave切换成master,然后通过发布订阅模式通知其他的从服务器,修改配置文件,让它们切换主机。


然而一个哨兵进程对Redis服务器进行监控,可能会出现问题,为此,我们可以使用多个哨兵进行监控。各个哨兵之间还会进行监控,这样就形成了多哨兵模式。

用文字描述一下故障切换(failover)的过程。假设主服务器宕机,哨兵1先检测到这个结果,系统并不会马上进行failover过程,仅仅是哨兵1主观的认为主服务器不可用,这个现象成为主观下线。当后面的哨兵也检测到主服务器不可用,并且数量达到一定值时,那么哨兵之间就会进行一次投票,投票的结果由一个哨兵发起,进行failover操作。切换成功后,就会通过发布订阅模式,让各个哨兵把自己监控的从服务器实现切换主机,这个过程称为客观下线。这样对于客户端而言,一切都是透明的。


二、Redis配置哨兵模式


配置3个哨兵和1主2从的Redis服务器。(一主二从三哨兵)

服务类型

是否是主服务器

IP地址

端口

Redis

192.168.11.128

6379

Redis

192.168.11.129

6379

Redis

192.168.11.130

6379

Sentinel

-

192.168.11.128

26379

Sentinel

-

192.168.11.129

26379

Sentinel

-

192.168.11.130

26379



redis 哨兵 时间 redis 哨兵模式_java

 

下载最新版redis的源码包:

https://download.redis.io/releases/redis-6.2.1.tar.gz


# mkdir /data/redis -p
# cd /data/redis
# wget https://download.redis.io/releases/redis-6.2.1.tar.gz
解压:
# tar -xvzf redis-6.2.1.tar.gz

编译:
# cd redis-6.2.1
# make

创建目录用于存放配置文件:
# mkdir /data/redis/conf -p
# mkdir /data/redis/logs

配置文件:
1. redis.conf(主节点配置)
port 6379
bind 0.0.0.0
#redis将以守护进程的方式运行,这样可以在redis服务启动的窗口中再可以进行其它操作
daemonize yes
pidfile "/var/run/redis_6379.pid"
appendonly yes
#设置redis客户端或者远程机器连接redis服务器需要的密码
requirepass test123
#从服务器和哨兵连接主服务器需要的密码
masterauth test123

2. redis.conf(两个从节点配置文件)
port 6379
bind 0.0.0.0
daemonize yes
slave-read-only yes
requirepass "test123"
slaveof 172.18.117.72 6379
masterauth "test123"

3. sentinel.conf(配置三个文件)
port 26379
daemonize yes
# Redis搭建sentinel,无法主从自动切换,一直卡在-sdown sentinel,redis-sentinel有保护模式,所以要将这个模块关闭!
protected-mode no
logfile "/data/redis/logs/sentinel_26379.log"
#mymaster
#监视一个主服务器(redis主节点), 这个主服务器的名称为mymaster,IP地址为172.18.117.72,端口为6379。
#而将这个主服务器判断为失效至少需要1个Sentinel同意。只要同意Sentinel的数量不达标,自动故障迁移就不会执行。
sentinel monitor mymaster 172.18.117.72 6379 1
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 18000
sentinel auth-pass mymaster test123
sentinel parallel-syncs mymaster 1


1.先启动redis服务:(在三个节点分别执行,启动redis)
# /data/redis/redis-6.2.1/src/redis-server /data/redis/conf/redis.conf

2.先启动sentinel:(在三个节点都执行一次)
# /data/redis/redis-6.2.1/src/redis-sentinel /data/redis/conf/sentinel.conf

在springboot中由原来单节点改成sentinel模式连接时,只需要增加sentinel配置信息即可:


redis 哨兵 时间 redis 哨兵模式_服务器_02

 

 

如果redis设置了密码,则需在redis配置中设置密码,sentinel实际连接的也是redis的服务器节点。