中电金信技术实践|Redis哨兵原理及安装部署分享
导语:本文主要围绕redis Sentinel的基本概念、部署Redis Sentinel模式和其相关的API等内容进行介绍,并讲述哨兵与主从关系的区别,以及哨兵机制是怎么实现高可用的,希望可以与各位同仁共同交流探讨。
首先,我们带着以下问题去阅读本篇文章:
1.Redis下怎么实现故障迁移?
2.你对Redis高可用的理解有多少?
3.Sentinel的工作机制是什么?
4.Sentinel有哪些功能?
5.Sentinel的配置过程,主要配置参数是什么?
6.如何从节点中选举新的主节点?
一、基本概念
1. 主从模式下的故障迁移
编辑
■ 当主节点发生故障后,客户端连接主节点失败,从节点与主节点连接失败,从而造成复制中断,如果没能及时发现并处理,就会造成一部分数据的丢失。
■ 当主节点无法正常提供服务时,需要选出一个从节点,对其执行slaveof no one命令使其成为新的主节点。
■ 在切换主节点后,需要人为的去更新应用方的节点信息,更新后需要重启。
■ 在客户端建立新的主从关系,使得从节点从新的主节点复制。在原来的主节点恢复后,当作从节点使用,从新的主节点复制信息。
由于整个故障迁移中,大的过程都需要人为的介入,所以不能达到高可用的要求,因此Redis Sebtinel应运而生。
2. Redis Sentinel的高可用
编辑
Redis Sentinel 是一个分布式架构,其中包含若干的Sentinel节点和Redis数据节点,每个Sentinel节点会对数据节点和其余Sentinel节点进行控制,当发现节点不可达时,会对节点做下线标识。
如果被标识的节点是主节点,Sentinel会和其他Sentinel进行协商,通过半数以上的Sentinel都认为该主节点不可达时,则开始从从节点中进行选举,从而达到故障迁移的目的。整个过程由Sentinel自动完成。
3. 故障迁移的步骤
编辑
■ 主节点出现故障时,从节点会与主节点失去连接,从而导致复制失败;
■ 每个Sentinel节点通过定期监控发现主节点故障;
■ 多个Sentinel节点对主节点的故障达到一致,选举出一个Sentinel节点去负责故障迁移;
■ Sentinel执行故障迁移,执行故障迁移的过程与主从复制的故障迁移相同,但 Sentinel的故障迁移属于自动完成,无需人工。
4. Redis Sentinel的主要功能
编辑
■ 通知:Sentinel节点会将故障转移的结果通知给应用方;
■ 主节点故障迁移:实现从节点晋升为主节点并维护后续正确的主从关系;
■ 配置提供者:在Redis Sentinel结构中,客户端在初始化的时候连接的是Sentinel节点集合,从中获取主节点信息;
■ 监控:Sentinel节点会定期检测Redis数据节点、其余Sentinel节点是否可达。
二、安装和部署
1. Redis Sentinel的基本拓扑结构
编辑
编辑
2. Redis主节点配置
编辑
■ 准备工作: 设置静态ip
vi /etc/sysconf ig/network -scr ipts/ ifcfg -ens33
编辑
配置完成后保存退出并执行service network restart来重启网络服务,使得配置生效。
■ 准备工作: 传输redis压缩包并解压
tar -zxvf redis-5.0.4.tar.gz(这里我们使用的版本是redis-5.0.4)
编辑
■ 准备工作: 执行make和make install对redis进行编译
编辑
编辑
■ 准备工作: 创建Sentinel文件并将配置文件改名并复制到Sentinel
这些cp命令是在redis根目录下执行
复制redis配置文件
cp redis.conf sentinel/redis.6379.conf
cp redis.conf sentinel/redis.6380.conf
cp redis.conf sentinel/redis.6381.conf
复制哨兵配置文件
cp sentinel.conf sentinel/sentinel.26379.conf
cp sentinel.conf sentinel/sentinel.26380.conf
cp sentinel.conf sentinel/sentinel.26381.conf
编辑
我们按照之前的拓扑图,将redis.6379.conf作为主节点进行配置。
修改redis.conf配置,这些配置是分散在配置文件中,需要逐个进行修改。
#bind 127.0.0.1 注释掉绑定的IP
protected-mode no 关闭保护模式
port 6379 设置端口
logfile "redis.6379.log" 配置log日志文件的名称
daemonize yes 开启后台启动
dbfilename redis.6379.rdb 修改rdb持久化文件的名称
dir "/home/redis/redis-5.0.4/sentinel/ 修改rdb持久化文件的位置
我们按照之前的拓扑图,将redis.6380.conf和redis.6381.conf作为从节点进行配置。
Redis从节点配置
#bind 127.0.0.1 注释掉绑定的IP
protected-mode no 关闭保护模式
port 6380 设置端口
logfile "redis.6380.log" 配置log日志文件的名称
daemonize yes 开启后台启动
dbfilename redis.6380.rdb 修改rdb持久化文件的名称
dir "/home/redis/redis-5.0.4/sentinel/ " 修改rdb持久化文件的位置
slaveof 192.168.72.166 6379 配置主节点的挂载
Redis主从节启动
进入redis部署目录,执行:
redis-server redis.6379.conf
redis-server redis.6380.conf
redis-server redis.6381.conf
节点启动完成后使用redis-cli -p 6379进入主节点执行info replication查看主从关系。
编辑
Sentinel节点配置
protected-mode no 关闭保护模式
port 26379 设置端口
daemonize yes 将后台启动设置为yes
sentinel monitor mymaster 192.168.72.166 6379 2 配置Sentinel要监控的节点名称,以及主节点的IP和端口,最后一个数字则是表明Sentinel在进行选举是需要几个Sentinel节点认为该主节点宕机后,进行选举。一般情况下这个数字要大于Sentinel节点的半数。
sentinel down-after-milliseconds mymaster 30000 设置Sentinel认为Redis实例已经失效的时间,即在这个时间段内Sentinel发出的ping没有得到redis返回的pong,那么Sentinel就将这个redis实例标记为主观下线。
sentinel parallel-syncs mymaster 1 设置最多可以有多少个redis从节点同步更新的主节点,这个数字越小,则实现故障迁移的时间就越长。
sentinel failover-timeout mymaster 180000 如果在该时间内没有完成故障迁移,则视为故障迁移失败,重新开始选举新的主节点。
启动并进行确认
redis-sentinel sentinel.26379.conf
redis-sentinel sentinel.26380.conf
redis-sentinel sentinel.26381.conf
redis-cli -h 127.0.0.1 -p 26379 info Sentinel
编辑
三、Redis Sentinel的部署技巧
■ 在生产环境下Sentinel节点不应该部署在同一台物理机上。这里强调说明不是虚拟机,而是物理机,我们在学习和测试的过程中会将Sentinel部署在一台或多台虚拟机上,但在生产环境下我们不能这么做,因为一旦物理机出现故障,所有的虚拟机都会受到影响。
■ 在部署Sentinel节点时至少部署三个以上的奇数个节点。因为判断和选举时需要半数以上的Sentinel节点进行投票才可以继续故障迁移,而偶数个Sentinel节点可能会出现一半一半的场景,导致故障迁移不能继续进行。
■ 在多个主节点部署Sentinel时有以下两个方案:
方案一:部署一套Sentinel,在Sentinel.conf文件中配置多个主节点信息,这样配置的优点在于便于管理和维护。但是缺点也比较明显,即这一套Sentinel出现异常时,可能会对多个redis数据节点造成影响。
方案二:部署多套Sentinel,为每个主节点部署一套Sentinel。这样的话,每套Redis Sentinel是互相隔离的,彼此之间不会互相影响。缺点则是会造成资源的浪费,管理和维护起来比较麻烦。
四、API
■ sentinel masters
展示所有被监控的主节点状态以及相关的统计信息
■ sentinel master<master name>
展示指定名称的主节点状态以及相关的统计信息
■ sentinel slaves<master name>
展示指定主节点名称的从节点状态以及相关的统计信息
■ sentinel sentinels<master name>
展示指定<master name>的Sentinel节点集合(不包含当前Sentinel节点)
■ sentinel get-master-addr-by-name<master name>
返回指定<master name>主节点的IP地址和端口
■ sentinel failover<master name>
对指定<master name>主节点进行强制故障转移(没有和其他Sentinel节点“协商”),当故障转移完成后,其他Sentinel节点按照故障转移的结果更新自身配置。这个命令在Redis Sentinel的日常运维中非常有用。
■ sentinel flushconfig
将Sentinel节点的配置强制刷到磁盘上,这个命令Sentinel节点自身用得比较多,对于开发和运维人员来说,如果出现外部原因(例如磁盘损坏)造成配置文件损坏或者丢失时,这个命令是很有用的。
■ sentinel remove<master name>
取消当前Sentinel节点对于指定<master name>主节点的监控。
■ sentinel monitor<master name><ip><port><quorum>
这个命令和配置文件中的含义是完全一样的,只不过是通过命令的形式来完成Sentinel节点对主节点的监控。
■ sentinel set<master name>
动态修改Sentinel节点配置选项。
五、Jedis客户端连接
@Test
public void testSentinel() {
Set<String> sentinels = new HashSet<>();
sentinels.add("192.168.72.164:7000");
...........
JedisSentinelPool pool = new JedisSentinelPool("mymaster", sentinels);
Jedis jedis = pool.getResource();
jedis.set("AA1", "AA1");
System.out.println("获取数据:"+jedis.get("AA1"));
}
六、实现原理
1. 三个定时监控任务
编辑
■ 每隔10秒,每个Sentinel节点会向主节点和从节点发送info命令获取最新的拓扑结构。
这个定时任务具体可以体现在以下几个方面:
①通过向主节点执行info命令,获取从节点信息;
②每当有新的从节点加入时可以立刻感知出来;
③节点不可达或者故障迁移后,可以通过info命令来及时更新节点的拓扑信息。
■ 每隔2秒,每个Sentinel节点会向Redis数据节点的_sentinel_:hello频道上发送该sentinel节点对于主节点的判断以及当前Sentinel节点的信息。同时每个Sentinel节点也会订阅该频道,来了解其他Sentinel节点以及他们对主节点的判断,这个定时任务可以完成发现新的Sentinel节点和Sentinel节点之间交换主节点状态。
■ 每隔1秒,每个Sentinel节点会向主节点、从节点、其余Sentinel节点发出一条ping命令的心跳检测,来确认这些节点当前是否可达。
2. 主观下线和客观下线
编辑
■ 主观下线指的是在Sentinel节点发出ping命令做心跳检测时,在超过配置文件中的回复超时时间down-after-milliseconds没有收到任何回复,Sentinel节点就会对该节点做失败判定,这个行为叫做主观下线。
■ 客观下线指的是当主观下线的节点是主节点时,该Sentinel节点会向其他Sentinel节点询问对主节点的判断,当超过半数以上的Sentinel节点都对主节点的下线做了同意的判定,那么这个判定就是客观的,这种方式就叫做客观下线。
3. 故障迁移
编辑
■ 在从节点中选出一个节点作为新的主节点,选择方法如下:
①过滤掉“不健康”(主观下线、断线)、5秒内没有回复Sentinel节点ping响应、与主节点失联超过10秒的;
②选择从节点优先级最高的从节点列表,如果存在则返回,不存在则继续;
③选择复制偏移量最大的从节点(复制最完整),如果存在则返回,不存在则继续;
④选择runid最小的从节点(Redis服务器的随机标识符(用于Sentinel和集群),重启后就会改变。)
■ Sentinel节点对第一步选出来的从节点执行slaveof no one命令让其成为主节点。
■ Sentinel领导者节点会向剩余的从节点发送命令,让它们成为新主节点的从节点,复制规则和 parallel-syncs 参数有关。
■ Sentinel节点集合会将原来的主节点更新为从节点,并保持着对它的关注,当其恢复后再命令它去复制新的主节点。
中电金信技术实践|Redis哨兵原理及安装部署分享的更多相关文章
- 《【面试突击】— Redis篇》-- Redis哨兵原理及持久化机制
能坚持别人不能坚持的,才能拥有别人未曾拥有的.关注编程大道公众号,让我们一同坚持心中所想,一起成长!! <[面试突击]— Redis篇>-- Redis哨兵原理及持久化机制 在这个系列里, ...
- puppet完全攻略(一)puppet应用原理及安装部署
puppet完全攻略(一)puppet应用原理及安装部署 2012-06-06 18:27:56 标签:puppet puppet应用原理 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出 ...
- Redis哨兵原理详解
一.概述 Redis哨兵(以下称哨兵)是为Redis提供一个高可靠解决方案,对一定程序上的错误,可以不需要人工干预自行解决. 哨兵功能还有监视.事件通知.配置功能.以下是哨兵的功能列表: 监控:不间断 ...
- Redis哨兵模式高可用部署和配置
一.Redis 安装配置 1.下载redis安装包 wget http://download.redis.io/releases/redis-4.0.9.tar.gz 2.解压安装包 tar -zxv ...
- Redis单台的安装部署及集群部署
Redis是一种高级key-value数据库.它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富.有字符串,链表,集 合和有序集合.支持在服务器端计算集合的并,交和补集(diff ...
- 详细讲解 Redis 的两种安装部署方式
Redis 是一款比较常用的 NoSQL 数据库,我们通常使用 Redis 来做缓存,这是一篇关于 Redis 安装的文章,所以不会涉及到 Redis 的高级特性和使用场景,Redis 能够兼容绝大部 ...
- Redis for OPS 01:关于 Redis 基础说明与安装部署
写在前面的话 本章节开始在主要介绍在运维工作中绕不开的一个话题,数据缓存 NoSQL 服务 Redis,搭建很简单,使用很简单,运行也稳定的一批,一般小公司几乎很少出现以为量的问题导致他 down 掉 ...
- redis分片集群安装部署
redis分片集群安装与部署 分片集群的优势 高可用.且方便扩展. 数据分片,多节点提供服务,提高性能,数据提供冗余备份. 分片集群部署 只需更改配置文件 部署架构:6个节点,3主3从.数据集分为3片 ...
- NoSQL数据库之Redis数据库:Redis的介绍与安装部署
NoSQL(NoSQL = Not Only SQL),它指的是非关系型的数据库.随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的w ...
- lvs原理及安装部署详解(参考)
LVS安装使用详解 摘至:http://www.cnblogs.com/MacoLee/p/5856858.html 简介 LVS是Linux Virtual Server的简称,也就是Linux虚拟 ...
随机推荐
- Hadoop完全分布式搭建,基于乌班图系统
因为现在集成的工具很多,建议在接触这一块的过程中还是自己找几个主机,亲手搭一遍集群,更好的熟悉底层!本文只是搭建的过程没有理论!手搭集群时先将各节点网络.ssh配置好!然后在一台机子上操作配置文件,直 ...
- OOOPS:零样本实现360度开放全景分割,已开源 | ECCV'24
全景图像捕捉360°的视场(FoV),包含了对场景理解至关重要的全向空间信息.然而,获取足够的训练用密集标注全景图不仅成本高昂,而且在封闭词汇设置下训练模型时也受到应用限制.为了解决这个问题,论文定义 ...
- NJU ICS2024 PA 作业心得(一)
NJU ICS2024 PA 作业心得(一) 由于自己并不是NJU 2024的学生,因此"堂而皇之"的把这份心得发在了网上,并且只是仅供非以此课程作为自己当前学年保研课的同学参考. ...
- WPF中为Popup和ToolTip使用WindowMaterial特效 win10/win11
先看效果图: 大致思路是:通过反射获取Popup内部的原生窗口句柄,然后通过前文已经实现的WindowMaterial类来应用窗口特效:对于ToolTip,为了保持其易用性,我使用了附加属性+全局样式 ...
- CF1737D Ela and the Wiring Wizard
CF1737D Ela and the Wiring Wizard 题意简述 形象化的,对于一个边,我们可以做以下变换: 将一条边变为自环 将边的一个端点沿着其他边移动 总的来说,就是边的两个端点可以 ...
- Linux Ubuntu 安装Python独立的不同版本
由于Ubuntu系统默认的Python版本基本为3.5.2,老掉牙的版本了,很多功能语法不可以使用,删除也并不好操作.所以不如新装一个最新的版本.速度快,操作简单,最重要的是使用只需要键入python ...
- Canvas简历编辑器-层级渲染与事件管理能力设计
Canvas简历编辑器-选中绘制与拖拽多选交互设计 在之前我们聊了聊如何基于Canvas与基本事件组合实现了轻量级DOM,并且在此基础上实现了如何进行管理事件以及多层级渲染的能力设计.那么此时我们就依 ...
- 今日一学,sql优化,创建索引的优缺点
收藏了,但是不打开,久而久之就忘了,今日一学!所谓是好记性不如烂键盘. ** 2024Java offer收割指南 ** sql优化 尽量避免使用 select * ,返回无用的字段会降低效率.优化方 ...
- SQL Server如何定期自动备份数据库
打开SQL Server代理服务 实现自动备份功能,首先要保证SQL Server的"SQL Server(代理)"服务已经打开. 如果没有看到这个"SQL Server ...
- 利用腾讯元器,将公众号变身为强大的.NET AI智能体
前言 经常有粉丝朋友在公众号后台私信提问,因为个人平时比较少看公众号后台的私信所以没法及时回复.最近发现腾讯推出了一个可以创建和使用各种智能体的平台(帮助小白也能快速使用AI):腾讯元器,正好自己每天 ...