Redis集群水平扩展(一)

栏目: 数据库 · 发布时间: 5年前

内容简介:Redis分布式方案一般有两种1、客户端分区,优点是分区逻辑可控,缺点是需要客户端处理数据路由、高可用、故障转移等。2、代理方案,优点是简化客户端逻辑和升级,缺点是加重架构复杂性和性能损耗。

Redis分布式方案一般有两种

1、客户端分区,优点是分区逻辑可控,缺点是需要客户端处理数据路由、高可用、故障转移等。

2、代理方案,优点是简化客户端逻辑和升级,缺点是加重架构复杂性和性能损耗。

Redis Cluster是官方提供的分布式解决方案,从3.0版本正式推出,和以上两种方案都不太一样,采用了虚拟槽分区,分区方式采用了hash分区,它并没有使用一致性hash(增减节点会导致部分数据无法命中,当使用少量节点时节点变化会导致影响数据映射),而是使用改进的一致性hash-虚拟槽方式分区。Redis Cluster使用了 16384 个虚拟槽,槽被分配给节点管理。

Redis集群水平扩展(一)

节点通信使用 Gossip 协议,常用的消息有 ping,pong,meet,fail 。每个节点都会保存集群的完整拓扑信息和槽信息(这就避免了单点)。所以向任何一个节点发送请求,若数据在当前节点则命中,若不在则返回 MOVEDIPPORT 消息,指明数据所在的节点信息,客户端只需要重新发送即可。即  CRC16 ( key ) -> slot _ num -> 节点 或者 CRC16 ( key ) -> slot _ num -> 节点 返回 MOVED 信息,客户端可以redirect到目标节点,疑问: 如果目标节点正在扩容或者摘除,如何处理?见下面分析。

Redis Cluster缺点

1、批量操作有问题,mget,mset命令只能支持具有相同slot值的key(所有可以使用 hash_tag 来把key映射到相同slot);

2、key事务支持有限,不能跨节点,也不能把大的对象映射到不同节点;

3、复制结构只支持一层,不支持树形结构,即从节点只有一层;

集群扩容与节点摘除

集群扩容

(1)准备新节点

(2)加入集群(只需要向一个节点发送meet命令,Gossip协议就会传播至所有节点)

(3)迁移槽和数据

3.1 准备槽迁移计划,即要迁移哪个槽,默认的集群会尽量平均分配槽至各节点

3.2 向目标节点发送命令,目标节点做准备

3.3 向源节点发命令,源节点做准备

3.4 源节点循环获取要迁移的槽里面的key

3.5 源节点批量(pipeline)迁移数据至目标节点(期间是保证高可用(ASK机制保证),如何保证下面讲)

3.6 向集群所有的主节点发送命令,说明槽已经迁移至新节点

集群收缩

(1)当下线的节点不负责槽或者下线的节点是从节点,只需要通知其他节点,通知成功后下线节点即可

(2)如果当前节点有负责的槽,则和机器扩容步骤(3)一样,将本节点负责的槽迁移出去

集群请求路由

为了提升效率,Jedis本地会额外缓存一份slot到node的映射数据,所以一般情况下获取到的node是对的,若槽和节点映射有变化,会有MOVED信息,客户端会去节点获取slot到node最新信息更新本地。

MOVED路由

1、 CRC16 ( key ) -> Slot槽 ,若节点是当前节点,则处理,若节点不是当前节点,则返回 MOVED 信息

2、客户端向 MOVED 指向的节点重发请求

ASK重定向

1、 CRC16 ( key ) -> Slot槽 最终进入目标节点,若槽在迁移且对象不在,则返回ASK信息

2、客户端向ASK信息的节点发送请求

所以即便在槽迁移过程中,集群仍然能保证高可用。

参考连接:

https://ballenlee.iteye.com/blog/2410315


以上所述就是小编给大家介绍的《Redis集群水平扩展(一)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

两周自制脚本语言

两周自制脚本语言

[日]千叶 滋 / 陈筱烟 / 人民邮电出版社 / 2014-6 / 59.00元

《两周自制脚本语言》是一本优秀的编译原理入门读物。全书穿插了大量轻松风趣的对话,读者可以随书中的人物一起从最简单的语言解释器开始,逐步添加新功能,最终完成一个支持函数、数组、对象等高级功能的语言编译器。本书与众不同的实现方式不仅大幅简化了语言处理器的复杂度,还有助于拓展读者的视野。 《两周自制脚本语言》适合对编译原理及语言处理器设计有兴趣的读者以及正在学习相关课程的大中专院校学生。同时,已经......一起来看看 《两周自制脚本语言》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

URL 编码/解码
URL 编码/解码

URL 编码/解码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具