https://www.jianshu.com/p/39736c054e88
http://www.cnblogs.com/sunddenly/p/4031881.html
https://www.cnblogs.com/felixzh/p/5869212.html
https://www.zhihu.com/question/22569001
一、概念
dubbo的分布式服务,redis集群,kafka集群、hadoop\Hbase等等全都注册到zookeeper。
zookeeper是为了管理分布式服务用的,但是他自己也是一个集群。
zookeeper集群是为了高可用,如果管理者失效了整体系统就无法使用了。
所以zookeeper一般有2n+1台服务组成,服务可以部署在一台服务器上(测试环境),也可以部署在不同服务器上(生产环境)。
zookeeper监控着集群中各个节点的状态,根据节点提交的反馈进行下一步合理操作。最终将简单易用的接口和性能高效动能稳定的系统提供给用户。
zookeeper作为一个中间件,业务开发者初步只需要了解他作为中间件在分布式服务中的使用即可。
1.1、集群角色
1、领导者(leader),负责进行投票的发起和决议,更新系统状态
2、学习者(learner),包括跟随者(follower)和观察者(observer)
3、follower用于接收客户端【服务】请求,并向客户端【服务】返回结果,在选主过程参与投票
4、Observer接收客户端请求,然后将请求转发给leader。不参与投票,只同步leader的状态,observer的目的是为了扩展系统,提高读取速度。
5、client,请求发起方【即服务】
*这里的服务主要业务服务
1.2文件系统
文件系统具体博客上有很多了,我一直存在疑问就是znode到底是什么
znode存储的是【同步相关的数据:服务状态信息、配置内容、位置信息等】,【状态数据结构】中包含数据更新的版本号、访问权限更新版本号、时间戳。这些版本号和时间戳使zookeeper可以验证缓存有效性 和 协调更新。每当Znode中的数据更新时,版本号都会递增。【例如,当客户端获取数据时,客户端也会接受到此数据对应的版本号】存储的都是服务相关的
znode可以被自由的增加、删除【这个和业务研发关系不大,添加znode的时候回设置他的属性:persistent、persistent_sequential、ephemera、ephemeral_sequentiall】
1.3通知机制
客户端【服务】注册监听它关心的目录节点,当目录节点发生变化(数据改变、被删除、子目录节点增加删除)时,zookeeper会通知客户端