Zookeeper知识点

Zookeeper知识点

Zookeeper主要用于分布式系统, 实现统一配置管理,统一命名服务,分布式锁和集群管理

简单来说, zookeeper=文件系统+监听通知机制

Zookeeper数据结构

Zookeeper维护了一个类似于文件系统的树形数据结构

文件系统树形结构有很多节点,称为znode.我们可以自由的增加删除节点

每一个znode节点,都是可以存储数据的

监听机制

客户端注册监听某些节点, 当节点发生改变(数据改变,被删除,子节点增加删除)时,zookeeper就会通知监听节点的客户端

统一配置管理

一个分布式系统,多个模块部署在多台设备,如果我们改变程序的配置文件,就需要修改多台设备上的配置, 非常麻烦, 现在把所有配置文件放在zookeeper中,保存在某一个节点,然后与之相关的模块都进行监听,一单配置修改,每个模块都能收到zookeeper的通知,然后获取最新配置信息.
比如:
一个系统有三个模块ABC,对应三个配置文件,A.yml、B.yml、C.yml,三份配置文件中有一部分信息是相同的, 那么我们要改一个配置就需要修改三个模块的配置信息.并且很可能需要重启服务.
现在我们把A.yml、B.yml、C.yml中相同的部分抽取出来,作为公共配置D.yml
然后把D.yml存放在Zookeeper的一个节点中,ABC对其监听,一旦发生改变,就可以马上响应了

统一命名服务

统一命名服务相当于键值对,系统通过zookeeper节点的名字,拿到同一个数据, 比如ip地址

分布式锁

分布式系统必然会有同步的问题,那么如何实现分布式锁呢

系统在获取zookeeper节点的数据时会创建一个临时节点, 这个临时节点会有一个起始最小值(比如,node_001,node_002,node_003这样的顺序创建),系统通过判断自己创建的是不是最小的节点,如果是最小的节点,就能拿到节点的数据. 如果不是就监听比自己小一个的节点(比如,node_001先获取节点数据,node_002想要获取时发现自己不是最小的,于是它会监听node_001, 一旦node_001获取到后,临时节点删除,node_002就能获取节点数据了)

集群状态

和分布式锁类似, 通过创建临时节点.
ABC通过监听Node1,都临时创建一个节点, 一旦某一个系统挂了, 它创建的临时节点就会删除,那么其他监听Node1的系统,发现Node1有一个子节点挂了,就能判断出集群的状态了.

Zookeeper安装使用

安装到系统目录,解压

  1. 修改zookeeper/conf下的zoo_sample.cfg为zoo.cfg, 在该文件中,可以修改启动端口等参数,默认端口为2181
  2. 进入zookeeper/bin,启动zkServer.sh或者zkServer.cmd

启动成功
看到这个消息就说明启动成功了