前言
大家好,牧码心今天给大家推荐一篇zookeeper系列(五)—集群工作原理的文章,在实际工作中有很多应用场景,希望对你有所帮助。内容如下:
- 集群概要
- 集群部署
- 角色说明
- 工作原理
概要
ZooKeeper 是 Apache 的一个顶级项目,为分布式应用提供高效、高可用的分布式协调服务,提供了诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知和分布式锁等分布式基础服务,被广泛地应用于诸如 Hadoop、HBase、Kafka 和 Dubbo 等大型分布式系统中。其具体设计目标如下:
- 强一致性:客户端发起的事务请求,不能连接到集群的哪个节点,得到的结果是相同的。
- 可靠性:具有高可靠,可扩展的性能,要求数据能持久化,节点伸缩和扩展不影响对外提供的服务;
- 实时性:Zookeeper不能保证两个客户端能同时得到刚更新的数据,如果需要最新数据,应该在读数据之前调用sync()接口;
- 原子性:更新只能成功或者失败,没有中间状态;
- 顺序性:所有节点能保证消息更新的顺序,如在一个节点上消息a在消息b前发布,则在所有节点上消息a都将在消息b前被发布;
下面我们来看下zookeeper官方提供的集群架构图:
图中每一个Server代表一个安装Zookeeper服务的节点。所有节点要求能相互感知,且在内存中维护当前的节点状态。客户端连接单个节点会发送TCP连接保持着通信,通过它发送请求、获取响应、获取监视事件和发送心跳等。如果到所连接节点的TCP连接中断,客户端将连接到集群中的另一个节点。
集群部署
要搭建一个高可用的zookeeper集群,首先要确定集群的规模,角色的分配。关于zookeeper集群规模确定,我们了解到zookeeper集群有“过半存活即可用”的特点,意思是一个 ZooKeeper 集群如果要对外提供可用的服务,那么集群中必须要有过半的机器正常工作并且彼此之间能够正常通信。基于这个特性,如果想搭建一个能够允许 N 台机器 down 掉的集群,那么就要部署一个由 2*N+1 台服务器构成的 ZooKeeper 集群。因此,一个由 3 台机器构成的 ZooKeeper 集群&#