当前位置: 首页 > news >正文

Redis 哨兵模式 搭建

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();
		}

相关文章:

  • PDF 转换为 Word、HTML、LaTeX 和 Markdown 格式
  • TDengine 语言连接器(C/C++)
  • 智能手机功耗测试
  • jxls2.10实现模板导出/单元格合并/自定义标签实现单元格隐藏
  • 为什么ASCII的A是65[特殊字符]
  • NET模式下如何配置虚拟机的IP地址为静态的
  • 在Ubuntu 22.04里使用KVM创建虚拟机Ubuntu 22.04
  • 【源码】Mybatis源码
  • 图片文本识别OCR+DeepSeekapi实现提取图片关键信息
  • Linux权限理解
  • [IEEE TIP 2024](cv即插即用模块分享)IdeNet信息增强模块 性能提升必备!
  • 如何用海伦公式快速判断点在直线的哪一侧
  • MCP(模型上下文协议)简单案例
  • XILINX DDR3专题---(1)IP核时钟框架介绍
  • Python及C++中的列表
  • 2025届蓝桥杯JavaB组个人题解(题目全)
  • 【音视频】SDL播放PCM音频
  • 【音视频】SDL渲染YUV格式像素
  • 十六届蓝桥杯嵌入式省赛直播基本外设驱动
  • 设计模式 Day 8:策略模式(Strategy Pattern)完整讲解与实战应用
  • wordpress文章模块化插件/seo厂家电话
  • 人大常委会网站建设意见/外贸推广渠道有哪些
  • 做免费的网站教程/什么软件可以发布推广信息
  • 山东宏远建设有限公司网站/国外seo
  • 我想找网站帮忙做宣传/瑞金网络推广
  • wordpress 文章 页码/百度快速seo优化