Disconf-简介与安装使用_第1页
Disconf-简介与安装使用_第2页
Disconf-简介与安装使用_第3页
Disconf-简介与安装使用_第4页
Disconf-简介与安装使用_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、DisConf简述摘要为了更好的解决分布式环境下多台服务实例的配置统一管理问题,本文提出了一套完整的分布式配置管理解决方案(简称为disconf4,下同)。 首先,实现了同构系统的配置发布统一化,提供了配置服务server,该服务可以对配置进行持久化管理并对外提供restful接口,在此基础上,基于 zookeeper实现对配置更改的实时推送,并且,提供了稳定有效的容灾方案,以及用户体验良好的编程模型和WEB用户管理界面。其次,实现了异构系统 的配置包管理,提出基于zookeeper的全局分布式一致性锁来实现主备统一部署、系统异常时的主备自主切换。通过在百度内部以及外部等多个产品线的实 践结果

2、表明,本解决方案是有效且稳定的。技术背景在一个分布式环境中,同类型的服务往往会部署很多实例。这些实例使用了一些配置,为了更好地维护这些配置就产生了配置管理服务。通过这个服务可以轻松地管理成千上百个服务实例的配置问题。王阿晶提出了基于zooKeeper的配置信息存储方案的设计与实现1, 它将所有配置存储在zookeeper上,这会导致配置的管理不那么方便,而且他们没有相关的源码实现。淘宝的diamond2是淘宝内部使用的一个 管理持久配置的系统,它具有完整的开源源码实现,它的特点是简单、可靠、易用,淘宝内部绝大多数系统的配置都采用diamond来进行统一管理。他将所有 配置文件里的配置打散化进行

3、存储,只支持KV结构,并且配置更新的推送是非实时的。百度内部的BJF配置中心服务3采用了类似淘宝diamond的实 现,也是配置打散化、只支持KV和非实时推送。同构系统是市场的主流,特别地,在业界大量使用部署虚拟化(如JPAAS系统,SAE,BAE)的情况下,同一个系统使用同一个部署包的情景会越来 越多。但是,异构系统也有一定的存在意义,譬如,对于“拉模式”的多个下游实例,同一时间点只能只有一个下游实例在运行。在这种情景下,就存在多台实例机 器有“主备机”模式的问题。目前国内并没有很明显的解决方案来统一解决此问题。功能特点与设计理念disconf是一套完整的基于zookeeper的分布式配置统

4、一解决方案。它的功能特点是· 支持配置(配置项+配置文件)的分布式化管理o 配置发布统一化o 配置发布、更新统一化(云端存储、发布):配置存储在云端系统,用户统一在平台上进行发布、更新配置。o 配置更新自动化:用户在平台更新配置,使用该配置的系统会自动发现该情况,并应用新配置。特殊地,如果用户为此配置定义了回调函数类,则此函数类会被自动调用。· 配置异构系统管理o 异构包部署统一化:这里的异构系统是指一个系统部署多个实例时,由于配置不同,从而需要多个部署包(jar或war)的情况(下同)。使用 Disconf后,异构系统的部署只需要一个部署包,不同实例的配置会自动分配。特别

5、地,在业界大量使用部署虚拟化(如JPAAS系统,SAE,BAE) 的情况下,同一个系统使用同一个部署包的情景会越来越多,Disconf可以很自然地与他天然契合。 异构主备自动切换:如果一个异构系统存在主备机,主机发生挂机时,备机可以自动获取主机配置从而变成主机。o 异构主备机Context共享工具:异构系统下,主备机切换时可能需要共享Context。可以使用Context共享工具来共享主备的Context。· 注解式编程,极简的使用方式:我们追求的是极简的、用户编程体验良好的编程方式。通过简单的标注+极简单的代码撰写,即可完成复杂的配置分布式化。· 需要Spring编程环境

6、它的设计理念是:· 简单,用户体验良好:o 摒弃了打散化配置的管理方式2,3,仍旧采用基于配置文件的编程方式,这和程序员以前的编程习惯(配置都是放在配置文件里)一致。特别的,为了支持较为小众的打散化配置功能,还特别支持了配置项。o 采用了基于XML无代码侵入编程方式:只需要几行XML配置,即可实现配置文件发布更新统一化、自动化。o 采用了基于注解式的弱代码侵入编程方式:通过编程规范,一个配置文件一个配置类,代码结构简单易懂。XML几乎没有任何更改,与原springXML配置一样。真正编程时,几乎感觉不到配置已经分布式化· 可以托管任何类型的配置文件,这与2,3只能支持KV结

7、构的功能有较大的改进。· 配置更新实时推送· 提供界面良好Web管理功能,可以非常方便的查看配置被哪些实例使用了。详细设计架构设计disconf服务集群模式:disconf的模块架构图:每个模块的简单介绍如下:· Disconf-coreo 分布式通知模块:支持配置更新的实时化通知o 路径管理模块:统一管理内部配置路径URL· Disconf-cliento 配置仓库容器模块:统一管理用户实例中本地配置文件和配置项的内存数据存储o 配置reload模块:监控本地配置文件的变动,并自动reload到指定beano 扫描模块:支持扫描所有disconf注解的

8、类和域o 下载模块:restful风格的下载配置文件和配置项o watch模块:监控远程配置文件和配置项的变化o 主备分配模块:主备竞争结束后,统一管理主备分配与主备监控控制o 主备竞争模块:支持分布式环境下的主备竞争· Disconf-webo 配置存储模块:管理所有配置的存储和读取o 配置管理模块:支持配置的上传、下载、更新o 通知模块:当配置更新后,实时通知使用这些配置的所有实例o 配置自检监控模块:自动定时校验实例本地配置与中心配置是否一致o 权限控制:web的简单权限控制· Disconf-toolso context共享模块:提供多实例间context的共享。流

9、程设计运行流程详细介绍:与2.0版本的主要区别是支持了:主备分配功能/主备切换事件。· 启动事件A:以下按顺序发生。o A3:扫描静态注解类数据,并注入到配置仓库里。o A4+A2:根据仓库里的配置文件、配置项,去 disconf-web 平台里下载配置数据。这里会有主备竞争o A5:将下载得到的配置数据值注入到仓库里。o A6:根据仓库里的配置文件、配置项,去ZK上监控结点。o A7+A2:根据XML配置定义,到 disconf-web 平台里下载配置文件,放在仓库里,并监控ZK结点。这里会有主备竞争。o A8:A1-A6均是处理静态类数据。A7是处理动态类数据,包括:实例化配置的

10、回调函数类;将配置的值注入到配置实体里。· 更新配置事件B:以下按顺序发生。o B1:管理员在 Disconf-web 平台上更新配置。o B2:Disconf-web 平台发送配置更新消息给ZK指定的结点。o B3:ZK通知 Disconf-cient 模块。o B4:与A4一样。o B5:与A5一样。o B6:基本与A4一样,唯一的区别是,这里还会将配置的新值注入到配置实体里。· 主备机切换事件C:以下按顺序发生。o C1:发生主机挂机事件。o C2:ZK通知所有被影响到的备机。o C4:与A2一样。o C5:与A4一样。o C6:与A5一样。o C7:与A6一样。模块

11、实现disconf-web提供了前后端分离的web架构,具体可见: 本部分会重点介绍disconf-client的实现方式。注解式disconf实现本实现会涉及到 配置仓库容器模块、扫描模块、下载模块、watch模块,使用AOP拦截的一个好处是可以比较轻松的实现配置控制,比如并发环境下的配置统一生效。关于这方面的讨论可以见这里。特别地,本方式提供的编程模式非常简单,例如使用以下配置类的程序在使用它时,可以直接Autowired进来进行调用,使用它时就和平常使用普通的JavaBean一样,但其实它已经分布式化了。配置更新时,配置类亦会自动更新。ServiceDisconfFile(filenam

12、e = "perties")public class JedisConfig / 代表连接地址 private String host; / 代表连接port private int port; /* * 地址, 分布式文件配置 * * return */ DisconfFileItem(name = "redis.host", associateField = "host") public String getHost() return host; public void setHost(String host)

13、this.host = host; /* * 端口, 分布式文件配置 * * return */ DisconfFileItem(name = "redis.port", associateField = "port") public int getPort() return port; public void setPort(int port) this.port = port; 基于XML配置disconf实现本实现提供了无任何代码侵入方式的分布式配置。ReloadablePropertiesFactoryBean继承了Spring Properti

14、es文件的PropertiesFactoryBean类,管理所有当配置更新时要进行reload的配置文件。对于被管理的每一个配置 文件,都会通过 配置仓库容器模块、扫描模块、下载模块、watch模块 进行配置获取至配置仓库里。ReloadingPropertyPlaceholderConfigurer继承了Spring Bean配置值控制类PropertyPlaceholderConfigurer。在第一次扫描spring bean里,disconf会记录配置文件的配置与哪些bean有关联。ReloadConfigurationMonitor是一个定时任务,定时check本地配置文件是否有更新

15、。当配置中心的配置被更新时,配置文件会被下载至实例本地,ReloadConfigurationMonitor即会监控到此行为,并且通知 ReloadingPropertyPlaceholderConfigurer 对相关的bean类进行值更新。特别的,此种方式无法解决并发情况下配置统一生效的问题。主备分配实现在实现中,为每个配置提供主备选择的概念。用户实例在获取配置前需要先进行全局唯一性竞争才能得到配置值。在这里,我们采用基于zookeeper的全局唯一性锁来实现。Comparisons淘宝Diamond2Disconf比较数据持久性存储在mysql上存储在mysql上都持久化到数据库里,都易

16、于管理推拉模型拉模型,每隔15s拉一次全量数据基于Zookeeper的推模型,实时推送disconf基于分布式的Zookeeper来实时推送,在稳定性、实效性、易用性上均优于diamond配置读写支持实例对配置读写。支持某台实例写配置数据,并广播到其它实例上只支持实例对配置读。通过在disconf-web上更新配置到达到广播写到所有应用实例从目前的应用场景来看,实例对配置的写需求不是那么明显。disconf支持的中心化广播方案可能会与人性思考更加相似。容灾多级容灾模式,配置数据会dump在本地,避免中心服务挂机时无法使用多级容灾模式,优先读取本地配置文件。双方均支持在中心服务挂机时配置实例仍然

17、可以使用配置数据模型只支持KV结构的数据,非配置文件模式支持传统的配置文件模式(配置文件),亦支持KV结构数据(配置项)使用配置文件的编程方式可能与程序员的编程习惯更为相似,更易于接受和使用。编程模型需要将配置文件拆成多个配置项,没有明显的编程模型在使用配置文件的基础上,提供了注解式和基于XML的两种编程模型无并发性多条配置要同时生效时,无法解决并发同时生效的问题基于注解式的配置,可以解决并发性问题无Reference1. 王阿晶,邹仕洪: 基于ZooKeeper的配置信息存储方案的设计与实现 2. 淘宝diamod实现:/p/diamond/src/

18、, 20123. 百度BJF配置中心, 20144. disconf github: 20145. 淘宝分布式配置管理服务Diamond6. zooKeeper和Diamond有什么不同 7. diamond专题(一)- 简介和快速使用DisConf-Web安装官方Git地址: 此文档所用disconf版本为2.6.25 安装JDK安装TOMCAT编译安装disconf将你的配置文件放到此地址目录下(以下地址可自行设定,此目录是指定了生成war包时使用的配置文件):/home/work/disconf-rd配置文件包括:- perties (数据库配置)- redi

19、perties (Redis配置)- perties (Zookeeper配置)- perties (应用配置)注意,记得执行将perties复制成perties:cp perties perties 根据实际情况更改上面4个配置中的配置内容设置War包将要被部署的地址(以下地址可自行设定,此目录为打包后disconf部署的目录,在这里我把它直接定义到了tomcat的webapp目录中):

20、/usr/local/apache-tomcat-7.0.64/webapps构建ONLINE_CONFIG_PATH=/home/work/disconf-rdWAR_ROOT_PATH=/usr/local/apache-tomcat-7.0.64/webappsexport ONLINE_CONFIG_PATHexport WAR_ROOT_PATH#切记一定要切换到disconf-web目录后在执行deploy.sh脚本(拷贝配置文件的命令用的是相对路径)cd disconf-websh deploy/deplopy.sh这样会在 /home/work/dsp/disconf-rd/w

21、ar 生成以下结果:-disconf-web.war -html -META-INF -WEB-INF把目录下的disconf-web.war可以拷贝走,作为备份,否则启动tomcat时,会部署两个diconf-web项目在tomcat的conf目录下server.xml的host标签下增加如下配置:<Context path="" docBase="/usr/local/apache-tomcat-7.0.64/webapps "></Context>安装所需编译工具 yum -y install gcc automake au

22、toconf libtool make安装pcre 官网:/下载地址:ftp:/ftp.csx.cam.ac.uk/pub/software/programming/pcre/安装说明: 此处把pcre安装到了/usr/local目录下,分别执行下面3个命令./configure -prefix=/usr/local/pcre-8.36 -libdir=/usr/local/pcre-8.36/lib -includedir=/usr/local/pcre-8.36/includemakemake install安装zlib 官网: ./configurem

23、akemake install安装Nginx 官方文档:/en/docs/ 此处指定的pcre与zlib路径为上方安装的pcre与zlib路径./configure -with-pcre=/root/disconf/pcre-8.36/ -with-zlib=/root/disconf/zlib-1.2.8 -with-http_ssl_modulemakemake install更改安装后nginx文件夹下conf/nginx.conf#可以用来负载均衡upstream disconf server 40:8080; server lis

24、ten 80; server_name 40; #静态页面请求到html中处理 location / root /usr/local/apache-tomcat-7.0.64/webapps/html; if ($query_string) expires max; #后台数据处理请求到tomcat处理 location /(api|export) proxy_pass_header Server; proxy_set_header Host $http_host; proxy_redirect off; proxy_set_header X-Real-IP $remo

25、te_addr; proxy_set_header X-Scheme $scheme; proxy_pass http:/ disconf; 安装Zookeeper 官方文档:/doc/trunk/ 安装请参考官方文档安装Redis 官网:http:/redis.io/ 安装参考: 切换到redis目录下,执行makemake install初始化数据库执行 sql/1-init_table.sql执行 sql/2-data.sql执行 sql/20141201/disconf.sql注意:根据实际情况执行disconf-web/sql下的脚本,每个脚本作用在sql目下都有相应说明程序启动Mysql 启动

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论