zookeeper经典场景

**

zookeeper经典场景

**
配置维护:**分布式系统,服务器部署在集群中,集群服务配置完全相同。出手工更改,出错率高,耗费人工量大,对于集群来说很很危险。
zk可以通过‘发布/订阅模式’实现对集群配置文件的管理与维护。‘发布/订阅模式’分为推模式(push)和拉模式(pull)。采用的是推拉结合的模式,与nacos,spring cloud config,携程的阿波罗 作用一样
实现步骤
Step1:发布者应用程序作为 zk 客户端首先需要在 zk 中创建一个节点,该节点的数据内容即为当前被监控集群主机的配置文件。
Step2:被监控集群主机在启动时首先需要从 zk 的节点上读取数据内容,即配置文件内容。
Step3:读取过数据内容后,再向 zk 的该节点注册数据内容变更的 watcher 监听。
Step4:发布者将更新过的配置文件内容更新到 zk 的对应节点数据内容上。此时 zk 会引发相应 watcher 事件,然后向每一个被监控主机推送 watcher 事件。
Step5:被监控集群主机在接收到 watcher 事件后,会触发本地 watcher 调用执行回调方法,回调方法会从 zk 中拉取节点的数据内容,即更新过的配置文件内容。
命名服务:可以为一定范围内的元素命名一个唯一标识,以与其他元素进行分区。在分布式系统中被命名的实体可以是集群中的主机、服务地址等。
通过利用zk 中节点路径不可重复的特点来实现命名服务的。也可以配带上顺序节点的有序性来体现唯一标识的顺序性。
具体实现步骤:
Step1:生成器在启动时首先需要在 zk 中创建一个根节点,例如/app
Step2:根据具体业务需求,在根节点/app 下创建多级子节点,每一级子节点名称使用对应级别的模块名称。例如,/app/一级模块名称/二级模块名称
Step3:再在模块节点下创建顺序节点,而节点名称可以根据业务需求指定。在生成时会自动为该名称添加上序号。此时该顺序节点的全路径即为生成的唯一标识
集群管理:对于集群,我们总是希望能够随时获取到当前集群中各个主机的运行时状态、当前集群中主机的存活状况等信息。通过 zk 可以实现对集群的随时监控。
具体实现步骤是:

Step1:监控系统在启动时会在 zk 中创建一个根节点,例如/clusterManager
Step2:当集群主机应用启动后,就会自动在 zk 的监控系统根节点下创建一个对应的临时子节点,并将自己的运行状态定时写入到该临时节点,或根节点的数据内容中,例如主机当前正在处理的连接请求有多少,当前主机的权重等。写入到这两个节点的效果是不同的:
写到临时节点:临时节点消失后,从监控系统中根本就查找不到任何该临时节点对应主机的信息。
写入到根节点:可以获取到所有曾经存在过的节点信息。
Step3:监控系统在根节点/clusterManager 上注册一个 watcher 监听。一旦集群中增减主机,就会引发子节点数量变更的 watcher 事件。然后 zk 会将事件推送给监控系统
Step4:监控系统在接收到 zk 发送的事件后,调用相应的 watcher 对象回调,将变化情况显示到监控平台。
Step5:若集群主机状态信息是写入到根节点数据内容的,那么监控系统需要在根节点上再注册一个数据内容变更的 watcher 监听,以实时获取到集群主机的状态数据。
Step6:若集群主机状态信息是写入到对应临时节点的,那么监控系统需要在每个主机临时节点上注册数据内容变更的 watcher 监听,以实时获取到集群主机的状态数据。

你可能感兴趣的:(架构)