基于zookeeper实现配置集中管理

基于ZK的优点:

  1. 简单。尽管前期搭建ZooKeeper服务器集群较为麻烦,但是实现该方案后,修改配置整个过程变得简单很多。用户只要修改配置,无需进行其他任何操作,配置自动生效。
  2. 可靠。ZooKeeper服务集群具有无单点失效的特性,使整个系统更加可靠。即使ZooKeeper 集群中的一台机器失效,也不会影响整体服务,更不会影响分布式应用配置信息的更新。
  3. 实时。ZooKeeper的数据更新通知机制,可以在数据发生变化后,立即通知给分布式应用程序,具有很强的变化响应能力。

转自:http://www.cnblogs.com/yql1986/p/4116483.html

最近项目中要使用基于zookeeper的集中配置管理系统,而对于zookeeper仅在当初使用阿里开源分布式服务调用框架dubbo时简单的了解一下。本

文的主要目的,调用zkclient (maven 地址见下面)实现监听当某个节点的数据发生变化时,将变化的信息打印到控制台。

zkclient的maven地址

<dependency>
 <groupId>com.101tec</groupId>
 <artifactId>zkclient</artifactId>
 <version>0.4</version>
</dependency>

master app 应用程序



编写 master app应用程序,该程序主要功能是创建一个"root1"的节点,并每20s改变该节点的数据。程序代码如下:

 1 import java.util.UUID;
 2
 3 import org.I0Itec.zkclient.ZkClient;
 4 import org.apache.zookeeper.CreateMode;
 5
 6
 7 public class App {
 8
 9     private ZkClient zkClient;
10
11     public ZkClient getZkClient() {
12         return zkClient;
13     }
14
15     public void setZkClient(ZkClient zkClient) {
16         this.zkClient = zkClient;
17     }
18
19
20     /**
21      * 函数入口
22      * @param args
23      */
24     public static void main( String[] args ) {
25
26         App bootStrap=new App();
27         bootStrap.initialize();
28
29         try {
30             Thread.sleep(100000000);
31         } catch (InterruptedException e) {
32             e.printStackTrace();
33         }
34
35     }
36
37
38     /**
39      * 初始化zookeeper
40      */
41     public void initialize() {
42
43         String connectionString="192.168.19.128:2181";
44         int connectionTimeout=50000;
45
46         zkClient=new ZkClient(connectionString, connectionTimeout);
47
48         if(!zkClient.exists("/root1")) {
49             zkClient.create("/root1", new Long(System.currentTimeMillis()), CreateMode.EPHEMERAL);
50         }
51
52         new Thread(new RootNodeChangeThread()).start();
53     }
54
55     /**
56      * 每20s改变一次 ‘root1‘节点的数据
57      * @author yang
58      *
59      */
60     private class RootNodeChangeThread implements Runnable{
61
62         public void run() {
63
64             while(true) {
65
66                 try {
67                     Thread.sleep(20000);
68                 } catch (InterruptedException e) {
69                     //ignore
70                 }
71
72                 String uuidStr=UUID.randomUUID().toString();
73
74                 System.out.println(">>>>>>>>>> 产生随机的 uuid string,‘uuidStr‘===>"+uuidStr);
75
76                 zkClient.writeData("/root1", uuidStr);
77
78             }
79
80         }
81
82     }
83 }

slave app应用程序



编写 slave app应用程序,该程序主要功能是监听"root1"的节点,当其数据发生变化时,在控制台中打印中相关信息。程序代码如下:

 1 import org.I0Itec.zkclient.IZkDataListener;
 2 import org.I0Itec.zkclient.ZkClient;
 3
 4 public class App {
 5
 6     private ZkClient zkClient;
 7
 8     public ZkClient getZkClient() {
 9         return zkClient;
10     }
11
12     public void setZkClient(ZkClient zkClient) {
13         this.zkClient = zkClient;
14     }
15
16     /**
17      * 初始化zookeeper
18      */
19     public void initialize() {
20
21         String connectionString="192.168.19.128:2181";
22         int connectionTimeout=500000;
23
24         zkClient=new ZkClient(connectionString, connectionTimeout);
25
26         new Thread(new Runnable() {
27
28             public void run() {
29
30                 zkClient.subscribeDataChanges("/root1", new IZkDataListener() {
31
32                     public void handleDataDeleted(String dataPath) throws Exception {
33                         System.out.println("the node ‘dataPath‘===>");
34                     }
35
36                     public void handleDataChange(String dataPath, Object data) throws Exception {
37                         System.out.println("the node ‘dataPath‘===>"+dataPath+", data has changed.it‘s data is "+String.valueOf(data));
38
39                     }
40                 });
41
42             }
43
44         }).start();
45     }
46
47     /**
48      * 函数入口
49      * @param args
50      */
51     public static void main( String[] args ) {
52
53         App bootStrap=new App();
54         bootStrap.initialize();
55
56         try {
57             Thread.sleep(100000000);
58         } catch (InterruptedException e) {
59             e.printStackTrace();
60         }
61
62     }
63 }

环境准备



启动zookeeper,并关闭linux防火墙。

运行程序



运行 master app和slave app 两个应用程序,截图如下:

时间: 2024-10-11 15:54:53

基于zookeeper实现配置集中管理的相关文章

基于Zookeeper实现配置中心

在Zookeeper的主要应用场景中,其中之一是作为分布式系统的配置中心. 实现原理在Zookeeper建立一个根节点,比如/CONFIG,代表某个配置文件.将配置文件中的信息作为根节点的子节点存储,比如配置项timeout=3000,在Zookeeper中展现为:/CONFIG/timeout ,节点内容是3000.然后让所有使用到该配置信息的应用机器集成Zookeeper并监控/CONFIG的状态,一旦配置信息也就是子节点发生变化,每台应用机器就会收到ZK的通知,然后从ZK中获取新的配置信息

使用zookeeper实现配置同步

前言 应用项目中都会有一些配置信息,这些配置信息数据量少,一般会保存到内存.文件或者数据库,有时候需要动态更新.当需要在多个应用服务器中修改这些配置文件时,需要做到快速.简单.不停止应用服务器的方式修改并同步配置信息到所有应用中去.本篇文章就是介绍如何使用ZooKeeper来实现配置的动态同步. ZooKeeper 在<hive Driver类运行过程>一文中可以看到hive为了支持并发访问引入了ZooKeeper来实现分布式锁.参考<ZooKeeper典型应用场景一览>一文,Zo

Tachyon Cluster: 基于Zookeeper的Master High Availability(HA)高可用配置实现

1.Tachyon简介 Tachyon是一个高容错的分布式文件系统,允许文件以内存的速度在集群框架中进行可靠的共享,就像Spark和 MapReduce那样.通过利用信息继承,内存侵入,Tachyon获得了高性能.Tachyon工作集文件缓存在内存中,并且让不同的 Jobs/Queries以及框架都能内存的速度来访问缓存文件.因此,Tachyon可以减少那些需要经常使用的数据集通过访问磁盘来获得的次数. 2.Tachyon能解决什么问题:(摘自Tachyon 分布式内存文件系统) 1.不同Fra

HyperLedger Fabric基于zookeeper和kafka集群配置解析

简述 在搭建HyperLedger Fabric环境的过程中,我们会用到一个configtx.yaml文件(可参考Hyperledger Fabric 1.0 从零开始(八)--Fabric多节点集群生产部署),该配置文件主要用于构建创世区块(在构建创世区块之前需要先创建与之对应的所有节点的验证文件集合),其中在配置Orderer信息中有一个OrdererType参数,该参数可配置为"solo" and "kafka",之前博文所讲的环境配置皆是solo,即单节点共

基于zookeeper的分布式配置中心(一)

最近在学习zookeeper,发现zk真的是一个优秀的中间件.在分布式环境下,可以高效解决数据管理问题.在学习的过程中,要深入zk的工作原理,并根据其特性做一些简单的分布式环境下数据管理工具.本文首先对zk的工作原理和相关概念做一下介绍,然后带大家做一个简单的分布式配置中心. zookeeper介绍 zookeeper是一个分布式协调框架,主要是解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务.状态同步服务.集群管理.分布式应用配置项的管理.分布式锁等. zookeeper使用 查看

通过dubbo暴露接口调用方法,及基于zookeeper的dubbo涉及配置文件【转】

现在很流行的Dubbo很多朋友都听说过吧,最近我也在看这方面的东西,分享先我的心得笔记. 先说说我们团队要做的项目框架,很简单重在实现基于zookeeper的dubbo注册. 框架:springmvc+spring+zookeeper+dubbo 项目分三层,model存放数据,view页面展示.controller下面具体逻辑实现.通过dubbo消费方和供应方注册,供应方给消费方暴露接口,供消费方调用. 工程部署需要配置文件有: applicationContext-dubbo.xml {--

基于ZooKeeper的分布式Session实现(转)

1.   认识ZooKeeper ZooKeeper—— “动物园管理员”.动物园里当然有好多的动物,游客可以根据动物园提供的向导图到不同的场馆观赏各种类型的动物,而不是像走在原始丛林里,心惊胆颤的被动 物所观赏.为了让各种不同的动物呆在它们应该呆的地方,而不是相互串门,或是相互厮杀,就需要动物园管理员按照动物的各种习性加以分类和管理,这样我们才 能更加放心安全的观赏动物.回到我们企业级应用系统中,随着信息化水平的不断提高,我们的企业级系统变得越来越庞大臃肿,性能急剧下降,客户抱怨频频.拆 分系

日志系统之基于Zookeeper的分布式协同设计

最近这段时间在设计和实现日志系统,在整个日志系统系统中Zookeeper的作用非常重要--它用于协调各个分布式组件并提供必要的配置信息和元数据.这篇文章主要分享一下Zookeeper的使用场景.这里主要涉及到Zookeeper在日志系统中的使用,但其实它在我们的消息总线和搜索模块中也同样非常重要. 日志元数据 日志的类型和日志的字段这里我们统称为日志的元数据.我们构建日志系统的目的最终主要是为了:日志搜索,日志分析.这两大块我们很大程度上依赖于--ElasticSearch(关于什么是Elast

基于zookeeper+leveldb搭建activemq集群--转载

原地址:http://www.open-open.com/lib/view/open1410569018211.html 自从activemq5.9.0开始,activemq的集群实现方式取消了传统的 Master-Slave方式,增加了基于zookeeper+leveldb的实现方式,其他两种方式:目录共享和数据库共享依然存在.本文主要阐述基 于zookeeper和leveldb搭建activemq集群,这里需要特别提醒,本文实现的集群仅提供主备功能,避免单点故障,没有负载均衡功能. 下面开始