集中式的配置管理在应用集群中是非常常见的,一般商业公司内部都会实现一套集中的配置管理中心,应对不同的应用集群对于共享各自配置的需求,并且在配置变更时能够通知到集群中的每一个机器。




Zookeeper很容易实现这种集中式的配置管理。



来看具体的例子:



新增三个Client,模拟真实系统的应用。



zookeeper自带管理页面 zookeeper 管理_linux




Client1作为配置管理应用:



zookeeper自带管理页面 zookeeper 管理_大数据_02




创建config znode,设置配置的默认值:



zookeeper自带管理页面 zookeeper 管理_linux_03




获取配置的默认值:



zookeeper自带管理页面 zookeeper 管理_linux_04




通过手动输入新的配置来模拟配置管理里配置的更改:



zookeeper自带管理页面 zookeeper 管理_大数据_05




再来看Client2和Client3:



zookeeper自带管理页面 zookeeper 管理_java_06


连接zooKeeper;



获取ZkWatcher实例;



通过zk.exists监听"/root/config" znode;



启动后获取默认的配置;





来看ZkWatcher的实现:



zookeeper自带管理页面 zookeeper 管理_zookeeper自带管理页面_07


实现Watcher接口;



初始化时对ZooKeeper进行实例化。






zookeeper自带管理页面 zookeeper 管理_java_08


实现process方法,当监听的事件发生改变时,会调用process方法;



从ZooKeeper里获取最新的配置信息;



再次通过zk.exists()方法监听znode,因为ZkWatcher监听一次事件改变后会失效,必须要再次配置监听。





Client3和Client2的实现一致。





启动ZooKeeper服务器,来看运行的结果:



zookeeper自带管理页面 zookeeper 管理_zookeeper自带管理页面_09



zookeeper自带管理页面 zookeeper 管理_java_10



zookeeper自带管理页面 zookeeper 管理_zookeeper自带管理页面_11


从运行结果可以看出,当Client1更改配置后,Client2和Client3都收到了ZooKeeper的通知,进而更改自身的配置,使整个系统中的应用配置保持一致。





使用ZooKeeper的好处就是可以将整个系统中的配置集中管理,只需在一个地方更改,所有的系统中的应用都会被ZooKeeper通知更改,不用再对每个应用一一更改。