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高可用方案-哨兵与集群的更多相关文章

  1. Redis高可用方案哨兵机制------ 配置文件sentinel.conf详解

    Redis的哨兵机制是官方推荐的一种高可用(HA)方案,我们在使用Redis的主从结构时,如果主节点挂掉,这时是不能自动进行主备切换和通知客户端主节点下线的. Redis-Sentinel机制主要用三 ...

  2. Memcached高可用方案收集(集群及分布式)

    Memcached的集群方案有很多,不止magent一个,但是单靠集群软件去实现高可用感觉还是会缺少一步,最推荐的方案应该是软件加编码去实现高可用,至少能保证站点的99.5%的可运行行,以下是集群的方 ...

  3. Windows版本redis高可用方案探究

    目录 Windows版本redis高可用方案探究 前言 搭建redis主从 配置主redis-28380 配置从redis-23381 配置从redis-23382 将redis部署为服务 启动red ...

  4. Redis高可用之哨兵模式Sentinel配置与启动(五)

    0.Redis目录结构 1)Redis介绍及部署在CentOS7上(一) 2)Redis指令与数据结构(二) 3)Redis客户端连接以及持久化数据(三) 4)Redis高可用之主从复制实践(四) 5 ...

  5. Corosync+Pacemaker+DRBD+MySQL 实现高可用(HA)的MySQL集群

    大纲一.前言二.环境准备三.Corosync 安装与配置四.Pacemaker 安装与配置五.DRBD 安装与配置六.MySQL 安装与配置七.crmsh 资源管理 推荐阅读: Linux 高可用(H ...

  6. 高可用,完全分布式Hadoop集群HDFS和MapReduce安装配置指南

    原文:http://my.oschina.net/wstone/blog/365010#OSC_h3_13 (WJW)高可用,完全分布式Hadoop集群HDFS和MapReduce安装配置指南 [X] ...

  7. Redis 高可用之哨兵模式

    参考   : https://mp.weixin.qq.com/s/Z-PyNgiqYrm0ZYg0r6MVeQ 一.redis高可用解决方案 redis主从 优点:1.高可靠性,主从实时备份,有效解 ...

  8. 深入理解Redis高可用方案-Sentinel

    Redis Sentinel是Redis的高可用方案.是Redis 2.8中正式引入的. 在之前的主从复制方案中,如果主节点出现问题,需要手动将一个从节点升级为主节点,然后将其它从节点指向新的主节点, ...

  9. 16套java架构师,高并发,高可用,高性能,集群,大型分布式电商项目实战视频教程

    16套Java架构师,集群,高可用,高可扩展,高性能,高并发,性能优化,设计模式,数据结构,虚拟机,微服务架构,日志分析,工作流,Jvm,Dubbo ,Spring boot,Spring cloud ...

随机推荐

  1. poj 3279(开关问题)(待完成)

    传送门:Problem 3279 #include<iostream> #include<cstdio> #include<cstring> using names ...

  2. H3C 用三层交换机实现VLAN间路由

  3. H3C 子网划分方法

  4. win10 uwp 解决 SerialDevice.FromIdAsync 返回空

    调用 SerialDevice.FromIdAsync 可能返回空,因为没有设置 package.appmanifest 可以使用端口 打开 package.appmanifest 文件添加下面代码 ...

  5. LuoguP2765 魔术球问题

    LuoguP2765 魔术球问题 首先,很难看出来这是一道网络流题.但是因为在网络流24题中,所以还是用网络流的思路 首先考虑完全平方数的限制. 如果\(i,j\)满足\(i < j\) 且 $ ...

  6. python调用另一个文件中的代码,pycharm环境下:同文件夹下文件(.py)之间的调用,出现红线问题

    如何调用另一个python文件中的代码无论我们选择用何种语言进行程序设计时,都不可能只有一个文件(除了“hello world”),通常情况下,我们都需要在一个文件中调用另外一个文件的函数呀数据等等, ...

  7. HDU6333 莫队+组合数学

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6333 题意: T次询问,每次询问n个苹果中最多拿m个苹果的方法数 题解: 因为T为1e5,所以直接做时间 ...

  8. python 下载bilibili视频

    说明: 1.清晰度的选择要登录,暂时还没做,目前下载的视频清晰度都是默认的480P 2.进度条仿linux的,参考了一些博客修改了下,侵删 3.其他评论,弹幕之类的相关爬虫代码放在了https://g ...

  9. OSI协议介绍

    应用层 为网络用户或应用程序提供各种服务,代表协议有Telnet,FTP,HTTP,SNMP等 表示层 负责所传输的信的语法和语义,用于处理再多个通信系统之间交换信息的表示方式,代表协议有ASCII, ...

  10. 使用eclipse创建第一个SpringBoot项目

    1.new->maven->maven project,   勾选 Create a simple project,  下一个页面中填入group id(项目组织唯一标识, 如org.ap ...