玩转Redis的高可用(主从、哨兵、集群)
所谓高可用性,也称为HA(HighAvailability),是分布式系统架构设计必须考虑的因素之一。
是保证系统SLA的重要指标。
Redis高可用主要有三种模式:主从模式、哨兵模式、集群模式。
Redis为Redis提供了复制功能,当某个redis数据库中的数据发生变化时,这种变化会自动同步到其他redis机器上。
当Redis分布在多台机器上时,这些机器节点会被分为两类,一类是主节点(master node),一类是从节点(slave node)。
一般来说,主节点可以进行读写操作,而从节点只能进行读操作。
一个主节点可以有多个从节点,但一个从节点只能有一个主节点,即所谓的一主多从结构。
·支持主从复制,主机会自动同步数据到从机,读写可区分;
·Master以单机模式向主从提供服务非阻塞方式。
因此,在Master-Slave同步过程中,客户端仍然可以提交请求或者修改请求;
·Slave也以非阻塞的方式完成数据同步。
同步过程中,如果客户端提交查询请求,Redis会返回同步前的数据。
·Redis不具备自动容错和恢复功能 主从机宕机会导致部分读写请求失败。
需要等待机器重启,更改前端IP才能手动恢复;
·主机宕机。
介绍一些数据无法及时同步到从机的情况。
系统可用性降低;
·Redis很难支持在线扩容,当集群容量达到上限时在线扩容会变得非常复杂;
·Redis主节点和从节点中的数据是一样的,但是内存可用性降低了
在实际生产中,我们优先考虑哨兵模式。
在这种模式下,如果master宕机了,sentinel会自动选择master,并将其他slave指向新的master。
在主从模式下,redis还会发出哨兵命令redis-sentinel。
Sentinel 是一个独立的进程。
原理是sentinel进程向所有redis bot发送命令并等待Redis服务器响应,从而监控多个正在运行的Redis实例。
通常使用奇数个哨兵来促进决策和选择。
几个哨兵组成一个警卫小组。
哨兵之间会直接通信,检查哨兵是否正常运行。
同时,他们会发现猎人大师和哨兵将做出选择新主人的决定。
哨兵模式的作用:
·通过发送命令,让Redis服务器回去监控其运行状态,包括主服务器和从服务器;
·但是哨兵进程监控Redis服务器时也可能出现问题,我们可以使用多个哨兵进行监控。
每个哨兵也会受到监控,从而形成一系列的守卫模式。
Sentinel与kafka集群中zookeeper的功能非常相似。
·哨兵模式基于主从模式,哨兵模式具有主从模式的所有优点。
·主从自动切换,使系统更加健壮、高可用。
·具有主从模式的缺点,每台机器上的数据都是相同的,内存的可用性较低。
·Redis难以支持在线扩容当集群容量达到上限时,在线扩容将会变得非常复杂。
Redis集群模式本身并没有使用一致的哈希算法,但使用痕迹。
Redis Sentinel模式最初可以实现高可用性和读取分隔,但是在此模式下,每个Redis服务器都会存储相同的数据,这是浪费内存的数据,因此将群集添加到Redis3中。
。
集群模式实现了Redis和Shards数据的分布式存储,这意味着每个Redis节点通过群集总线与其他节点通信。
特殊端口号用于通信,即外部服务号和10000。
例如,如果节点的端口号为6379,则使用的端口号用于与其他节点16379通信。
节点之间的通信使用特殊的二进制协议。
对于客户端,整个群集出现。
敦促。
根据官方建议,群集放置至少需要3个主结,最好将模型用于3个电网和3个节点。
redis的每个节点上有两件事,一个是轨道(轨道),值为:0-16383,可以从redis stand.rb上方的执行中看到这些分布16383-三个大师的轨道。
另一个是群集,可以理解为群集驱动的插头 - 类似的后卫帖子。
当我们访问的钥匙到来时,REDIS在计算CRC16算法后将具有结果,然后使用16384找到结果,以使每个密钥都匹配0 -16383的Hash Track,通过该值,找到对应于相应轨道的相应节点,然后自动跳到此相应的节点以访问访问操作。
为了确保高可访问性高可访问性,重新夹住群集主模式,主节点对应于一个或多个节点。
当其他主节点ping master节点master1时,如果主人的精通时间超过一半与master1有通信时间,则Master1被认为是倒下的,并且Master1将使用Node Slave1中的Master1,然后将Slave1更改为Master's提供服务。
如果Master1及其nodeslave1被降级,则整个群集将进入错误条件,因为群集的缝隙映射不完整。
如果超过一半的群集悬挂,无论是从属,群集都将进入错误条件。
redis-cluster使用分散的想法。
REDIS群集的扩展是在集群中添加一台计算机,收缩是从集群中删除机器,然后在16383的轨道中重新定位到群集上的节点(数据相交) 。
扩展容量还使用群集管理工具redis-s。
当您扩展容量时,您首先使用redis-tri.rbaddd节点将新机器添加到群集中。
无法使用它。
使用redis-tri.rbreshard进行重量赛(计算机总),并将旧节点的痕迹分配给新节点,新节点可以工作。
在容量期间,首先使用redis-tri.rbreshard卸下的机器上的凹槽,然后使用redis-tri.rbadd-part卸下机器。
通过在备用数据中添加一个从属,它可以自动实现失败的故障转移,以降低操作和维护成本,改善系统的扩展和可访问性系统。
1. rdiscuses是一个没有中央节点的群集体系结构,并取决于戈斯协议(谣言传播)以协调群集。
但是,八卦存在延迟和新闻偿还的问题。
尽管REDS4.0是优化的,但此问题仍然存在。
。
干涉。
扩大容量时需要数据迁移。
和redis以确保迁移的质地是操作时所有迁移操作。
钥匙太大,它将与群集中的错误接触,从而导致不必要的猎物。
主和从模式:悬挂主人后,您需要手动指定新主人。
前哨模式:悬挂主机后,Centry进程将积极选择高度访问的新主体,但存储在每个节点中的数据是相同的,这会浪费内存区域。
数据量不大,群集的大小也不是很大。
群集模式:计算机音量相对较大,QPS要求很高。
这位重新竞选者是在Redis 3.0之后正式推出的。
Redis深入理解-三次握手、槽位机制
REDIS是存储系统中广泛使用的钥匙值,群集模式可提供高性能和高可用性。聚类模式取决于痕量机理(轨道)和八卦协议的口号,以实现数据分数和节点之间的数据同步。
在下面,我们将了解Redis群集的三个握手原理,这是基于计算机的基于计算机数据的原理以及集群扩展过程中插槽的跟踪过程。
Redis群集中的节点通过三个握手建立了群集连接。
发送`meet'命令以通知其他节点,另一方在内存中创建clusterodode`结构以维护群集结信息。
这里的三个握手是指在Redis中建立应用程序层连接的特定过程,该过程与传统的TCP -TRET TIME HASTPRESS不同。
八卦协议是REDIS群集中的关键组件,该组件用于实现数据的最终纹理。
在集群中,八卦协议在节点之间随机传播信息,类似于谣言传播,以确保所有节点最终都可以接收并同步相同的数据。
REDIS分布式群集通过插槽计算机实现。
群集将所有数据划分为16个384个轨道,每个轨道都负责部分数据,因此数据均匀分布在每个节点之间。
这样,可以提高读取和写作速度的数据,并且可以扩散节点的数量以扩大REDIS的内存能力。
群集扩展或容量时,需要数据迁移。
在授予新节点时,将自动实现数据,以确保集群的稳定性和性能。
根据痕量机制,Redis群集中的节点不仅存储了自己的插槽计算机,而且还将轨道分布存储到整个群集中。
在每个节点计算了钥匙的凹槽之后,它由CRC16算法和16384模型确定以确定要存储的节点。
当客户端插入键值时,首先选择一个节点随机,因为节点将在节点内计算,然后执行命令或重定向到目标节点。
在群集模式下,当客户端发送命令时,将插槽计算到键存在的键,然后将数据放在相应的轨道中。
对于钥匙和轨道的比率,Redis Skiplist使用数据结构。
跳表中的每个节点都包含对象,得分,BW,L1,L2 L32指针,其中对象字段存储键值和分数字段存储值,这表明哪个轨道是键。
当群集扩展名(添加新节点)后,需要从现有节点中的凹槽的一部分。
此过程取决于“ clusterState”的两个数据结构:`migration_slots_to [16384]`and'imping_slots_from [16384]`。
`importing_slots_from []````obration_slots_to []``在迁移过程中可能发生错误,即在手术过程中而不是当前的节点。
根据错误信息。
在目标节点之前,需要问题命令以确保正确处理迁移状态。
redis主从、哨兵、集群的区别
通过牢固的功能,redis可以保证即使服务器重新启动,它也不会丢失(或少量损坏)数据,因为牢固度将使数据保存到硬盘中,并将来自重新启动数据的数据加载。光盘。
哨兵的作用是监视主,耶和华和耶和华的转变。
它可以是主人,但是数据由毫无结果存储,每个主节点和从属节点都有相同的数据。
该数据是存储鲨鱼,每个节点存储一个数据的一部分,以实现分布式群集的目的。