论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
数据库
›
Nosql
›
Redis 哨兵模式的原理及其搭建
Redis 哨兵模式的原理及其搭建
傲渊山岳
金牌会员
|
2024-1-10 04:43:38
|
显示全部楼层
|
阅读模式
楼主
主题
901
|
帖子
901
|
积分
2703
1.Redis哨兵
Redis提供了哨兵(Sentinel)机制来实现主从集群的自动故障恢复。
1.1.哨兵原理
1.1.1.集群结构和作用
哨兵的结构如图:
哨兵的
作用
如下:
监控
:Sentinel 会不断检查您的master和slave是否按预期工作。
自动故障恢复
:如果master故障,Sentinel会将一个slave提升为master。当故障实例恢复后也以新的master为主。
通知
:Sentinel充当Redis客户端的服务发现来源,当集群发生故障转移时,会将最新信息推送给Redis的客户端。
1.1.2.集群监控原理
Sentinel基于心跳机制监测服务状态,每隔1秒向集群的每个实例发送ping命令。
主观下线:如果某sentinel节点发现某实例未在规定时间响应,则认为该实例
主观下线
。
客观下线:若超过指定数量(quorum)的sentinel都认为该实例主观下线,则该实例
客观下线
。quorum值最好超过Sentinel实例数量的一半。
1.1.3.集群故障恢复原理
一旦发现master故障,sentinel需要在salve中选择一个作为新的master,
选择依据
是这样的:
首先会判断slave节点与master节点断开时间长短,如果超过指定值(down-after-milliseconds * 10)则会排除该slave节点。
然后判断slave节点的slave-priority值,越小优先级越高,如果是0则永不参与选举。
如果slave-prority一样,则判断slave节点的offset值,越大说明数据越新,优先级越高。
最后是判断slave节点的运行id大小,越小优先级越高。
当选出一个新的master后,该如何
实现切换
呢?
流程如下:
sentinel给备选的slave1节点发送slaveof no one命令,让该节点成为master。
sentinel给所有其它slave发送slaveof 192.168.150.101 7002 命令,让这些slave成为新master的从节点,开始从新的master上同步数据。
最后,sentinel将故障节点标记为slave,当故障节点恢复后会自动成为新的master的slave节点
1.1.4.总结
Sentinel的三个作用是什么?
监控
故障转移
通知
Sentinel如何判断一个redis实例是否健康?
每隔1秒发送一次ping命令,如果超过一定时间没有相向则认为是主观下线
如果大多数sentinel都认为实例主观下线,则判定服务下线
故障转移步骤有哪些?
首先选定一个slave作为新的master,执行slaveof no one
然后让所有节点都执行slaveof 新master
修改故障节点配置,添加slaveof 新master
1.2.搭建哨兵集群
1.2.1.集群结构
这里搭建一个三节点形成的Sentinel集群,来监管之前的Redis主从集群。如图:
三个sentinel实例信息如下:
节点IPPORTs1192.168.150.10127001s2192.168.150.10127002s3192.168.150.10127003
1.2.2.准备实例和配置
要在同一台虚拟机开启3个实例,必须准备三份不同的配置文件和目录,配置文件所在目录也就是工作目录。
创建三个文件夹,名字分别叫s1、s2、s3:
# 进入/tmp目录
cd /tmp
# 创建目录
mkdir s1 s2 s3
复制代码
如图:
然后我们在s1目录创建一个sentinel.conf文件,添加下面的内容:
port 27001
sentinel announce-ip 192.168.150.101
sentinel monitor mymaster 192.168.150.101 7001 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 60000
dir "/tmp/s1"
复制代码
解读:
port 27001:是当前sentinel实例的端口
sentinel monitor mymaster 192.168.150.101 7001 2:指定主节点信息
mymaster:主节点名称,自定义,任意写
192.168.150.101 7001:主节点的ip和端口
2:选举master时的quorum值
然后将s1/sentinel.conf文件拷贝到s2、s3两个目录中(在/tmp目录执行下列命令):
# 方式一:逐个拷贝
cp s1/sentinel.conf s2
cp s1/sentinel.conf s3
# 方式二:管道组合命令,一键拷贝
echo s2 s3 | xargs -t -n 1 cp s1/sentinel.conf
复制代码
修改s2、s3两个文件夹内的配置文件,将端口分别修改为27002、27003:
sed -i -e 's/27001/27002/g' -e 's/s1/s2/g' s2/sentinel.conf
sed -i -e 's/27001/27003/g' -e 's/s1/s3/g' s3/sentinel.conf
复制代码
1.2.3.启动
为了方便查看日志,我们打开3个ssh窗口,分别启动3个redis实例,启动命令:
# 第1个
redis-sentinel s1/sentinel.conf
# 第2个
redis-sentinel s2/sentinel.conf
# 第3个
redis-sentinel s3/sentinel.conf
复制代码
启动后:
1.2.4.测试
尝试让master节点7001宕机,查看sentinel日志:
查看7003的日志:
查看7002的日志:
作者:
上古南城
出处:
https://www.cnblogs.com/zhangwencheng
版权:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出
原文链接
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
正序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
发新帖
回复
傲渊山岳
金牌会员
这个人很懒什么都没写!
楼主热帖
Swift之Codable自定义解析将任意数据类 ...
SQL Server创建表
2022你不容错过的软件测试项目实战(we ...
MySQL max() min() 函数取值错误
2022年春节后这波疫情对于国内SAP咨询 ...
ThinkPHP5 远程命令执行漏洞
MySQL数据库-数据表
K8S 性能优化 - K8S APIServer 调优 ...
【云原生】Docker的安装与使用(适用于 ...
全球各类卫星遥感图像的下载方法汇总 ...
标签云
挺好的
服务器
快速回复
返回顶部
返回列表