Redis 哨兵模式 搭建

发布于:2025-04-14 ⋅ 阅读:(20) ⋅ 点赞:(0)

1 . 哨兵模式拓扑 与 简介

本文介绍如何搭建 单主双从 多哨兵模式的搭建
哨兵有12个作用 。通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器和从服务器。
当哨兵监测到master宕机,会自动将slave切换成master,然后通过发布订阅模式通知其他的从服务器,修改配置文件,让它们切换主机。
然而一个哨兵进程对Redis服务器进行监控,可能会出现问题,为此,我们可以使用多个哨兵进行监控。各个哨兵之间还会进行监控,这样就形成了多哨兵模式。
假设主服务器宕机,哨兵1先检测到这个结果,系统并不会马上进行failover(故障切换)过程,仅仅是哨兵1主观的认为主服务器不可用,这个现象成为主观下线。当后面的哨兵也检测到主服务器不可用,并且数量达到一定值时,那么哨兵之间就会进行一次投票,投票的结果由一个哨兵发起,进行failover操作。切换成功后,就会通过发布订阅模式,让各个哨兵把自己监控的从服务器实现切换主机,这个过程称

2. 搭建过程--主从服务器 

2.1  首先要在各个服务器上装上redis服务器

2.2  节点规划

6301:主

6302:从

6303:从

26301:哨兵模式节点一

2.3 切换到redis的根目录 ,建立redis-group
mkdir redis-group
cp redis.conf ./redis-group/redis-6301.conf
cp redis.conf ./redis-group/redis-6302.conf
cp redis.conf ./redis-group/redis-6303.conf
2.4 分别修改配置文件
先修改redis-6301.conf 配置文件  6301是主服务器
vi redis-6301.conf

将参数的值改为以下                 

daemonize yes
pidfile /var/run/redis6301.pid
port 6301
logfile "/logs/6301.log"
dbfilename dump6301.rdb
requirepass pp123

再修改从服务器 ,redis-6302.conf和redis-6303.conf , 这些选项一般都有, 只需去掉前面的 ‘#’ 即可 。 日志要配置好,这样能使自己更快发现问题

vi redis-6302.conf
daemonize yes
pidfile /var/run/redis6302.pid
port 6302
logfile "/logs/6302.log"
dbfilename dump6302.rdb
slaveof  47.98.0.1  6301


==========================

vi redis-6303.conf
daemonize yes
pidfile /var/run/redis6303.pid
port 6303
logfile "/logs/6303.log"
dbfilename dump6303.rdb
slaveof  47.98.0.1   6301
若主服务器设置了访问密码,还需要设置
masterauth 123456(主服务器的密码)
2.5 启动这些服务器
 
./redis-server ../redis-group/redis-6301.conf
./redis-server ../redis-group/redis-6302.conf
./redis-server ../redis-group/redis-6303.conf
2.6 验证一下主从关系是否搭建成功
redis-cli  -p   6301
redis-cli  -p   6302 
redis-cli  -p   6303 
输入 info replication 可以看到相关信息
我们在 6301 里set入一个变量 ,看看6302 和 6302 是否可以get到
> ./redis-cli -p 6301
127.0.0.1:6301> set monkey 123
OK

> ./redis-cli -p 6302
127.0.0.1:6302> get monkey
"123"

> ./redis-cli -p 6303
127.0.0.1:6303> get monkey
"123"
那么可以确定主从关系是已经搭建好了。

3. 哨兵模式 

搭建了主从  ,要实现高可用  ,还得建立哨兵模式
3.1 复制 redis根目录下的 sentinel.conf 到 redis-group 下
cp sentinel.conf ./redis-group

3.2 修改和调整以下设置

port 26301
#工作路径,注意路径不要和主重复
dir "/usr/local/redis-6379"

daemonize yes

#关闭保护模式
protected-mode no
# 指明日志文件名
logfile "/logs/sentinel.log"

#哨兵监控的master,主从配置一样,这里只用输入redis主节点的ip/port和法定人数。
sentinel monitor mymaster 47.98.0.1 6301 1

#设置master和slaves验证密码
sentinel auth-pass mymaster 123   (如果redis没设置密码,则不用设置)

#这个配置项指定了需要多少失效时间,一个master才会被这个sentinel主观地认为是不可用的。 单位是毫秒,默认为30秒 ,这里设置为5秒
sentinel down-after-milliseconds mymaster 5000
3.3 启动哨兵
cd src 
./redis-sentinel ../redis-group/sentinel.conf
启动后开下日志
tail  -f  sentinel.log

4 . 可能会遇到的一些问题

4.1 sentinel 不能自动选举出新的master并,出现 failover-abort-no-good-slave 错误
修改redis.conf
三台全部修改为
bind 0.0.0.0     问题解决
4.2 master挂掉后如何恢复
一般挂掉重启后会变成slave ,但是进去后会发现与master的连线是 down的

此时我们需要手动修改 ,在配置文件里加上
slaveof  x.x.x.x  6301
masterauth 123456
首先我们要在新的master上save操作
#save
ok

如果我们需要把down掉的master 重新恢复成master 就需要   复制 当前master的   dump.rdb 和 appendonly.aof , 覆盖 down掉的 master 的 dump.rdb 和 appendonly.aof 

cp dump.rdb appendonly.aof ../master_redis

然后再重新启动 。

启动请先检查配置文件 ,因为哨兵模式下  ,故障切换过程中,哨兵进程会自动修改配置文件 。

比如 down掉的master 重新启动后 会在配置文件下加上

slaveof  x.x.x.x  6302

所以当配置好哨兵模式后最好先备份一下,可以参考这个文章

https://www.cnblogs.com/xiao-xue-di/p/11102315.html

4.3 从机挂了怎么办

直接重启动后 自动数据同步

4.4 从机日志 出现Unable to AUTH to MASTER: -ERR Client sent AUTH, but no password is set ,  master_link_status: down 怎么办

由于安全模式 protected-mode yes

所以redis规定 主从之间通讯需要设置密码

所以必须在master设置一个密码 

requirepass 123456
从机上 
masterauth 123456 

5. 例子使用 tp6 如何调用

检查本地缓存的 master ip port, 有则connect 下,失败则去轮询哨兵查询正式的主库地址
        $redis = new \Redis();
		$redis->connect(Config::get('redisset','host'),Config::get('redisset','port'));
		$redis->auth('pp123');
		$res = $redis->ping();
		if($res == '+PONG'){
			$redis->set('testname','sanshang');
			$redis->close();
		}else{
			//查询哨兵
			$redis->connect(Config::get('redisset','soshost'),Config::get('redisset','port'));
			$result = $redis->rawCommand('SENTINEL', 'master', 'mymaster');
			$redis->connect($result['3'],$result['5']);
			$redis->set('testname','sanshang');
			$redis->close();
		}