Redis高可用架构—Keepalive+VIP
最近整理一下Redis高可用架构的文档,也准备分享出来,虽然这些架构也不是很复杂。Redis的高可用方案目前主要尝试过5种方式,其中2种方式已经在线上使用。
1)Redis Master-Slave + Keepalive + VIP。
这是很经典的db架构,也可以用与mysql的主从切换。
基本原理是:Keepalive通过脚本检测master的存活,然后通过漂移VIP(Virtual IP)完成主从切换。
2)Redis Master-Slave + DNS Service + Sentinel。
基本原理是Sentinel集群进行Redis的存活检测和Redis M-S状态切换。
完成切换之后,sentinel调用notification-script参数制定的配置文件,通知DNS Server更改DNS配置,master dns解析执行新的master。
3)Redis Master-Slave + Configure Center(Zookeeper) + Sentinel.
基本原理和第三种方案相似,只是notification-script通知的是配置中心完成redis连接配置的修改,比如Zookeeper实现的配置中心。
4)Redis Master-Slave + Sentinel + Twemproxy + Lvs.
这种方案层次比较多,sentinel通知twemproxy进行redis m-s的配置更改。
5)Redis Cluster,目前redis3.0接近发布stable版本了。
1、基本架构图

2、基本构建与原理
1)Keepalive + VIP : 在redis master-slave上部署keepalived、redis instance存活检测脚本、以及告警通知脚本。
2)当redis master失效的时候,VIP从master上漂移到slave上,完成m-s角色和配置更改。
3)客户端连接redis的参数中host设置的是VIP,整个切换过程对客户端透明。
3、优缺点与适用场景。
优点:实现简单,成本低。
缺点:整个集群的最大吞吐量受限于redis单实例的处理能力,除非一个应用使用多套这种Keepalive+VIP方案。
因而扩展能力较差,而且不适合目前单机部署多个redis实例的部署场景,而我们的一个物理机上至少部署8个redis实例。
目前我们DBA已经否定了这种架构,不再支持部署这种集群。
适合场景:并发请求不是很高的应用。
4、Keepalive配置和检测脚本
下面keepalive的简单配置、检测和通知脚本。
1)keepalive.conf
master和slave使用相同的配置脚本,其中要注意的地方state的配置都是backup状态,而且都是非抢占方式nopreempt。
vrrp_script chk_redis {
script "/etc/keepalived/redis_check.sh"
interval
}
vrrp_instance VI_1 {
state BACKUP
interface bond0
virtual_router_id
priority
nopreempt
authentication {
auth_type PASS
auth_pass redis
}
track_script {
chk_redis
}
virtual_ipaddress {
10.203.31.216
}
notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
}
2)redis_check.sh,redis实例存活检测脚本。
当master检测到redis处于failed状态,将会释放VIP,slave机器将会获取VIP。
#!/bin/bash
REDIS_BIN='/apps/svr/redis/bin'
REDIS_MASTER_HOST='127.0.0.1'
REDIS_MASTER_PORT= ALIVE=`$REDIS_BIN/redis-cli -h $REDIS_MASTER_HOST -p $REDIS_MASTER_PORT PING` if [ "$ALIVE" == "PONG" ]; then
echo $ALIVE
exit
else
echo $ALIVE
exit
fi
3)master-slave状态切换通知脚本,包括推送告警短信。
notify.sh
#!/bin/bash
REDIS_BIN='/apps/svr/redis/bin'
MASTER_IP='192.168.0.216' # virtual ip
MASTER_PORT= status=$
echo $status if [ "$status" = "master" ]
then
# promoting slave to master
echo " config set slave-read-only no " | $REDIS_BIN/redis-cli -h 127.0.0.1 -p $MASTER_PORT
echo " slaveof no one " | $REDIS_BIN/redis-cli -h 127.0.0.1 -p $MASTER_PORT
echo " config rewrite " | $REDIS_BIN/redis-cli -h 127.0.0.1 -p $MASTER_PORT
# pushing simple message to mobile or email elif [ "$status" = "backup" ]
then
# degrading master to slave
echo "config set slave-read-only yes " | $REDIS_BIN/redis-cli -h 127.0.0.1 -p $MASTER_PORT
echo "slaveof $MASTER_IP $MASTER_PORT" | $REDIS_BIN/redis-cli -h 127.0.0.1 -p $MASTER_PORT
echo " config rewrite " | $REDIS_BIN/redis-cli -h 127.0.0.1 -p $MASTER_PORT # pushing simple message to mobile or email
fi exit
Redis高可用架构—Keepalive+VIP的更多相关文章
- 如何构建 Redis 高可用架构?
温国兵 民工哥技术之路 今天 1 .题记 Redis 是一个开源的使用 ANSI C 语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value 数据库,并提供多种语言的 API. 如今,互 ...
- Redis 高可用架构设计(转载)
转载自:https://mp.weixin.qq.com/s?__biz=MzA3NDcyMTQyNQ==&mid=2649263292&idx=1&sn=b170390684 ...
- Redis高可用架构
前言 Redis是一个高性能的key-value数据库,现时越来越多企业与应用使用Redis作为缓存服务器.楼主是一枚JAVA后端程序员,也算是半个运维工程师了.在Linux服务器上搭建Redis,怎 ...
- 三分钟带你入门 redis 高可用架构之哨兵
什么是哨兵? 哨兵(Sentinel)是 redis 的高可用性解决方案,前面我们讲的主从复制它是高可用的基础,需要人工介入才能完成故障转移,哨兵可以解决这个问题,在主从复制情况下,当主节点发生故障时 ...
- Redis(1.7)Redis高可用架构(理论篇)
[0]常用架构种类 (0.1)单机Redis (0.2)单纯的Redis主从复制 (0.3)哨兵Sentinel+Redis主从复制集群(实现高可用自动故障转移) (0.4)Redis Cluster ...
- Redis|Sentinel 高可用架构
一 前言 Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端 ...
- 数据库高可用架构(MySQL、Oracle、MongoDB、Redis)
一.MySQL MySQL小型高可用架构 方案:MySQL双主.主从 + Keepalived主从自动切换 服务器资源:两台PC Server 优点:架构简单,节省资源 缺点:无法线性扩展,主从失 ...
- Redis Sentinel高可用架构
Redis目前高可用的架构非常多,比如keepalived+redis,redis cluster,twemproxy,codis,这些架构各有优劣,今天暂且不说这些架构,今天主要说说redis se ...
- [转]数据库高可用架构(MySQL、Oracle、MongoDB、Redis)
一.MySQL MySQL小型高可用架构 方案:MySQL双主.主从 + Keepalived主从自动切换 服务器资源:两台PC Server 优点:架构简单,节省资源 缺点:无法线性扩展,主从失 ...
随机推荐
- springboot+mybatis+maven角色权限框架
发布时间:2018-10-24 技术:springboot,mybatis,maven,shiro 概述 Springboot作为基础框架,使用mybatis作为持久层框架 使用官方推荐的th ...
- Mac OS使用技巧十九:Safari碉堡功能之二查看网页源代码
由于大三下的时候选修了搜索技术.了解了网络上搜索引擎和网络爬虫的信息扒取的一些东西,后来我们做了一个比較水的东西.就是仅仅扒取了几家较大的下载站点几十个软件的评分下载量等信息,当用户输入一个 ...
- ios中Pldatabase的用法(3)
#import "ViewController.h" @interface ViewController () @property(nonatomic,retain)PLSqlit ...
- Distributed systems theory for the distributed systems engineer
Gwen Shapira, SA superstar and now full-time engineer at Cloudera, asked a question on Twitter that ...
- hihocoder234周 计算不包含黑点的矩形个数
题目链接 问题描述 一个棋盘有n条横线,m条竖线,上面有k个黑点,问有多少个不包含黑点的矩形. 数据范围: n和m最大为1000,k最大为10 方法一:动态规划 复杂度n*m*k. import ja ...
- jenkins 图文教程 下载 --》安装--》更改默认端口号,附自启动脚本
参考文章: 1.http://www.ibm.com/developerworks/cn/java/j-lo-jenkins/ 2.http://blog.csdn.net/zhaolixin007/ ...
- Linux shell命令:用 !$ 防止误操作
shell 的通配符匹配非常强大,不过也非常危险,不少同学都碰到这样的问题,比如 rm a*,结果一个手抖,a 和星号之间多了个空格,结果目录下的文件都灰飞烟灭了…… bash 支持一个特殊的变量 ! ...
- (转)Groupon前传:从10个月的失败作品修改,1个月找到成功 并不挶泥在这个点子上面,它反而往后站一步,看看他们已经做好的这个网站,可以再怎么包装成另一个完完全全不同的网站?所有的人所做的每件失败的事情中, 一定有碰到或含有成功的答案」在里面,只是他们不知道而已。 人不怕失败」,只怕宣布失败」
(转)Groupon前传:从10个月的失败作品修改,1个月找到成功 今天读到 一个非常励志人心的故事 ,就像现在「叶问」有「前传」,最近很火红的团集购网站Groupon 也出现了「Groupon前传」 ...
- jquery 滑动取值
JavaScript 滑动条效果 jquery 滚动条插件 仿iphone苹果横行滚动条美化样式商品图片展示
- 模型验证组件 FluentValidation
FluentValidation 是 .NET 下的模型验证组件,和 ASP.NET MVC 基于Attribute 声明式验证的不同处,其利用表达式语法链式编程,使得验证组件与实体分开.正如 Flu ...