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的源码包:

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配置中设置密码,sentinel实际连接的也是redis的服务器节点。

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐