REDIS群集是Redis提供的分布式数据库解决方案。群集疼痛用于数据共享,并提供复制和故障传输功能。
REDIS群集至少需要3个主节点。在这里,我们设置了3个主节点,3个奴隶和节点(因为我的计算机配置有限,因此可以模拟通过端口。平面设置群集)。
环境建设步骤如下:
该方法在键的节点上,如下所示:
实际上,这并不是那么麻烦。群集模式支持跳跃和重新定位。我们可以直接进入过去。
当客户端将指令发送到错误的节点时,节点会发现指令所在的插槽不在管理中。接收指令,客户端还将更新以纠正本地插槽映射表的缓存。所有密钥将使用新的插槽映射表。
大白话:如果当前键是您自己的节点的凹槽,则将由您自己处理。如果不是您自己的插槽,请将其转到目标插槽的节点。
证明:
监管过程如下:
REDIS群集节点之间的八卦协议通信
有两种方法可以维护群集的元数据(群集节点信息,主角,节点的数量,每个节点共享的数据等):有两种方法:
八卦协议包含各种消息,包括ping,pong,meta,失败等。
见面:一个节点发送到新添加的节点,允许新节点加入群集,然后新节点将开始与其他节点进行通信;
ping:每个节点经常将ping发送到其他节点,其中包含其自己的状态和群集元素数据,并通过ping交换元数据(类似于您感知到的群集节点的增加和删除,哈希插槽信息等。);
PONG:PING和METIC消息的返回,包括您自己的状态和其他信息,也可以用于信息广播和更新;
失败:节点判断另一个节点失败后,将失败发送到其他节点,通知其他节点,并且指定的节点已关闭。
八卦协议的优点是,元数据的更新相对散布。它不集中在一个地方。更新请求将是一个接一个的,点击所有节点要更新,有一定的延迟以减轻压力。缺点是元数据更新被延迟。某些操作可能会导致某些操作。
八卦通信端口10,000端口具有一个用于节点之间八卦通信的端口,即服务提供的服务的结束数为+10000,例如7001,则节点之间的通信为端口17001.EAK。节点将每隔一次向其他几个节点发送PING消息,而其他点会在收到Ping消息后接收ping。
网络抖动的真实世界计算机室网络通常不平静,并且通常发生在各种小问题中。例如,网络抖动是一种非常普遍的现象。突然,连接的一部分变得不可用,然后它将迅速恢复正常。
为了解决此问题,REDIS群集提供了一个选项cluster-node-timeout,表明当节点继续花费时间浪费时间时,可以确定节点会失败并需要切换。没有此选项,网络抖动将经常导致主宗教仪式切换(数据已复制)。
当奴隶发现他的主人成为一个失败状态时,他试图使故障转移成为新的大师。由于悬挂大师可能有多个奴隶,因此有一个多个奴隶竞赛成为大师节点的过程。该过程如下:
从节点来看,一旦失败状态的状态试图立即启动选举,它就不在状态节点,但是有某些延迟。某些延迟确保我们等待失败状态在集群中传播。如果奴隶立即试图参加选举,其他大师可能不会意识到失败的状态,可能拒绝投票
延迟计算公式:
延迟= 500ms +随机(0?500ms) + slave_rank * 1000ms
Slave_rank说,从主管复制了来自主的数据总数。较小的等级,越多地代表了已复制的数据。这样,持有最新数据的Slave将首先启动选举(理论上)。
REDIS群集没有一个半机制来解决大脑破裂问题。网络分区导致多个主节点在大脑破裂后提供写作服务。恢复网络分区后,主要节点之一将从节点更改。目前,大量数据将丢失。
回避方法可以将参数添加到REDIS配置(此方法无法避免100%的数据丢失,请参阅集群领导者选举机制):
注意:此配置将在一定程度上影响群集的可用性。例如,如果少于一个从属,即使领导者正常,群集也无法提供服务。
当redis.conf cluster-require-full-coverage的配置时,这意味着插槽的主库离线
当库中没有对应的恢复时,群集仍然可用。
因为新主人的选举要求群集主节点同意的一半以上才能成功。如果只有两个主节点,则其中一个被悬挂,并且不可能满足选举的条件。
奇数主节点可以根据满足条件的基础保存节点,例如三个主节点和四个主节点的群集。如果您挂了一个主节点,则两个主节点无法选举新的主节点,因此从保存机器资源的角度提到了奇数主节点。
如何让多个键落入一个插槽?
对于MSET和MGET等多个键,REDIS群集仅支持所有密钥都落在同一插槽上的情况。如果必须使用MSET命令在REDIS群集上操作多个密钥,则可以在键的键上添加{xx}的键,以便仅计算括号中的参数数据shards,以确保不同的键可以落入同一插槽。示例如下:
mset {user1}:1:名称Zhangsan {user1}:1:年龄18
假设按名称和年龄计算的哈希插槽值不同,但是此命令在群集下执行,REDIS仅在大型括号中使用User1来计算哈希插槽。
当哨兵将主服务器视为离线状态时,前哨将与其他哨兵进行协商,以选择Sentinel的领导者进行故障转移工作。EAFTDISCOVERY MASTER SERVER进入离线哨兵可以要求其他Sentinel作为Atinel的领导者选择自己同时,每次前哨选举将增加配置时代(选举周期),每个时代只有一个前哨领导者。故障转移操作,并从幸存的奴隶中选出了新的主人。此选举过程类似于集群的主选举。
哨兵群集中只有一个哨兵节点,Redis的主人可以正常运行和选举大师。如果主人被吊死,唯一的哨兵节点是哨兵领导者,可以正常选举。
但是,对于高可用性,通常建议部署至少三个哨兵节点。您为什么建议一些类似于群集无数主节点的哨兵节点的原理。
REDIS群集中的节点分为主节点(主节点)和节点(从)。主节点用于处理凹槽,该节点用于复制主节点。该节点继续处理命令请求。
集群中的每个节点会定期向群集中的其他节点发送PING消息,以检测对方是否在线。然后发送PING消息的节点将标记接收PING消息的节点,该节点是涉嫌离线(PFAIL)的节点。
如果在集群中,负责处理凹槽的主节点的一半以上将报告主节点X到可疑的离线,则此主节点X将被标记为离线(失败),并且主节点X将被标记为就像已经像已经一样的主节点x的主节点x上已经作为主节点作为主节点。离线节点将广播有关主节点X的失败消息。所有接收此失败的节点消息将立即将主节点X标记为离线。
例如,主节点7002和主节点7003都认为主节点7000已进入离线状态,主节点7001还相信主节点7000已进入可疑的离线状态。在四个负责任的处理插槽的四个主要节点中,群集负责处理插槽。其中三个标记了7000个主节点为离线节点,数字超过了一半。因此
当从节点发现节点时,主节点将进入离线状态,从节点开始使脱机主节点失败。以下是故障传输的执行步骤:
集群选举的新主要节点的方法与前哨方法非常相似,因为两者都是基于基于筏算法的领导者选修方法。
群集状态查询
根据原始集群,我们添加了另一个大师(7006)一个cong(7007)
7004/redis-7004.Conf从Slave 127.0.0.1 7005 7005/redis-7005.conf从Slave 127.0.0.0.0.1 7006 7006/redis-7006.conf Master 127.0.0.0.0.0.0.1 7007/redis-7007.conf Slave-7007.Conf Slave Slave Slave Slave Slave Slave Slave Slave Slave Slave Slave Slave Slave-Slave Slave-Slave Slave-Slave Slave-Slave-Slave-Slave-Slave。
加入集群
如下所示,7006加入了集群,默认值是主节点:
大小群集
在执行过程中,您将询问计划的迁移插槽,迁移数据目标和数据源。
重新分配结果查询
从7006的节点7007配置,还执行命令以首先加入群集
我们需要执行重复命令以指定当前节点的主节点ID(来自节点)。首先,您需要连接新7007节点的客户端,然后使用cluster命令进行操作。在主节点(以前创建的7006主节点)下
具体命令如下:
最后,我们再次问,发现7007的成功成为7008的主要节点
彻底删除主节点,因为主节点中的数据,因此我们可以将其分为两个步骤以操作
为了促进验证,我首先设置数据
首先从节点执行命令,然后执行命令:
查询节点插槽信息
执行后的结果如下:
原始:https://juejin.cn/post/7103551714879340580