首页 > 编程知识 正文

分布式技术是冗余存储,分布式数据存储点对点传输

时间:2023-05-06 08:37:36 阅读:171183 作者:3654

为什么需要分布式存储? 因为我们主机的内存总是有限的,所以如果redis缓存中的数据过多,就一定会用完。 另外,如果系统需要存储大量的redis数据,则向外扩展需要分布式存储。

一个主机存储不够,所以分离数据,再添加一个主机。 n个主节点,每个主节点安装多个从属节点以进行读写分离。 这就是redis cluster集群体系结构。

图:

redis cluster介绍什么是redis cluster,以及存储redis数据的分布式体系结构。

可以自动分割数据。 将部分数据存储在每个主节点上可提供内置的高可用性支持。 部分主机不能使用。 剩下的主机还可以使用。 在redis cluster体系结构中,redis释放6397端口和10000端口号,例如6397、6397端口。例如,分布式存储数据算法hash :此在key=1111中,如果类型的值为1,则它将存储在第二台计算机上。

但是,如果一台机器停机,不仅该主机上的数据会丢失,其他数据也几乎无法查询。 由于缺少一台主机,所有key都必须对2建模。 那是例如11114比3的模具是2,存放在第三台机器里的,现在调查的时候2比2的模具值是0的话,就会去第一台机器调查,当然就查不到了。 这可能导致大量缓存数据丢失,增加数据库压力,导致系统崩溃

一致性的hash :有圆环的概念。 同样,根据hash计算数据需要落到哪个主机上,但如果当前主机关闭或无法进行数据查询,则顺时针再次查询下一个节点的主机。 但是,这也存在热点问题,如果某个区间的值在同一个master上,大量的请求就会流入同一个master,引起通信瓶颈,影响性能。

图:

一致性虚拟节点:通过将节点作为虚拟分布式存储,同一区间内的数据均匀分布在所有节点上,不会引起主热点问题。 图:

redis cluster的hash slot :

redis cluster具有固定的16384个散列插槽,这16384个节点均匀分布在所有主机上,即使一台主机停机,也可以快速完成迁移,而不影响其他数据查询

redis cluster的核心原理1、基础通信原理

使用gossip协议进行通信。 在所有节点之间进行相互通信,以保持整个集群中所有节点的数据完整。 另外,由于元数据的更新比较分散,所以存在不会对同一节点产生过度的压力,可能会发生延迟的缺点。

另一种通信方式是集中式的,redis cluster没有使用这个。 这是因为虽然更新和读取元数据的时效性比较好,但是集中处理会给元数据的存储带来一定的压力

2、节点通信

每个节点都有专用于节点通信的端口10000。 例如,如果提供服务的端口是7001,则节点通信的端口为17001。 每隔一定时间向其他节点发送ping消息,其他节点返回xsdds

3、交换信息

故障信息:添加或删除节点、散列信息等

gossip协议

gossip协议包含ping、xsdds、meet、fail等很多信息

meet :发送到新节点,告知其加入集群,并进行彼此的通信。

ping :每个节点频繁地发送ping,进行包括自己的状态和保持的元数据在内的数据交换

xsd ds :返回ping和meet,也可以用于广播和更新信息,包括自己的状态和其他信息

故障:一个节点判断为另一个节点故障后,发送故障,告知其他节点已关闭

ping消息

ping频繁进行,携带元数据会增加网络的负担。 每个节点每秒执行10次ping,每次ping时选择通信频率最低的5个节点。 例如,如果两个节点没有ping分钟,则数据将严重不匹配,从而出现问题。

redis cluster的高可用性和哨兵模式几乎相同

判断节点宕机

如果一个节点确定另一个节点发生故障不是pfail,则是主观故障

如果多个节点认为此节点已关闭,则表示为fail,表示它已客观关闭。 和哨兵的sdown和odown一样

如果在由cluster_node_timeout规定的时间内节点没有返回xsdds,则节点pfail被识别并在与另一个节点ping时携带该信息,并且如果半数以上的节点知道该节点pfail,则节点pfail被排除

从节点选举

如果先过滤节点,很长时间不再与主节点通信,则此slave不在选举范围内。

每个从节点根据复制数据到主节点的优惠设置选举时间,优惠越大(复制数据越多),选举时间越早,选举优先

如果所有主节点都投票给slave,并且大多数主节点[ n/21 ]投票给一个slave,则此节点可以切换到主节点。

jedis客户端我们开发的时候都是基于jedis开发的。 他是基于Java的客户端。 因为我们现在的目标是redis cluster,所以使用jedis cluster api进行开发。 让我们看一下jedis cluster和redis cluster的一些交互原理。

基于重定向的客户端客户端会随意向redis实例发送命令。 此实例计算hash slot的值,如果是本地的话直接处理,如果是其他机器的话向客户端返回moved,让客户端进行重定向。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。