Zookeeper 是一个开源的分布式的,为分布式应用提供协调服务的 Apache 项目。
特点:
1.Zookeeper是由一个领导者(leader),多个跟随者(follower)组成的集群。
2.leader负责进行投票的发起和决议,更新系统状态。
3.follower用于接收客户端请求并向客户端返回结果,在选举Leader过程中参与投票。
4.集群中只要有半数以上的节点存活,Zookeeper集群就能正常服务。
5.全局数据一致:每个server保存一份相同的数据副本,client无论连接到哪个server,数据都是一致的。
6.更新请求的顺序进行,来自同一个client的更新请求按其发送顺序依次进行。
7.数据更新原子性,一次数据更新要么成功,要么失败。
8.实时性,在一定范围内,client能读取到最新的数据。
暂时就知道这么多。。。
应用场景
提供的服务有:统一命名服务,统一配置管理,统一集群管理,服务器节点动态上下线,软负载均衡等。
统一命名服务:
这个举个例子就是我们客户端client请求www.baidu.com,然后后面由域名解析器解析成IP,多台服务器中的一台为客户端提供服务,但是对外暴露统一的一个域名或者接口,供客户端去访问。
统一配置管理:
一个集群中,所有节点的配置信息是一致的,比如hadoop集群(后续会更新hadoop)对配置文件修改后,希望能够快速同步到各个节点上。
配置管理可以交由Zookeeper上的一个Znode,一旦Znode中的数据备修改,Zookeeper将通知各个节点。
统一集群管理:
参考Hbase中Master状态监控和选举。
服务器的动态上下线:
服务器和Zookeeper保持着3秒的心跳连接,说白点就是,服务器的信息都会在Zookeeper这注册,存储一份,当某台服务器挂掉之后,即2秒连接不到回应,Zookeeper会判断这台机器已经不能提供服务,就会通知客户端client这台机器不能使用,同时会把这台机器的注册信息给提出掉,保持整个集群的正常工作。
软负载均衡:
参考nginx的工作原理。