巧用 | 低成本高可用,巧用Redis
Redis高可用主要有网络层面的keepalived,注册中心的zookeeper,这两种方案,这两种方案,第一种方案浪费掉了一台,第二种方案,工作成本相当高。本文介绍使用sentinel做redis高可用方案设计。
Redis Sentinel
Sentinel
sentinel是Redis官方为集群提供的高可用的解决方案,在实际项目中是使用sentinel做redis自动故障转移。同时也增加了监控消息的通知,这样客户端就可以根据消息类型去判断服务器的状态,做适配操作。
Sentinel功能列表
Monitoring 这是Sentinel中持续检查集群中的master,slave状态,用于判断是否存活的。
Notification 在发现redis死亡以后,执行的脚本。
Automatic failover 故障转移脚本
Configuration provider 保存可信赖的当前master地址。
Sentinel配置
Sentinel本质上是一个特殊模式下的redis服务器。通过不同配置区分提供服务。
sentinel.conf 配置
// [监控名称] [ip] [port] [多少sentinel同意才发生故障转移]
sentinel monitor mymaster 127.0.0.1 6379 2
// [监控名称] [Master多少毫秒后不回应ping命令,就认为master是主观下线状态]sentinel down-after-milliseconds mymaster 60000</pre>// [故障转移超时时间]sentinel failover-timeout mymaster 180000//[在执行故障转移时,最多可以有多少个从服务器同时对新的主服务器进行同步]sentinel parallel-syncs mymaster 1
启动命令
redis-sentinel sentinel.conf
启动后Sentinel会:
以10秒一次的频率,向被监视的master发送info命令,根据回复获取master当前信息。以1秒一次的频率,向所有redis服务器、包含sentinel在内发送PING命令,通过回复判断服务器是否在线。以2秒一次的频率,通过向所有被监视的master,slave服务器发送包含当前sentinel,master信息的消息。
故障转移三种消息接收方式
当Redis服务器发现故障以后,sentinel通过raft算法投票选举新的master,故障转移过程通过哨兵的api获取/订阅接收事件消息
脚本接收
即,代执行脚本
//当故障转移期间,可以指定一个“通知”脚本用来告知系统管理员,当前集群的情况。
//脚本被允许执行的最大时间为60秒,如果超时,脚本将会被终止(KILL)sentinel notification-script mymaster /var/redis/notify.sh
复制代码
//故障转移期之后,配置通知客户端的脚本.sentinel client-reconfig-script mymaster /var/redis/notifyReconfig.sh
客户端直接接收
使用发布订阅模式实现 Sentinel的故障转移消息通知使用的是Redis的发布订阅模式,即,在故障转移期间所有产生的事件信息,都会通过频道发布出去,例如我们加一台slave服务,sentinel监听到后会发布加slave消息到+slave频道上,客户端只需要订阅+slave频道即可接收到对应的消息。消息格式如下
[实例类型] [事件服务器名称] [服务器ip] [服务器端口] @[master名称] [ip] [端口]
<instance-type> <name> <ip> <port> @ <master-name> <master-ip> <master-port>
通知消息格式如下
* //订阅类型, *即订阅所有事件消息。
-sdown //消息类型
slave 127.0.0.1:6379 127.0.0.1 6379 @ mymaster 127.0.0.1 6381
订阅消息格式
using (RedisSentinel rs = new RedisSentinel(CurrentNode.Host, CurrentNode.Port)){var redisPubSub = new RedisPubSub(node.Host, node.Port);redisPubSub.OnMessage += OnMessage;redisPubSub.OnSuccess += (msg) =>{};redisPubSub.OnUnSubscribe += (obj) =>{};redisPubSub.OnError = (exception) =>{ };redisPubSub.PSubscribe("*");}
服务间接收
这种方式在第二种基础上扩展了一层,应用不需要直接订阅sentinel,单独空余出服务去做,添加api来做。例如:应用端提供回调api,在api逻辑下刷新内存中的redis连接
http://127.0.0.1/redis/notify.api
监控到异常以后,进行调用
httprequest.post("http://127.0.0/redis/notify.api");
整体设计
整体设计如下
小明菜市场
推荐阅读
● 实践 + 理论 | API 接口安全性设计
● 文末送书 | 数据分析简单入门
● 优雅 | 今天很水的文章-Excel导入导出
● 理论 | 当 Spring Boot 遇上了消息队列......
● 实践 | kafka 基本使用
巧用 | 低成本高可用,巧用Redis相关推荐
- E往无前 | 人人在用的微信支付,腾讯云大数据ES如何让它低成本高可用?
<E往无前>系列将着重展现腾讯云ES在持续深入优化客户所关心的「省!快!稳!」诉求,能够在低成本的同时兼顾高可用.高性能.高稳定等特性,可以满足微盟.小红书.微信支付等内外部大客户的核心场 ...
- Redis低成本高可用方案设计
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:蘑菇先生 cnblogs.com/mushroom/p/45 ...
- Redis系列(四)-低成本高可用方案设计
关于Redis高可用方案,看到较多的是keepalived.zookeeper方案. keepalived是主备模式,意味着总有一台浪费着.zookeeper工作量成本偏高. 本文主要介绍下使用官方s ...
- Redis高可用集群Redis Cluster搭建
前言: Redis3.0版本之前,可以通过Redis Sentinel(哨兵)来实现高可用 ( HA ),从3.0版本之后,官方推出了Redis Cluster,它的主要用途是实现数据分片(Data ...
- redis高可用:keepalived+redis主从部署
1 Redis高可用的可选方案 Redis的高可用方案目前主要5种方式. 1) Redis Master-Slave + Keepalived + VIP. 这是很经典的db架构,也可以用与mysq ...
- 实践 | Centos 7搭建LVS+Keepalived高可用Web服务群集群
LVS + Keepalived 高可用集群 Keepalived的设计目标是构建高可用的LVS负载均衡的集群,可以调用ipvsadm工具创建虚拟机,不仅仅用作双机热备,还可以使用keepalived ...
- redis详解(四)-- 高可用分布式集群
一,高可用 高可用(High Availability),是当一台服务器停止服务后,对于业务及用户毫无影响. 停止服务的原因可能由于网卡.路由器.机房.CPU负载过高.内存溢出.自然灾害等不可预期的原 ...
- Redis高可用分布式内部交流(九)
这是上月在公司内部的一次分享,现把PPT及交流内容整理成博客. 阅读目录: 高可用 数据同步 分布式 分布式集群时代 总结 高可用 高可用(High Availability),是当一台服务器停止服务 ...
- 如何搭建高可用redis架构?
作者:温国兵,曾任职于酷狗音乐,现为三七互娱 DBA.目前主要关注领域:数据库自动化运维.高可用架构设计.数据库安全.海量数据解决方案.以及开源技术在互联网中的应用 1 题记 Redis 是一个开源的 ...
最新文章
- Debian/Ubuntu/Raspbian 时间同步
- iOS Bluetooth(蓝牙)
- 【C 语言】字符串拷贝 ( 字符串拷贝业务逻辑代码 | 分离 主函数 与 字符串拷贝 业务模型 )
- Silverlight WCF 初尝小结
- Ajax-简单的HelloWorld实例,使用了XMLHttpRequest(two)
- {}是set类型还是dict类型呢
- JAVA8之lambda表达式
- python代码颜色不同_python – 两个不同颜色的颜色在同一个imshow matplotlib
- Spring 使用Cache(转)
- 互联网架构:屡试不爽的架构三马车
- Web Worker API
- JSP编程,url中加斜杠和不加斜杠的区别
- python抓包库_python抓包_python 抓包_python 抓包库 - 云+社区 - 腾讯云
- 设计模式的原则和分类 思想模型
- WEB - 使用CSS 画一个正方体
- 名片管理系统python详解_取名字大全_免费男孩女孩起名字
- 笔记本电脑已连接WIFI密码查看方法
- Photoshop教程四:Camera RAW 批量调色
- 蓝桥杯—奇妙的数字(小明发现了一个奇妙的数字)
- C# webBrowser 通过代理访问网页
热门文章
- VBA调用DOS程序两种方法
- eclipse package explorer视图中怎么让default package不显示?
- GitHub上如何删除repository仓库
- Centos安装NFS服务器配置及挂载教程
- [CTO札记]谁在使用SNS
- 统一建模语言UML轻松入门(1)――基本概念
- 分布式缓存原理——一致性hash算法(hash环)、Hash槽
- 地府后台管理系统30.已经在开发中,介绍下目前的工作进度和未来展望
- 通过MySQL自动同步刷新Redis
- linux按照mysql为何如此简单_手把手教你在Linux下安装MySQL