阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Redis高可用方案之Sentinel原理解析

424次阅读
没有评论

共计 2962 个字符,预计需要花费 8 分钟才能阅读完成。

很多网站都使用 Redis 作为自己的缓存系统,网站要做到高可用,它使用的缓存系统自然也必须支持高可用,这里就介绍一下 redis 的高可用方案 Sentinel。

Sentinel 是 Redis 官方提供的一种高可用方案(除了 Sentinel,Redis Cluster 是另一种方案),它可以自动监控 Redis master/slave 的运行状态,如果发现 master 无法访问了,就会启动 failover 把其中一台可以访问的 slave 切换为 master,并且通过 pub/sub 事件通知 Redis 客户端新的 master 的 ip 地址。

支持 Sentinel 的 Redis 客户端(例如 Java 得 Jedis)会在连接 Redis 服务器的时候向 Sentinel 询问 master 的 ip,并且会在收到 master 切换的 pub/sub 事件后自动重新连接到新的 master。对调用 Redis 客户端的业务系统来说,这些都是完全透明的。

下图是 redis sentinel 的部署和运行机制
Redis 高可用方案之 Sentinel 原理解析
下图是 master 宕机后,failover 的发起流程
Redis 高可用方案之 Sentinel 原理解析


现在我们来实战一下,我们的例子中有 3 台 server,3 个 sentinel,1 个 master 和 2 个 slave。由于我们只有 3 台 server, 所以每个 sentinel 和一个 master 或者 slave 放在一个 server 上。采用的部署结构如下图所示
Redis 高可用方案之 Sentinel 原理解析

  • 配置 master(redis.conf):

requirepass 123456 #设置 master 的密码

masterauth 123456 #设置 slave 连接 master 进行同步时使用的密码(虽然当前是 master 不需要密码,但是当 master 挂了以后再重启以后,这个时候可能 failover 已经完成了,master 会自动被降级为 slave)

  • 分别配置 slave1 和 slave2(redis.conf):

slaveof 172.17.138.94 6379 #指定 slave1 和 slave2 的 master

requirepass 123456 #设置 slave 的密码

masterauth 123456 #设置 slave 连接 master 进行同步时使用的密码

  • 分别配置 sentinel1,sentinel2,sentinel3(sentinel.conf):

sentinel monitor mymaster 172.17.138.94 6379 2 #指定 sentinel 监控的 master(组 id 为 mymaster,当前 master ip 为 172.17.138.94,端口 6379,最后的 2 指定 quorum 的值,表明如果有 2 个 sentinels 无法连接 master,才认为 master 挂了),slave 不用指定,sentinel 会通过 pub/sub 机制自动发现所有 slave

sentinel auth-pass mymaster 123456 #设置 sentinel 连接的 master 和 slave 的密码(只能设置一个密码,所以 master 和 slaves 的密码必须相同)

  • 启动 master 和 slave1,slave2:

分别 ssh 到 master,slave1,slave2,运行 redis-server redis.conf &

  • 查看 master-slave 分布情况,redis-cli info Replication

master 应该看到类似下图信息
Redis 高可用方案之 Sentinel 原理解析
slave1 和 slave2 应该看到类似下图信息
Redis 高可用方案之 Sentinel 原理解析

  • 启动 sentinel1,sentinel2,sentinel3:

分别 ssh 到每个 sentinel,运行 redis-sentinel sentinel.conf &

  • 通过 sentinel 查看 master,slave 的情况

分别 ssh 到每个 sentinel,运行 redis-cli -p 26379 SENTINEL get-master-addr-by-name mymaster

将能看到当前的 master 的 ip 地址,redis 客户端 (jedis) 就是通过这个命令来获知应该连接到哪个 redis 服务器的,如下图
Redis 高可用方案之 Sentinel 原理解析

  • 现在我们来演示 failover,我们先把 master 关了来模拟 master 宕机了

Redis 高可用方案之 Sentinel 原理解析

这时候查看 sentinel 的日志,当有 2 台(达到 quorum)sentinel 发现 master 无法访问后,sentinels 进行投票,自动把 master 切换为 slave2(172.17.138.92)

Redis 高可用方案之 Sentinel 原理解析

现在再询问 sentinel 当前 master 的地址,发现 master 已经变成了 slave2(172.17.138.92)。

Redis 高可用方案之 Sentinel 原理解析

而且当挂掉的 master 重新启动后,它将被自动配置成新 master 的 slave。

如果你这时查看 redis.conf 和 sentinel.conf,你会发现它们的内容已经自动修改成 172.17.138.92 作为 master 相对应的配置了,也就是说 sentinel 的 failover 是永久性的,下次重启所有 redis 和 sentinels 的时候还是有效。

总结:sentinel 是一种有效的高可用方案,不过如果你是通过切片 (sharding/partition) 的可扩展方式使用 Redis 的话,目前好像还没有成熟的 sentinel 和切片集成使用的方法。如果你需要同时拥有高可用和可扩展的 Redis 方案的话,不妨考虑一下 Redis3 新推出的 Redis Cluster 方案,或者第三方的 Twemproxy,Codis。

下面关于 Redis 的文章您也可能喜欢,不妨参考下:

Ubuntu 14.04 下 Redis 安装及简单测试 http://www.linuxidc.com/Linux/2014-05/101544.htm

Redis 主从复制基本配置 http://www.linuxidc.com/Linux/2015-03/115610.htm

CentOS 7 下 Redis 的安装与配置 http://www.linuxidc.com/Linux/2017-02/140363.htm

Ubuntu 14.04 安装 Redis 与简单配置 http://www.linuxidc.com/Linux/2017-01/139075.htm

Ubuntu 16.04 环境中安装 PHP7.0 Redis 扩展 http://www.linuxidc.com/Linux/2016-09/135631.htm

Redis 单机 & 集群离线安装部署 http://www.linuxidc.com/Linux/2017-03/141403.htm

CentOS 7.0 安装 Redis 3.2.1 详细过程和使用常见问题 http://www.linuxidc.com/Linux/2016-09/135071.htm

Ubuntu 16.04 环境中安装 PHP7.0 Redis 扩展 http://www.linuxidc.com/Linux/2016-09/135631.htm

Ubuntu 15.10 下 Redis 集群部署文档 http://www.linuxidc.com/Linux/2016-06/132340.htm

Redis 实战 中文 PDF http://www.linuxidc.com/Linux/2016-04/129932.htm

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-08/146381.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计2962字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19348
评论数
4
阅读量
7801210
文章搜索
热门文章
开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南

开发者必备神器:阿里云 Qoder CLI 全面解析与上手指南 大家好,我是星哥。之前介绍了腾讯云的 Code...
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板1Panel:小白轻松构建Web服务与面板加固指南

云服务器部署服务器面板 1Panel:小白轻松构建 Web 服务与面板加固指南 哈喽,我是星哥,经常有人问我不...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

  星哥带你玩飞牛 NAS-16:飞牛云 NAS 换桌面,fndesk 图标管理神器上线! 引言 哈...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装 Black 群晖 DSM7.2 系统安装教程(在 Vmware 虚拟机中、实体机均可)! 前言 大家好,...
星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛NAS硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话?

星哥带你玩飞牛 NAS 硬件 01:捡垃圾的最爱双盘,暴风二期矿渣为何成不老神话? 前言 在选择 NAS 用预...
开源神器组合!1Panel面板+Halo助你轻松打造个人/企业内容中心

开源神器组合!1Panel面板+Halo助你轻松打造个人/企业内容中心

开源神器组合!1Panel 面板 +Halo 助你轻松打造个人 / 企业内容中心 前言 大家好,我是星哥,之前...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
颠覆 AI 开发效率!开源工具一站式管控 30+大模型ApiKey,秘钥付费+负载均衡全搞定

颠覆 AI 开发效率!开源工具一站式管控 30+大模型ApiKey,秘钥付费+负载均衡全搞定

  颠覆 AI 开发效率!开源工具一站式管控 30+ 大模型 ApiKey,秘钥付费 + 负载均衡全...
星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛 NAS-12:开源笔记的进化之路,效率玩家的新选择 前言 如何高效管理知识与笔记,已经成为技术...
零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face 免费服务器 +Docker 快速部署 HertzBeat 监控平台 ...
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸 前言 作为天天跟架构图、拓扑图死磕的...
星哥带你玩飞牛NAS-7:手把手教你免费内网穿透-Cloudflare tunnel

星哥带你玩飞牛NAS-7:手把手教你免费内网穿透-Cloudflare tunnel

星哥带你玩飞牛 NAS-7:手把手教你免费内网穿透 -Cloudflare tunnel 前言 大家好,我是星...