Redis大家也挺熟悉的吧,技能用法也熟知于心了吧,那么是否知道redis集群的原理呢?不了解的我们一起深度的探讨一番,了解的我们就巩固复习redis集群的原理吧。
Redis是内存服务器,使用Redis可以减少IO访问量,提供系统并发访问效率。在高可用方面,Redis提供集群技术,在Redis3.0之前使用哨兵和主从复制技术解决高可用问题,在Redes3.0之后采用数据分区存储到不同的插槽技术,每组插槽由一个Redis主节点托管,主节点与多个从节点数据同步的方式实现高可用。如下图:
客户端可以连接集群中的任意节点,将存储Key-Value中的Key,取CRC16运算结果,在取16384的模,得到的值一定在0-16384之间,再根据集群中每个节点托管的Solt配置,将请求路由到对应的主节点上。
节点间通信
Redis集群节点间使用Gossip二进制协议通信,通信的信息包括:
1、节点的IP和端口
2、节点的标识ID
3、节点托管的Solt范围
4、节点最后一次向集群发送PING数据包的时间
5、节点最后一次从集群收到PONG数据包的时间
6、集群将此节点标志下线的时间
7、此节点的从节点数量
8、如果此节点是从节点,发生其主节点的ID
新增节点识别
1、管理员通过命令使集群接收新节点
cluster meet ip port
2、通过集群节点推荐机制
系统管理将新节点与集群中的任意节点建立信任连接,集群中的其它节点会自动对新节点建立信任连接。
节点失效检测
集群中的节点向其它节点发送PING数据包,接受来自其它节点PONG回复,如果在规定时间内(node timeout)未收到某个回复,将这个节点标记为PFAIL(possible failure)。节点间传播的信息都包含检测到的PFAIL节点列表,如果集群内大部分节点标识某节点为PFAIL状态,此节点转为FAIL状态。
从节点选举
一旦某主节点进入FAIL状态,如果主节点存在从节点,那么其中一个从节点会被升级为新的主节点。其它从节点与新的主节点建立主从关联并同步数据。整个从节点选举过程分为申请、授权、升级、同步四个阶段
1、申请
下线的主节点的从节点中满足如下条件的,向集群中其它主节点发出升级申请
a)、节点对应的主节点下线
b)、下线的主节点托管着Slot哈希槽
2、授权
集群中其它主节点根据如下条件判断,从节点升级申请
a)、发送申请的从节点对应的主节点处于FAIL状态
b)、在下线的主节点的从节点列表中,此节点ID最小
c)、此从节点运行正常,没有标注FAIL和PFAIL状态。
3、升级
一旦从节点在给定时间内获得集群大部分主节点的授权,就接管下线主节点的全部Slot数据,并且主动发送PONG数据包给集群中的其它节点,告知其它节点自己是一个PROMOTED SLAVE,即已升级的从节点,
4、同步
其它节点接收到PROMOTED SLAVE告知后,根据新的主节点进行相应配置。所有被新主节点接管的Slot会被更新。如果已经下线的主节点复活,再收到PROMOTED标识后,成为新节点的从节点。
集群动态配置
集群通过ADDSLOTS和DELSLOTS命令添加和删除节点。
CLUSTER SETSLOT slot NODE node
可以将指定槽slot指派给节点node
CLUSTER SETSLOT slot MIGRATING node
将指定节点的槽slot移出
CLUSTER SETSLOT slot IMPORTING node
将指定槽slot导入节点node
以上的redis的原理是否明了呢?更多知识的详情,请继续关注本网站。