1、Zookeeper是什么?
Zookeeper是雅虎公司基于Google chubby(解决分布式事务问题)而创建的一个开源的分布式协调服务。
为解决分布式系统中协作多个任务的难题,zookeeper应运而生(协作任务是指一个包含多个进程的任务),简化了构件分布式系统的难度。Zookeeper之前是其他系统采用分 布式锁管理器或分布式数据库来实现协作,实际上zookeeper从中吸取了很多概念。zookeeper更注重于任务协作,并不提供任何锁的接口或通用数据存储接口。同时, zookeeper并没有为开发人员增加任何同步的原语,使用起来非常的灵活。
开发分布式应用时,其复杂性会立刻凸显出来,zookeeper并不能为我们解决分布式开发中所有的问题,而是为开发者提供了一种优雅的框架来处理这些问题,并且在分布式计 算领域进行了大量的工作。
2、Zookeeper能做什么?
数据的发布和订阅(配置中心:disconf)、负载均衡(dubbo利用了zookeeper机制实现负载均衡)、命名服务、master选举(kafka、hadoop、hbase)、
分布式队列,分布式锁
3、Zookeeper的特性
1)顺序一致性
从同一个客户端发起的事务请求,最终会严格按照顺序被应用到zookeeper中
2)原子性
所有的事务请求的结果在整个集群中的所有机器上是状态(应用情况和数据情况)是一致的,也就是说,要么在整个集群上的所有机器的都应用了同一3事务要不都不应用
3)可靠性
一旦服务器成功应用了某一事物的数据,并且对客户端进行响应,那么这个数据在整个集群中的一定是同步的并且保留
4)实事性
一旦事务被成功应用,客户端就能够立即从服务器端读取到事务变更后的最新数据状态(Zookeeper仅仅能保证接近实时,会有一定延迟)
4、Zookeeper集群的中的角色:leader、follower、observer
1、master
2、follower :当leader挂掉之后,会进行投票选举
3、observer: observer是一种特殊的Zookeeper节点,在投票选举中不参加投票。可用于解决zookeeper的扩展性,如果大量的客户端对集群进行访问时,需要增加集群机器的数量,从而横向提高性能时,导致zookeeper写性能的下降(需要原子的同步到更多的节点),并且数据变更需要半数以上的服务器投票通过,造成大量的网络消耗
1)、此时observer是不参加投票的,只接受投票结果以提高性能
2)、不是重要的集群服务器角色
两种配置方式:1、在zoo.cfg中添加 peerType=observer
2、server.1=zk_node1:2881:3881:observer