什么是zookeeper?
分布式应用协调服务,基于观察者模式设计的服务管理框架,它负责存储和管理大家都关心的数据(文件存储系统+通知机制)
解决什么问题,有什么特性,挂了怎么办,用在什么地方?
特点:
1一个leader多个follower组成集群
2leader负责投票的决议和发起,更新系统状态
3follower用于接收客户请求并向客户端返回结果,参与leader发起的投票
4集群只要存活板书以上,zookeeper就能服务
5每个server保存相同的数据副本,无论client链接哪个server数据都一致
6更新请求顺序执行
7原子性:要么都更新成功,要么都失败
8实时性:一段时间内,Client能读到最新数据应用场景:1统一配置管理->例:hadoop所有节点的配置信息都相同,那么可以将配置信息写入zookeeper的一个znode,各个节点监听这个znode,一旦znode被修改,zookeeper通知各个节点
2软负载均衡->每个应用的Server启动时创建一个EPHEMERAL节点,应用客户端通过读取节点列表获得可用服务器列表,并订阅节点事件,有Server宕机断开时触发事件,客户端监测到后把该Server从可用列表中删除
3集群管理:客户端启动时向zookeeper注册对/servers节点的监控,一旦/server节点发生变化,那么zookeeper就会通知客户端,客户端会重新查询/servers节点下有哪些可以提供服务的机器,客户端从这些机器列表中选择一个可已正常访问就行了
数据节点
PERSISTENT-持久节点
除非手动删除,否则节点一直存在于Zookeeper上
EPHEMERAL-临时节点
临时节点的生命周期与客户端会话绑定,一旦客户端会话失效(客户端与zookeeper连接断开不一定会话失>>效),那么这个客户端创建的所有临时节点都会被移除。
PERSISTENT_SEQUENTIAL-持久顺序节点
基本特性同持久节点,只是增加了顺序属性,节点名后边会追加一个由父节点维护的自增整型数字。
EPHEMERAL_SEQUENTIAL-临时顺序节点
基本特性同临时节点,增加了顺序属性,节点名后边会追加一个由父节点维护的自增整型数字。
监听
有一个main线程,main线程中创建zookeeper客户端,创建两个线程connect(网络连接通信)listener监听