1、zookeeper的常用主要功能:
- 配置管理(管理分布式应用程序)
- 分布式锁
- 集群管理(作为注册中心的使用)
2、zookeeper的安装(待补充)
3、zookeeper命令操作:
- 数据模型:树形目录服务,类似与Linux目录文件系统。每个树上的节点(ZNode)保存了数据和节点的信息。节点可以拥有子节点。
- 节点类型:持久化的节点、临时节点、持久化顺序节点、临时顺序节点。
- 服务端的常用命令:./zkserver.sh status ./zkserver.sh start ./zkserver stop
- 客户端命令:
- ./zookeeper.sh -server localhost:2181 连接zookeeper的客户端
- ls 目录(查看某个目录节点名称)
- create 目录 数据(在某个目录下创建节点数据)==>不可以重复创建相同节点
- get 目录 (获取某个节点数据)
- set 目录(设置节点数据)
- delete 目录(删除节点数据)
- delete all (删除全部的节点)
- 创建持久节点 create +节点名称
- 创建临时节点 create -e 节点名称
- 创建顺序持久节点 create -s 节点名称
- 创建顺序临时节点 creat -es 节点名称
- quit退出zookeepr help 帮助命令
- ls -s 节点 格式化数据具体的节点信息
3、zookeeper的JAVA API (Curator常用API)
- 建立连接 (图片等待保存)
- 添加节点 :create().forPath();
- 创建多级模式:creatingParentIfNeeded();
- 指定节点类型:create().withModel();
- 删除节点 :delete().forName() delete().deletingChildrenIfNeeded(); guarantedd():确保删除成功放在delete()后面。inbackground():删除之后的回调函数
- 修改节点:setData().forPath() 根据版本修改中间加入一个方法withVersion() 防止别的线程影响操作。
- 查询节点数据: getData().forPath();
- 查询子节点:getChildren().forPath();
- watch时间监听:发布订阅功能,通过Cache实现对zookeeper的监听
- NodeCache :new NodeCache() //创建Cache对象
- 添加监听器:getListenable().addListener():方法中传入监听器对象
- stat()开始监听
- pathChildrenCache():方法同上
- TreeCache():监听某个节点和自己的子节点 (方法同上)
- 分布式锁实现:分布式锁解决的跨机器的进程同步
- 分布式锁的原理:
- 客户端在获取锁的时候,在lock节点下创建临时顺序节点,用完了删除节点
- 然后获取lock下所有子节点,如果发现自己创建的节点序号是最小的,那么认为该客户端获取到了锁,使用完成,进行节点的删除。
- 如果不是节点中最小的,说明自己没有获取到锁,此时需要获取到比自己小的节点,同时注册监听器,同时对其注册监听器,监听删除事件。
- 如果发现比自己小的节点已经删除,客户端的watcher会收到通知再次判断自己创建的节点的序号是否是最小的,如果是则自己获取到了锁。如果不是重复以上的步骤重复进行注册并监听。
3、集群的搭建(附图)
zookeeper的三种角色身份:
- leader:事物的请求处理,数据的处理
- flower:将事务请求转发leader 参与选举 处理非事务请求
- observer:处理非事务请求,但是参与选举