zookeeper是一个分布式协调框架,用于解决分布式应用中常遇到的一些数据管理问题,如:统一命名服务, 状态同步服务, 集群管理, 分布式应用配置项的管理等.
zookeeper = 文件系统 + 监听通知机制 客户端注册监听它所关注的目录节点,当该目录节点发生变化(数据改变, 被删除, 子目录节点增加删除)时,zookeeper会通知客户端.
PERSISTENT : 持久化目录节点.客户端与zookeeper断开连接后,该节点依旧存在. PERSISTENT_SEQUENTIAL : 持久化顺序编号目录节点.客户端与zookeeper断开连接后,该节点依旧存在,只是zookeeper给该节点名称进行顺序编号. EPHEMERAL : 临时目录节点.客户端与zookeeper断开连接后,该节点被删除. EPHEMERAL_SEQUENTIAL : 临时顺序编号目录节点.客户端与zookeeper断开连接后,该节点被删除,只是zookeeper给该节点名称进行顺序编号.
集群Leader选举原理(myid, ZXID) 集群消息广播(二阶段提交)
集群管理主要在于两点:其一,是否有服务机器的加入和退出;其二,选举master. 对于第一点,所有服务机器约定在父目录下创建临时目录节点,然后所有的客户端去监听父目录节点的子节点变化事件。一旦有服务机器挂掉,该机器与zookeeper的连接会断掉,其所创建的临时目录节点会被清除,所有客户端都会收到通知。新服务机器加入也是类似。 对于第二点,约定所有服务机器创建临时顺序编号目录节点,每次选取编号最小的机器作为master就好。
将公共的配置数据写到一个目录节点中,使所有需要该配置数据的分布式机器监听该节点的数据变化事件,一旦配置数据改变,所有机器都会收到通知,重新读取配置数据到内存中。
通过临时有序目录节点实现读写锁