14°

redis、kafka、zookeeper 集群辨析

集群的目的:

    1.保证高可用

    2.增强并发能力,提高系统的吞吐量。

 

redis 集群(高可用、数据分散,总可存储数据变大):

    多个 主-从 结构。

    主节点处理请求,从节点只是同步数据

    各个主节点存储的数据不同。

    主从切换(哨兵 监听各自的服务状态)

 

kafka 集群(高可用、数据分散):

    分为:控制器、分区首领 和 跟随者

    控制器只是一个broker,不仅提供正常的服务,还要提供首领选举的能力。负责为失去首领的分区找到新的首领

    分区首领处理来自客户端的生产者的消息请求

    跟随者只是复制消息

    因为每个broker可保存成百上千不同主题与分区的副本,若一个broker离开了集群,可能会让在该broker的分区副本失去分区首领,因此 控制器会为这些分区重新选举一个分区首领。

    若控制器离开了集群,则其他broker会收到ZK 的通知,然后会去尝试成为新的控制器,第一个成功,其余失败。则继续注册监听新的控制器节点。

 

ZK 集群(数据都相同):

    zk 是用来协同分布式系统之间的工作的。

    单机即可完成:

    1)分布式锁(只有一个能获取到锁)

    2)主从选举

    3)从节点注册监听主节点的事件,主节点崩溃,从节点会立即收到通知,去尝试成为主节点。

 

    集群:为了保证高可用 和 更大的 并发读。不是为了分散数据存储,因为ZK不是设计用来存储大量数据的。

    1个leader,多个follower

    所有的server 都是最终数据一致

    leader 职责:接受follower写请求,同步请求,发起投票,接收follower对提议的回复

    follower 职责:接收客户端请求并返回请求结果、参与投票

    1).崩溃的server 再加入集群,即使之前是 leader,那么此刻一定是 follower。

    2).client 只能连接到 集群中的 一台 follower 。follower 接收到写请求,则转给 leader. follower 接收到读请求,则返回结果.

    因为全局数据一致,因此无论 client 连接到 集群中的 哪一台 follower,均可以认为得到的数据是一致的。 

    3)写请求 由 follower传递给leader, leader 发起投票,超过半数,这个写请求才会被写入leader,然后 同步给follower.最后请求结果返回给 客户端。

    4)一个写请求只会半数以上server 投票通过才能持久化保存,因此,ZK集群server数量一般都是 奇数。 3/5/7/9 

   

    

 

 

 

 

 

 

 

 

 

本文由【潦草的犀牛】发布于开源中国,原文链接:https://my.oschina.net/langwanghuangshifu/blog/3115060

全部评论: 0

    我有话说: