【NoSQL】抛弃VIP,使用consul和sentinel构建redis的高可用系统
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,背景:1.传统redis高可用方案只加了sentinel,在主库故障后,虽然可以选主,然后切换只读参数,但是,对应用来说却需要更改连接的IP或者在hosts中更改解析。算得上是半自动。2.利用cons
千家信息网最后更新 2025年11月07日【NoSQL】抛弃VIP,使用consul和sentinel构建redis的高可用系统
背景:
1.传统redis高可用方案只加了sentinel,在主库故障后,虽然可以选主,然后切换只读参数,但是,对应用来说却需要更改连接的IP或者在hosts中更改解析。算得上是半自动。
2.利用consul系统的服务注册与服务健康检查功能可以实现全自动的故障切换与地址解析。
架构:
搭建:
1.建立consul集群,在redis节点上布置consul agent
2.建立sentinel集群
3.注册服务(重点)
- 首先在redis2222实例上新建redis主从检测脚本
cat >/root/check/redis_role.sh<注:脚本使用方式:/root/check/redis_role.sh 2222 master
第一个参数2222代表端口
第二个参数master代表主,也可使用slave
原理:摘出info命令中replication段的role属性,然后和第二个变量相对比,相同,则输出0
(shell脚本正常运行的返回值),否则返回2(shell脚本执行异常的返回值) - 其次:创建consul的redis服务配置文件
cat >/etc/consu/redis_2222.json<在redis3333实例所在的主机上同样操作。
解释:在2222实例上我们注册两个服务,一个为redis-master,一个为redis-slave。
在3333实例上也注册了同样的两个服务,在consul系统中,将json配置文件中name属性相同的
服务视为同一个服务。因为consul本身是具备健康检查的功能,一个服务中如果两个节点都OK
服务域名解析是将会轮询到两个节点中,但健康检查失败后,域名解析时会自动踢出fail节点。
情况1:redis2222为主实例,redis3333为从实例 通过在脚本对redis的主从属性进行检查, "args":["/root/check/redis_role.sh","2222","master"], 在脚本中,我们设置了读取传入的两个参数并进行使用,在consul配置文件中,对传入参数 需要使用","分割,并且无论数字或者字符串都需要加上双引号。 2222的实例中role为master,3333的实例role为 slave。分别满足了redis-master和redis-slave 的健康检查,consul在解析redis-master.service.consul和redis-slave.service.consul时分别指向 了redis2222的主机和redis3333的地址。 此时: ping redis-master.service.consul 》192.168.1.131 ping redis-slave.service.consul 》192.168.1.104 APP可以通过redis-master.service.consul:2222对redis进行写入, 通过redis-master.service.consul:3333对redis进行分散读请求 consul web页面如图情况2:redis2222节点故障,sentinel自动提升redis3333节点为主节点,2222重新上线后,被 sentinel集群配置为指向3333的从节点。 此时: ping redis-master.service.consul 》192.168.1.104 ping redis-slave.service.consul 》192.168.1.131 APP可以通过redis-master.service.consul:3333对redis进行写入, 通过redis-master.service.consul:2222对redis进行分散读请求 consul web页面如图后记: 1.本文中为了显著区分两个redis实例,对端口进行了区分,实际应用推荐使用相同端口(如2222) 这样每次访问redis-master.service.consul:2222都能访问到主实例 每次访问redis-master.service.consul:2222都能访问到从实例 2. consul定期执行健康检测脚本并接收返回值0作为服务处于正常的标志,返回值1作为服务处于警告 状态,除此之外任何其他返回值都被认为服务处于故障状态。实际使用时根据自身情况设置健康检测脚本 执行的频率 3.这种切换架构的便利性建立在数据库端可以自洽的完成主从选举与切换的特性上,同理,这种思路还 可以用在consul+MongoDB副本集,consul+PXC集群上。 4.官方文档地址:`https://www.consul.io/docs/index.html` 相关配置文件已放置在GitHub:`https://github.com/naughtyGitCat/HA_DB/tree/master/Consul`
服务
实例
脚本
节点
健康
两个
参数
检查
配置
故障
文件
集群
切换
相同
主从
地址
属性
情况
端口
检测
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络技术基础是学什么
amh 数据库
软件开发经营需要什么资质
TiVA数据库出口总附加值
数据库表的约束有什么作用
如何把直播源放在服务器
数据库关系运算代数表达
网络安全上市龙头公司排名
哈库玛市服务器
网络技术有两个指标
浪潮塔式服务器销售中心
网络安全防护儿歌
女孩学会计还是网络技术好
北京有哪些互联网科技公司
一个战网同一个服务器
软件开发视频教程第三节
怎么建销售单的数据库
数据库查找姓名重复的用户
软件开发语言编程培训
奇点网络技术有限公司
网络安全公司分析
南京智能软件开发系统
贵州灼跃互联网科技有限公司
国家网络安全手抄报的图片
品质网络技术咨询怎么样
如何查数据库的数据量
通过外网ip管理服务器
上海磐亘互联网科技有限公司
软件开发源头
网络安全教师人才