转载自http://blog.csdn.net/huangfengxiao/article/details/8844239

1 场景描述

参考http://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/index.html,实现自己的集中配置管理系统。

术语:配置管理(Configuration Management)

一个带配置的服务程序,部署在若干台机器上,如果配置发生了变化,接下去要进行的操作是停止所有机器上的该程序,修改每一台机器上该程序对应的配置文件。

这个情景会有两个问题:第一,机器多了,逐个修改配置是一件不合理的运维;第二,配置一般是程序启动时读入的,所以配置修改后,程序应该重启。

配置管理在某些场合称“数据发布与订阅”,顾名思义就是将数据发布到zk节点上,供订阅者动态获取数据,实现配置信息的集中式管理和动态更新。例如全局的配置信息,地址列表等就非常适合使用。

实际应用环境:

1. 索引信息和集群中机器节点状态存放在zk的一些指定节点,供各个客户端订阅使用。 2. 系统日志(经过处理后的)存储,这些日志通常2-3天后被清除。

3. 应用中用到的一些配置信息集中管理,在应用启动的时候主动来获取一次,并且在节点上注册一个Watcher,以后每次配置有更新,实时通知到应用,获取最新配置信息。

4. 业务逻辑中需要用到的一些全局变量,比如一些消息中间件的消息队列通常有个offset,这个offset存放在zk上,这样集群中每个发送者都能知道当前的发送进度。

5. 系统中有些信息需要动态获取,并且还会存在人工手动去修改这个信息。以前通常是暴露出接口,例如JMX接口,有了zk后,只要将这些信息存放到zk节点上即可。

2 需求概括

a)解决服务程序统一配置的问题;

b)解决服务配置更改的热加载问题;(热加载:程序更改配置,不需重启就能快速响应)

3 技术原理

利用zookeeper的特性(略),将配置信息保存在 Zookeeper 的某个目录节点中,然后将所有需要修改的应用机器监控配置信息的状态,一旦配置信息发生变化,每台应用机器就会收到 Zookeeper 的通知,然后从 Zookeeper 获取新的配置信息应用到系统中。

a)znode的路径作为配置项能做到全局唯一;

b)znode的内容作为配置项的值,始终存在与内存中,方便读取;

c)znode的权限作为项目之间的配置隔离机制,可以做到项目配置的安全管理;

zookeeper拥有的特性使得配置的存储、读取、监听(watch)等都很好地实现,我们所需要做的事情——开发一个统一的控制终端以及提供程序读取配置的接口。

a)集中的Web控制终端:包含配置信息增加、删除、修改、查询、部署等等;

b)Java读取配置项的类和接口;

c)C++读取配置的类和接口;

4 体系结构

5 配置存储结构

3 层,存xml文件的字符串。

5 优势

a)配置统一管理,方便运维;

b)服务程序热加载;

c)配置分布式存储,稳定可靠;

6 实现

功能类ConfMng提供载入xml配置文件到zk系统的函数和读取配置map的函数,并提供一个需要用户实现的抽象函数

// 解析xml将keyvalue存入Map
 abstract public Map<?, ?> parserXML();

用户程序使用方法如下:

继承ConfMng类,实现parserXML();接口

读取配置内容。

原则:设计的集中配置管理类,将读取配置xml的方法开放给用户,做到配置的通用;竟可能在原程序基础上做到无缝结合。

[转载] zookeeper应用——集中配置管理系统的实现的更多相关文章

  1. zookeeper应用——集中配置管理系统的实现

    http://blog.csdn.net/huangfengxiao/article/details/8844239

  2. easyconf——基于AugularJS的配置管理系统开发框架

    目录 1 easyconf的诞生2 easyconf的设计理念 2.1 总体设计 2.2 细节设计 2.2.1 CRUD操作 2.2.2 即时校验 2.2.3 下拉框设计3 easyconf使用指南 ...

  3. zookeeper集群配置与启动——实战

    1,准备: A:三台linxu服务器: 10.112.29.177 10.112.29.172 10.112.29.174 命令 hostname 得到每台机器的 hostname vm-10-112 ...

  4. [大数据] zookeeper 安装和配置

    ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用提供一致性服务的软件,提供的功 ...

  5. kafka集群与zookeeper集群 配置过程

    Kafka的集群配置一般有三种方法,即 (1)Single node – single broker集群: (2)Single node – multiple broker集群:    (3)Mult ...

  6. 使用kafka bin目录中的zookeeper-shell.sh来查看kafka在zookeeper中的配置

    cd kafka_2.11-0.10.2.1\bin\windowsecho ls /brokers/ids |  zookeeper-shell.bat localhost:2181 使用kafka ...

  7. 基于zookeeper实现分布式配置中心(二)

    上一篇(基于zookeeper实现分布式配置中心(一))讲述了zookeeper相关概念和工作原理.接下来根据zookeeper的特性,简单实现一个分布式配置中心. 配置中心的优势 1.各环境配置集中 ...

  8. 02 【PMP】项目管理系统、PMIS、工作授权系统、配置管理系统、变更管理

    PMBOK融会贯通:盘点八大系统<项目管理系统.PMIS.工作授权系统.配置管理系统.变更管理>   一.  PMBOK相关系统: 工作系统作为事业环境因素,提高或限制项目管理的灵活性,并 ...

  9. 【转载】IIS网站配置不带www域名直接跳转带www的域名

    很多时候为了统一网站入口,需要将不带www的主域名解析到带www的域名记录下,当客户访问不带www的域名网址的时候自动跳转到带www的域名,在IIS Web服务器中可以通过URL重写模块来实现此功能, ...

随机推荐

  1. jQuery和js获取select元素的选中项value?

    1.jQuery方式获取:$("#test").val(); 2.js方式获取:document.getElementById("test").value;

  2. UltraEdit中使用正则表达式替换

    UltraEdit在使用正则表达式进行查找替换时有两个可使用的语法集合.一个是 UltraEdit 的更早的版本被使用的原来的 UltraEdit 句法.另一个是"Unix"类型的 ...

  3. 用git上传代码到新浪云

    新浪云空间是国内免费的一个空间,不过有限制很多. 申请新浪云需要新浪账号,注册略. 使用新浪账号去http://sae.sina.com.cn申请一个空间 选择新建应用 可以选择使用php项目 管理应 ...

  4. 解析PHP多种序列化与反序列化的方法

    1. serialize和unserialize函数这两个是序列化和反序列化PHP中数据的常用函数. 复制代码 代码如下: <?php$a = array('a'=> 'Apple' ,' ...

  5. 安装debian 9.1后,中文环境下将home目录下文件夹改为对应的英文

    安装了debian 9.1后,中文环境下home目录下文件夹显示的是中文,相当不方便cd命令,改为对应的英文吧,需要用到的软件xdg-user-dirs-gtk #安装需要的软件 sudo apt i ...

  6. zabbix杂文二

    ps1:主要是一些遇到的问题,不一定对所有人都有用... PS2:安装前就一定要去看下官方文档 PS3:安装zabbix的时候会参照这上面的 http://blog.chinaunix.net/uid ...

  7. 走进 UITest for Xamarin.Forms

    上一篇  走进 Prism for Xamarin.Forms 讲了简单的创建一个项目,然后添加了几个页面来回切换,这篇想先搞下 UITest 官方详细地址:https://developer.xam ...

  8. Android 6.0 双向通话自动录音

    package com.example.hgx.phoneinfo60.Recording; import android.content.BroadcastReceiver; import andr ...

  9. h5实现照片墙效果

    <style> *{ margin: 0; padding: 0; } body{ background: url(images/bg.jpg); } #div1{ width: 100% ...

  10. C# 8.0的三个令人兴奋的新特性

    C# 语言是在2000发布的,至今已正式发布了7个版本,每个版本都包含了许多令人兴奋的新特性和功能更新.同时,C# 每个版本的发布都与同时期的 Visual Studio 以及 .NET 运行时版本高 ...