Redis Sentinel 学习笔记
转载出处: http://blog.csdn.net/lihao21
Redis Sentinel 是用来实现 Redis 高可用的一套解决方案。Redis Sentinel 由两个部分组成:由一个或者多个 Sentinel 实例组成 Sentinel 系统;由一个主 Redis 服务器(master redis)和多个从 Redis 服务器(slave redis)组成主从备份的 Redis 系统。Sentinel 系统本身是一个分布式的系统,它的作用是监视 redis 服务器,在 master redis 下线时,自动将某个 slave redis 上升为新的主服务器。Redis 系统由 master redis 处理客户端的命令请求,slave redis 作为主服务器的备份而存在。Redis Sentinel 的系统架构如图 1 所示。
图1:Redis Sentinel 架构图
假设某个时刻,原来的 master redis 进入下线状态,Sentinel 系统就会监控到这个 master redis 已下线,接下来,Sentinel 系统就会进行故障转移操作:
- 首先,Sentinel 系统会挑选出原来的其中一个 slave redis,让这个 slave redis 上升为 master redis。
- 之后,Sentinel 系统会向其他所有的 slave redis 发送新的复制命令,让它们成为新 master redis 的 slave redis。
- 另外,Sentinel 系统还会继续监控已下线的 redis,当它重新上线时,会将设置为新 master redis 的 slave redis。
需要指出的是,Redis Sentinel 只是一种主从备份的高可用方案,它的目的是支持 Redis 提供高可用的服务,但 Redis Sentinel 系统本身并没有对 Redis 的承载能力进行扩容。理论上说,如果 slave redis 并没有对外提供读写服务,Redis Sentinel 的负载能力与单点 Redis 的负载能力是一样的。有些同学使用了 Redis Sentinel 方案后,可以有效降低 Redis 单机版的负载问题,这种想法是不现实的。这是因为在 Redis Sentinel 系统中,还是只有一个 redis 服务器在提供服务,其负载能力还是受单个 redis 服务器的限制。
如果需要对 redis 的承载能力进行扩容,可以使用其他的分布式 redis 解决方案,例如 Codis,或者 Twemproxy。
实验
为了进一步了解 Redis Sentinel 系统如何实现系统高可用的原理,我们进行以下实验。
实验环境
为了操作和描述的简单起见,我们搭建的 Redis Sentinel 系统,只包含一个 master redis 和一个 slave redis,以及两个 sentinel 实例。生产环境下,建议 slave redis 至少部署两个,sentinel 实例则至少三个。
服务器部署环境如图 2 所示。
图2:Redis Sentinel 部署环境
- 操作系统:CentOS 6.6
- Redis 版本:release 3.2.8
实验过程
1. 搭建 Redis 系统
在 redis 官网(https://redis.io/download)下载 redis后对其解压,然后修改 redis 目录下的配置文件。Master redis 使用的配置 redis.conf
如下(限于篇幅只列出关键的几个配置,其他配置使用默认值即可):
# master redis 绑定的IP地址
bind 192.168.174.137
# 监听的端口,使用默认的
port
# 以后台进程运行
daemonize yes
# 日志输出位置,便查看实验结果
logfile "/home/lihao/redis-stable/logs/redis.log"
Slave redis 使用的配置 redis.conf
如下:
# slave redis 绑定的IP地址
bind 192.168.174.143
# 监听的端口,使用默认的
port
# 以后台进程运行
daemonize yes
# 日志输出位置,便查看实验结果
logfile "/home/lihao/redis-stable/logs/redis.log"
# 作为 master redis 的 slave redis
slaveof 192.168.174.137
修改好配置后,先后启动 master redis 和 slave redis:
启动命令:
$ ./src/redis-server redis.conf
这样, 主从备份的 Redis 系统就搭建好了。
2. 搭建 Sentinel 系统
第一个 sentinel 实例的配置 sentinel.conf
配置如下:
# 绑定的IP地址
bind 192.168.174.137
# 监听的端口
port
# 监控的 master redis 信息,其中的数字 表示判断
# master redis 客观下线所需要的 sentinel 实例数量
sentinel monitor mymaster 192.168.174.137
# 判断 master redis 主观下线的时长
sentinel down-after-milliseconds mymaster
第二个 sentinel 实例的配置如下:
# 绑定的IP地下
bind 192.168.174.143
# 监听的端口
port
# 监控的 master redis 信息,其中的数字 表示判断
# master redis 客观下线所需要的 sentinel 实例数量
sentinel monitor mymaster 192.168.174.137
# 判断 master redis 主观下线的时长
sentinel down-after-milliseconds mymaster
然后分别在两台机器上执行以下命令启动 sentinel 实例。
./src/redis-sentinel sentinel.conf
这样,Sentinel 系统也搭建完成了。
3. 测试 Redis 系统主从切换
在机器 192.168.174.137 上执行以下命令,获取其主从角色信息:
$ ./src/redis-cli -h 192.168.174.137 info Replication
得到以下输出信息,表明 192.168.174.137 上的 redis 是 master 角色。
# Replication
role:master
connected_slaves:
slave0:ip=192.168.174.143,port=,state=online,offset=,lag=
机器 192.168.174.143 上的 redis 则是 slave 角色:
# Replication
role:slave
master_host:192.168.174.137
master_port:
对 192.168.174.137 master redis 执行下线命令操作:
192.168.174.137:> shutdown
等待一会儿,可以看到 192.168.174.143 变成了 master 的角色。
# Replication
role:master
connected_slaves:
192.168.174.137 的 redis 重新上线后,可以看到其已变成新的 master redis 的 slave redis。
# Replication
role:slave
master_host:192.168.174.143
master_port:
实验小结
从实验过程可以看到,Sentinel 系统会对已下线的 master redis 执行故障转移操作。这个故障操作实际包含三个步骤:
(1)在已下线 master redis 属下的所有 slave redis 里面,挑选出一个 slave redis ,并将其转换为 master redis 角色。例如,上述实验中,将 192.168.174.143 的 redis 转换为 master 的角色。
(2)让其他的所有的 slave redis 改为复制新的 master redis。
(3)将已下线的 master redis 设置为新 master redis 的 slave redis。在上述实验中,192.168.174.137 上下线的 redis 在重新上线后,变成了 192.168.174.143 上 redis 的 slave redis。
总结
Redis Sentinel 系统内部通过执行故障转移操作,保证 Redis 系统在 master redis 下线后,仍然可以继续提供对外服务,从而达到系统高可用的目的。
参考资料
Redis Sentinel 学习笔记的更多相关文章
- Redis in Action : Redis 实战学习笔记
1 1 1 Redis in Action : Redis 实战学习笔记 1 http://redis.io/ https://github.com/antirez/redis https://ww ...
- Redis:学习笔记-04
Redis:学习笔记-04 该部分内容,参考了 bilibili 上讲解 Redis 中,观看数最多的课程 Redis最新超详细版教程通俗易懂,来自 UP主 遇见狂神说 10. Redis主从复制 1 ...
- Redis:学习笔记-03
Redis:学习笔记-03 该部分内容,参考了 bilibili 上讲解 Redis 中,观看数最多的课程 Redis最新超详细版教程通俗易懂,来自 UP主 遇见狂神说 7. Redis配置文件 启动 ...
- Redis:学习笔记-02
Redis:学习笔记-02 该部分内容,参考了 bilibili 上讲解 Redis 中,观看数最多的课程 Redis最新超详细版教程通俗易懂,来自 UP主 遇见狂神说 4. 事物 Redis 事务本 ...
- Redis:学习笔记-01
Redis:学习笔记-01 该部分内容,参考了 bilibili 上讲解 Redis 中,观看数最多的课程 Redis最新超详细版教程通俗易懂,来自 UP主 遇见狂神说 1. Redis入门 2.1 ...
- Redis——入门学习笔记
Redis学习 说到前面:这篇笔记只是我作为一个Redis新手,从0到认知的一个过程.后续会持续深入学习. 学习初衷和计划 学习Redis,因为这是热门技术,必须掌握的技术,别人都会我不会.就这一点就 ...
- memcache/redis 缓存学习笔记
0.redis和memcache的区别 a.redis可以存储除了string之外的对象,如list,hash等 b.服务器宕机以后,redis会把内存的数据持久化到磁盘上,而memcache则不会 ...
- redis数据库学习笔记
redis数据库 工作需要,简单了解一下redis数据库,供后续参考和复习使用. 一.简介 Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理.它支持字 ...
- Redis进阶学习笔记
Redis是什么这里不用再说了吧?下面是官方的解释 Redis is an open source (BSD licensed), in-memory data structure store, us ...
随机推荐
- 学习打卡8:循环语句for、while
流程图: /*循环结构的基本组成部分,一般可以分成四部分:1.初始化语句:在循环开始最初执行,而且只做唯一一次.2.条件判断:如果成立,则循环继续:如果不成立,则循环退出.3.循环体:重复要做的内容, ...
- 神机iPhone6停产,苹果产业链应该感谢它还是痛恨它?
据国内媒体报道,一些苹果上游供应商已经接到通知,iPhone6系列将会在5月底彻底停产,一时间,竟在网络上引发汹涌的怀念之情.iPhone6的特别之处在于它是苹果第一款大屏幕的智能手机,标志着库克彻底 ...
- sdfsdsf
1 $('.advert-title').each(function(){ 2 var TXTlength = $(this).text().length; // 当前文本的长度 3 if(TXTle ...
- C# 篇基础知识6——文件和流
计算机以文件的形式把数据存储在磁盘.光盘等存储设备上.文件的管理和操作是操作系统的一个重要组成部分,.NET 框架提供了一组功能强大的类,可以方便地对文件进行操作和管理. 1.文件操作相关的类 用于文 ...
- [7b2美化]柒比贰 魔改系列|7B2-分类封面添加波浪效果&每日诗词
本文转载自:钻芒博客 https://www.zmki.cn/5105.html 效果如图: 代码: 首先在style.css样式表里添加波浪样式 /*浪来了*/ .lang { overflow: ...
- ThinkPHP 3.2 生成静态页面
1:在根目录下的全局index.php中加下面这行: define('HTML_PATH', './htm');//生成静态页面的文件位置 2:在项目的配置文件config.php中加下面这行: 'H ...
- docker-lnmp 多容器部署 Laravel 方案分享(转)
docker lnmp 多容器部署方案.完全基于 docker 官方镜像,遵循最佳实践,一容器一进程. github 项目地址 https://github.com/March7/docker-lnm ...
- arm linux 移植 x265
背景 本来想着把 x265编译到ffmpeg里面,搞定了x265的编译:但是一直报ERROR: x265 not found using pkg-config这个错误,我按照网上的资料,查看了ffbu ...
- Why Helm?【转】
每个成功的软件平台都有一个优秀的打包系统,比如 Debian.Ubuntu 的 apt,Redhat.Centos 的 yum.而 Helm 则是 Kubernetes 上的包管理器. 本章我们将讨论 ...
- 新闻网大数据实时分析可视化系统项目——16、Spark2.X集群运行模式
1.几种运行模式介绍 Spark几种运行模式: 1)Local 2)Standalone 3)Yarn 4)Mesos 下载IDEA并安装,可以百度一下免费文档. 2.spark Standalone ...