redis-sentinel 高可用方案实践
近期公司的一块核心业务使用redis作为配置转发中心,存在单点问题,考虑服务的可靠性。针对业务需求,我们确定了我们的需求:
- 异地跨机房容灾
- 故障自动切换
- 尽可能高的保证数据不丢失
针对以上需求,我们分别对redis主从复之,redis-cluster,redis-sentinel方案进行了调研,对比结果如下:
|
方案 |
数据可靠性 |
服务可靠性 |
风险 |
|
主从备份 |
高 |
无 |
出问题需要手动切换,中间推送的数据会丢失 |
|
redis-cluster |
高 |
高 |
异地机房热备,机房间网络出问题的情况下会出现脑裂的问题;同时我们对redis-cluster无运维和使用经验 |
|
redis-sentinel |
高 |
中 |
在master宕机后,客户端会通过api查询当前master归属,重连redis 使用内网同步,主从之间的数据丢失同步基本可以忽略,业务可以忍受 |
基于以上调研,我们放弃了主从备份方案,对redis-cluster及redis-sentinel方案进行了深入分析。redis-cluster采用主从备份、master选举的方式实现高可用,但在异地机房部署时,如配置不当,很容易引发脑裂问题;同时由于redis-cluster我们并没有成熟的运维经验,最终放弃了该方案,转向redis-sentinel。 redis-sentinel就像他的名字一样,他是一个哨兵,监控master状态,如果超过规定时间没有响应,则自动进行主从切换,期间会有一段时间(决定于具体的配置参数)redis集群无法提供服务 。原理类似mysql的MHA。redis-sentinel-server同时提供了一套接口,用于查询当前集群的状态,Java的客户端有完整的封装,php的扩展并没有提供相应功能,在github上有几个package,但由于太过复杂,不适合迁移到现有业务(没有使用命名空间和composer),所以基于phpredis-2.2.8封装了一个简易的redis-sentinel客户端,目前已在核心业务生产环境上稳定运行。Java客户端与php客户端通过查询redis-sentinel集群获得当前redis-master地址,进行连接,当集群发生主从切换时,客户端会进行重连。 php-redis-sentinel的demo代码如下:
|
1
2
3
4
5
6
7
8
9
10
|
$sentinel_pool = new \Jenner\RedisSentinel\SentinelPool();$sentinel_pool->addSentinel('127.0.0.1', 26379);$sentinel_pool->addSentinel('127.0.0.1', 26380);$address = $sentinel_pool->master('mymaster');print_r($address);$redis = $sentinel_pool->getRedis('mymaster');$info = $redis->info();print_r($info); |
参考资料: redis-sentinel: https://redis.io/topics/sentinel cluster-tutorial: https://redis.io/topics/cluster-tutorial cluster-spec: https://redis.io/topics/cluster-spec
原创文章,转载请注明: 转载自始终不够
redis-sentinel 高可用方案实践的更多相关文章
- Redis Sentinel 高可用方案
redis 主从复制的问题 Redis主从复制可将主节点数据同步给从节点,从节点此时有两个作用: 1,一旦主节点宕机,从节点作为主节点的备份可以随时顶上来. 2,扩展主节点的读能力,分担主节点读压 ...
- Redis Sentinel 高可用部署实践集群
一.Redis Sentinel 介绍 1.Sentinel 数据库环境搭建,从单机版到主备.再到多数据库集群,我们需要一个高可用的监控:比如Mysql中,我们可能会采用MHA来搭建我们 ...
- Redis|Sentinel 高可用架构
一 前言 Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端 ...
- Redis Sentinel 高可用服务搭建
阅读目录: 关于 Redis 的概念 关于 Redis Sentinel 的概念 搭建 Redis Server(master) 搭建 Redis Server(slave) 搭建 Redis Sen ...
- 【转载】Redis Sentinel 高可用服务架构搭建
作者:田园里的蟋蟀 出处:http://www.cnblogs.com/xishuai/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接. 阅读 ...
- Redis Sentinel 高可用实现说明
背景: 前面介绍了Redis 复制.Sentinel的搭建和原理说明,通过这篇文章大致能了解Sentinel的原理和实现方法以及相关的搭建.这篇文章就针对Redis Sentinel的搭建做 ...
- Redis Sentinel高可用架构
Redis目前高可用的架构非常多,比如keepalived+redis,redis cluster,twemproxy,codis,这些架构各有优劣,今天暂且不说这些架构,今天主要说说redis se ...
- Redis之高可用方案
Redis之高可用方案 Redis以其高效的访问速度著称.但由于官方还未发布redis-cluster,而redis的replica又有诸多不便:比如一组master-slave的机器,如果之间有 ...
- Redis+Keepalived高可用方案详细分析
背景 目前,Redis集群的官方方案还处在开发测试中,未集成到稳定版中.且目前官方开发中的Redis Cluster提供的功能尚不完善(可参考官方网站或http://www.redisdoc.com/ ...
- redis HA高可用方案Sentinel和shard
1.搭建redis-master.redis-slave以及seninel哨兵监控 在最小配置:master.slave各一个节点的情况下,不管是master还是slave down掉一个,“完整的” ...
随机推荐
- 【重大更新】Qlik Sense September 2018重磅发布(附下载)
作为数据分析领域领导者,Qlik,始终致力于通过产品创新来帮助企业客户撬动数据力量.近日,Qlik Sense September 2018如期而至,不仅对原有版本进行了众多优化,还发布了一系列能够提 ...
- RSA算法一:数学原理
- python私有工具库小结
1.一些试用py工具清单 https://www.zhihu.com/question/60402355/answer/752917744?utm_source=wechat_session& ...
- 【Oracle RAC】Linux系统Oracle18c RAC安装配置详细记录过程(图文并茂)
本文Oracle 18c GI/RAC on Oracle Linux step-by-step 的安装配置步骤,同时也包含dbca 创建数据库的过程. 1. 关闭SELINUX,防火墙vi /etc ...
- docker安装mysql5.6(win10家庭版)
闲话不多说,打开之前已经安装好的客户端Docker Quickstart Terminal,安装方法请看上一篇,链接地址:https://www.cnblogs.com/jimmyshan-study ...
- 改变默认的多选框 checkbox 样式~
效果图: HTML代码: <label for="Checkbox1" style="display:none;"></label> & ...
- 【Flask】 python学习第一章 - 5.0 模板
jinjia2 模板 python实现 flask 内置语言 参照Djago实现 设置模板文件夹 设置模板语言 jinja2 demo6_template.html ----> 从代码渲染 ...
- X509IncludeOption 枚举
X509IncludeOption 枚举 指定 X.509 数据应包括 X.509 证书链的哪些内容. EndCertOnly 2 X.509 链信息中仅包括最终证书. ExcludeRoot 1 包 ...
- 基于Docker容器使用NVIDIA-GPU训练神经网络
一,nvidia K80驱动安装 1, 查看服务器上的Nvidia(英伟达)显卡信息,命令lspci |grep NVIDIA 05:00.0 3D controller: NVIDIA Corpo ...
- SVN (TortioseSVN) 版本控制之忽略路径(如:bin、obj)
在SVN版本控制时,新手经常会遇到这样的问题: 1.整个项目一起提交时会把bin . gen . .project 一同提交至服务器 2.避免提交编译.本地配置等文件在项目中单独对src.res进行提 ...