Redis高可用方案-哨兵与集群
Redis高可用方案
一.名词解释
二.主从复制
Redis主从复制模式可以将主节点的数据同步给从节点,从而保障当主节点不可达的情况下,从节点可以作为
后备顶上来,并且可以保障数据尽量不丢失(主从复制可以保障最终一致性)。第二,从节点可以扩展主节点的读
能力,一旦主节点不能支持大规模并发量的读操作,从节点可以在一定程度上分担主节点的压力。
主从复制面临的问题:
1.当主节点发生故障的时候,需要手动的将一个从节点晋升为主节点,同时通知应用方修改主节点地址并重启
应用,同时需要命令其它从节点复制新的主节点,整个过程需要人工干预。
2.主节点的写能力受到单机的限制。
3.主节点的存储能力受到单机的限制。
三.
原始的故障迁移
1.主节点发生故障后,客户端连接主节点失败,两个从节点与主节点连接失败造成复制中断。
2.如果主节点无法正常启动,需要选出一个从节点(slave-1),对其执行slaveof
no one命令使其成为新的主节
3.原来的从节点(slave-1)成为新的主节点后,更新应用方的主节点信息,重新启动应用方。
4.客户端命令另一个从节点(slave-2)去复制新的主节点
5.待原来的主节点恢复后,让它去复制新的主节点
四.Redis Sentinel的高可用
当主节点出现故障时,Redis Sentinel能自动完成故障发现和故障转移,并通知应用方,从而实现真正的高可用。
RedisSentine是一个分布式架构,其中包含若干个Sentinel节点和Redis数据节点,每个Sentinel节点会对数据节点和
其余Sentinel节点进行监控,当它发现节点不可达时,会对节点做下线标识。如果被标识的是“主节点”,它还会和
其他的Sentinel节点进行“协商”,当大多数Sentinel节点都认为主节点不可达时,它们会选举一个Sentinel节点来完
成自动故障转移的工作,同时会将这个变化实时通知给Redis应用方。整个过程是自动的,不需要人工干预,解决了
Redis的高可用问题。
Redis Sentinel包含了若干个Sentinel节点,这样做也带来了两个好处:
1.
对节点的故障判断是由多个Sentinel节点共同完成,这样可以有效的防止误判。
2. Sentinel节点集合是由若干个Sentinel节点组成的,这样即使个别Sentinel节点不可用,整个Sentinel节点集合依
然是健壮的。
Redis Sentinel具有以下几个功能:
1.监控:Sentinel会定期检测Redis数据节点、其余Sentinel节点是否可到达
2.通知:Sentinel会将故障转移的结果通知给应用方。
3.主节点故障转移:实现从节点晋升为主节点并维护后续正确的主从关系。
4.配置提供者:在RedisSentinel结构中,客户端在初始化的时候连接的是Sentinel节点集合,从中获取主节点信息。
五. Redis Sentinel拓扑结构
六.
Redis Sentinel节点发现和监控机制
Redis Sentinel通过三个定时监控任务完成对各个节点的发现和监控:
1.每隔10秒,每个Sentinel会向主节点和从节点发送info命令获取最新的拓扑结构。
2.每隔2秒,每个Sentinel节点会向Redis数据节点的_sentinel_:hello频道上发送该Senitnel节点对于主节点的判断。
以及当前Sentinel节点的信息,同时每个Sentinel节点也会订阅该频道,来了解其他Sentinel节点以及他们对主节
点的判断。这个定时任务可以完成以下两个工作:
(1)发现新的Sentinel节点:通过订阅主节点的_Sentinel_:hello了解其他Sentinel节点信息。如果是新加入的
Sentinel节点,将该Sentinel节点信息保存起来,并与改Sentinel节点创建连接
(2)Sentinel节点之间交换主节点状态,作为后面客观下线以及领导者选举的依据
3.每隔1秒,每个Sentinel节点会向主节点、从节点、其余Sentinel节点发送一条ping命令做一次心跳检测,来确认
当前节点是否可达。与主节点,从节点,其余Sentinel都建立起连接,实现了对每个节点的监控。这个定时任务
是节点失败判定的重要依据。
七.
Redis Sentinel部署技巧
1.Sentinel节点不应该部署在一台物理机上。
2.部署至少三个且奇数个的Sentinel节点
3.只有一套Sentinel,还是每个主节点配置一套Sentinel的讨论的建议方案是如果Sentinel节点集合监控的是同一个
业务的多个主节点集合,那么使用方案一,否则使用方案2.
八.
Redis Cluster|数据分区
Redis数据分区:RedisCluster采用虚拟槽分区,所有的键根据哈希函数映射到0-16383整数槽内,
计算公式:slot=CRC16(key) &16383。每一个节点负责维护一部分槽以及槽所映射的键值数据。
Redis虚拟槽分区的特点:
1.解耦数据和节点之间的关系,简化了节点扩容和收缩的难度
2.节点自身维护槽的映射关系,不需要客户端或者代理服务维护槽分区元数据
3.支持节点、槽、键之间的映射查询,用于数据路由、在线伸缩等场景。
九.
Redis Cluster|功能限制
1.Key批量操作支持有限。目前只支持同slot内的key执行批量操作(如mget,mset)。
2.Key事务操作支持有限。只支持多key在同一个节点上的事务操作,多个key分布在不同节点上时无法使用事务功能。
3.Key作为数据分区的最小粒度,因此不能将一个大的键值对象如hash,list等映射到不同节点。
4.不支持多数据库空间,集群模式下只能使用db0空间。
5.复制结构只支持一层,从节点只能复制主节点,不支持嵌套树状复制结构。
十.
Redis Cluster|集群伸缩
Redis集群提供了灵活的节点扩容和收缩方案,在不影响集群对外服务的情况下,可以为集群添加节点进行
扩容也可以下线部分节点进行缩容。
扩容集群的步骤:
1.准备新节点
2.加入集群
3.迁移槽和数据
缩容集群的步骤:
1.首先要确定下线节点是否有负责的槽,如果是,需要把槽迁移到其他节点,保证节点下线后真个集群槽节点映射的完整性
2.当下线节点不再负责槽或者本身是从节点时,就可以通知集群内其他节点忘记下线节点,就可以通知集群内其他节点忘记下线节点当所有的节点忘记该节点后可以正常关闭。
十一.
Redis Cluster|故障发现
Redis集群自身实现了高可用。高可用首先需要解决集群部分失败的场景:当少数节点出现故障时,可以通过
自动故障转移保证集群可以正常对外提供服务。
故障发现的类型:
1.主观下线:指某个节点认为另一个节点不可用,即下线状态,这个状态并不是最终的故障判定,只能代表一个节点的意见,可能存在误判情况。
2.客观下线:指标记一个节点真正的下线,集群内多个节点都认为该节点不可用,从而达成共识的结果。如果持有槽的主节点故障,需要为该节点进行故障转移。
十二.
Redis Cluster|故障恢复
故障节点变为客观下线后,如果下线节点是持有槽的主节点,则需要在它的从节点中选出一个替换它。从而保证集群高可用。下线主节点的所有从节点承担故障恢复的义务,当从节点通过内部定时任务发现自身复制的主节点进入客观下线时,将会触发故障恢复流程。
Redis高可用方案-哨兵与集群的更多相关文章
- Redis高可用方案哨兵机制------ 配置文件sentinel.conf详解
Redis的哨兵机制是官方推荐的一种高可用(HA)方案,我们在使用Redis的主从结构时,如果主节点挂掉,这时是不能自动进行主备切换和通知客户端主节点下线的. Redis-Sentinel机制主要用三 ...
- Memcached高可用方案收集(集群及分布式)
Memcached的集群方案有很多,不止magent一个,但是单靠集群软件去实现高可用感觉还是会缺少一步,最推荐的方案应该是软件加编码去实现高可用,至少能保证站点的99.5%的可运行行,以下是集群的方 ...
- Windows版本redis高可用方案探究
目录 Windows版本redis高可用方案探究 前言 搭建redis主从 配置主redis-28380 配置从redis-23381 配置从redis-23382 将redis部署为服务 启动red ...
- Redis高可用之哨兵模式Sentinel配置与启动(五)
0.Redis目录结构 1)Redis介绍及部署在CentOS7上(一) 2)Redis指令与数据结构(二) 3)Redis客户端连接以及持久化数据(三) 4)Redis高可用之主从复制实践(四) 5 ...
- Corosync+Pacemaker+DRBD+MySQL 实现高可用(HA)的MySQL集群
大纲一.前言二.环境准备三.Corosync 安装与配置四.Pacemaker 安装与配置五.DRBD 安装与配置六.MySQL 安装与配置七.crmsh 资源管理 推荐阅读: Linux 高可用(H ...
- 高可用,完全分布式Hadoop集群HDFS和MapReduce安装配置指南
原文:http://my.oschina.net/wstone/blog/365010#OSC_h3_13 (WJW)高可用,完全分布式Hadoop集群HDFS和MapReduce安装配置指南 [X] ...
- Redis 高可用之哨兵模式
参考 : https://mp.weixin.qq.com/s/Z-PyNgiqYrm0ZYg0r6MVeQ 一.redis高可用解决方案 redis主从 优点:1.高可靠性,主从实时备份,有效解 ...
- 深入理解Redis高可用方案-Sentinel
Redis Sentinel是Redis的高可用方案.是Redis 2.8中正式引入的. 在之前的主从复制方案中,如果主节点出现问题,需要手动将一个从节点升级为主节点,然后将其它从节点指向新的主节点, ...
- 16套java架构师,高并发,高可用,高性能,集群,大型分布式电商项目实战视频教程
16套Java架构师,集群,高可用,高可扩展,高性能,高并发,性能优化,设计模式,数据结构,虚拟机,微服务架构,日志分析,工作流,Jvm,Dubbo ,Spring boot,Spring cloud ...
随机推荐
- 2018-8-10-C#-代码占用的空间
title author date CreateTime categories C# 代码占用的空间 lindexi 2018-08-10 19:16:52 +0800 2018-2-13 17:23 ...
- Mysql怎样控制replace替换的次数?
我想把“ABC是ABC”替换成“123是ABC”,也就是找出第一个ABC替换成123,MYSQL命令应该怎么写? UPDATE data SET body=REPLACE(body, 'ABC', ' ...
- 【a602】最大乘积
Time Limit: 1 second Memory Limit: 32 MB [问题描述] 一个正整数一般可以分为几个互不相同的自然数的,如3=1+2,4=1+3,5=1+4=2+3,6=1+5= ...
- JS(JavaScript)的j进一步了解9(更新中···)
1.动画 (1) Css样式提供了运动 过渡的属性transition 从一种情况到另一种情况叫过渡 Transition:attr time linear delay: Attr 是变化的属 ...
- SDOI2019热闹又尴尬的聚会
P5361 [SDOI2019]热闹又尴尬的聚会 出题人用脚造数据系列 只要将\(p\)最大的只求出来,\(q\)直接随便rand就能过 真的是 我们说说怎么求最大的\(p\),这个玩意具有很明显的单 ...
- 关于redux和react-redux使用combinereducers之后的问题
最近用react写项目的时候,开始复习之前学过的redux,记录一下一些坑,以防忘记 我现在的redux目录下有这么些东西 首先是index.js import { createStore } fro ...
- python 多线程两种实现方式,Python多线程下的_strptime问题,
python 多线程两种实现方式 原创 Linux操作系统 作者:杨奇龙 时间:2014-06-08 20:24:26 44021 0 目前python 提供了几种多线程实现方式 thread,t ...
- from __future__ import print_function的使用
1.作用:把下一个新版本的特性导入到当前版本,就可以在当前版本中测试一些新版本的语法特性,例如在python2的环境下加入这一句可以测试python3的输出语法 2.使用方式:置于程序的第一行 3.示 ...
- 写时拷贝COW(copy-on-write)
写时拷贝技术是通过"引用计数"实现的,在分配空间的时候多分配4个字节,用来记录有多少个指针指向块空间,当有新的指针指向这块空间时,引用计数加一,当要释放这块空间时,引用计数 ...
- 探讨 java 的三大特性之一:继承
先回顾一下, Java 面向对象的三大特性包括:封装.继承.多态. PS:还有一些说四大特性,加了一个抽象 封装:将属性私有化,对外提供访问属性的方法,也可以不提供方法,这个特性叫做封装. 继承: 子 ...