DSP

Disconf介绍,源码下载,环境准备,安装,disconf-web使用和配置介绍,项目中进行配置,

2019-07-13 18:52发布

1、disconf介绍

Distributed Configuration Management Platform(分布式配置管理平台)专注于各种 分布式系统配置管理 的通用组件 / 通用平台,提供统一的配置管理服务。
这里写图片描述
主要目标:
部署极其简单:同一个上线包,无须改动配置,即可在 多个环境中(RD/QA/PRODUCTION) 上线。
部署动态化:更改配置,无需重新打包或重启,即可 实时生效。
统一管理:提供web平台,统一管理 多个环境(RD/QA/PRODUCTION)、多个产品 的所有配置。
核心目标:一个jar包,到处运行。
项目信息
CLIENT端:
Java:目前唯一支持语言
开放API,让开发者有自定义开发客户端的能力: WEB管理端
Java SpringMvc实现,前后端分离 实现方式(基于Spring 4.17.RELEASE)
开放API,让开发者具有自定义定制web控制台界面的能力。 功能特点
支持配置(配置项 + 配置文件)的分布式管理。
配置发布统一化
配置发布、更新统一化:
同一个上线包 无须改动配置 即可在多个环境(RD/QA/PRODUCTION)上线
配置存储在云端系统,用户统一管理 多个环境(RD/QA/PRODUCTION)、多个平台的所有配置
配置更新自动化:用户在平台更新配置,使用该配置的系统会自动发现该情况,并应用新配置。特殊地,如果用户为此配置定义了回调函数类,则此函数类会被自动调用。
极简的使用方式(注解式编程 或 XML无代码侵入模式):我们追求的是极简的、用户编程体验良好的编程方式。目前支持两种开发模式:基于XML配置或者基于注解,即可完成复杂的配置分布式化。 注:配置项是指某个类里的某个Field字段。
Disconf的功能特点描述图:
这里写图片描述 其它功能特点
低侵入性或无侵入性、强兼容性:
低侵入性:通过极少的注解式代码撰写,即可实现分布式配置。
无侵入性:通过XML简单配置,即可实现分布式配置。
强兼容性:为程序添加了分布式配置注解后,开启Disconf则使用分布式配置;关闭Disconf则使用本地配置;若开启Disconf后disconf-web不能正常Work,则Disconf使用本地配置。
支持配置项多个项目共享,支持批量处理项目配置。
配置监控:平台提供自校验功能(进一步提高稳定性),可以定时校验应用系统的配置是否正确。 模块架构图:
这里写图片描述 模块信息
CLIENT: client目标是支持多语言。目前只提供了java语言客户端。
JAVA
disconf-core:分布式配置基础包模块
disconf-client:分布式配置客户端模块, 依赖disconf-core包。 用户程序使用它作为Jar包进行分布式配置编程。
disconf-tool:分布式配置工具包,依赖disconf-core包。 Disconf-tool是disconf的辅助工具类, 目前使用不多,建议不使用。
管理端:管理端:disconf-web是统一的分布式配置管理平台。disconf-web: 分布式配置平台服务模块, 依赖disconf-core包。采用SpringMvc+纯HTML方式(前后端分离架构)实现。用户使用它来进行日常的分布式配置管理。

2、若想学习Disconf,首先找到Disconf的官方地址,官网地址为:

http://disconf.readthedocs.io/zh_CN/latest/index.html
找到学习用的参考案例
https://github.com/knightliao/disconf-demos-java
这里写图片描述 下载后可以看到这个学习资料中有:
这里写图片描述

3、源码下载

找到disconf的源码的下载地址,通过源码安装:
https://github.com/knightliao/disconf
这里写图片描述 代码下载下来之后,解压后的内容如下:
这里写图片描述 注意:
1、当下载下来之后,不要立即看到有pom.xml就使用maven进行编译(这是java同学常见的习惯噢)。
2、经过测试,该源码在JDK6.x + maven2环境下可以编译通过,高版本的编译不通过。
3、如果我们想查看文档,可以打开源码中的README.md文件,里面有各种网址。
比如:
4、**disconf-masterREADME.md中列出了可供参考的 **demos && 文档 && 协作连接: - demos: https://github.com/knightliao/disconf-demos-java - wiki: https://github.com/knightliao/disconf/wiki - 文档: http://disconf.readthedocs.io - 协作开发: 在 master 分支上提pull request - 提问题: https://github.com/knightliao/disconf/issues 提issue

5、环境准备

安装依赖软件: 安装Mysql(Ver 14.12 Distrib 5.0.45, for unknown-linux-gnu (x86_64) using EditLine wrapper,或更高版本也可以) 安装Tomcat(apache-tomcat-7.0.50,其它或更高版本也可以) 安装Nginx(nginx/1.5.3,其它版本也可以) 安装 zookeeeper (zookeeper-3.3.0,或更高版本) 安装 Redis (2.4.5,或更高版本) 配置Maven环境(这个在官方文档没有提及,但是特别要注意,这个地方是需要的) 关于上面这些软件的安装在此不做详细介绍。以下只做软件安装位置介绍:
这里写图片描述
关于MySQL: ip:192.168.106.100 用户名:root 密码:123456 关于Tomcat: 机器:ip:192.168.106.105 位置:/home/tuzq/software/apache-tomcat-8.5.12 (注意在使用的时候发现tomcat的catalina.sh中的JAVA_OPTS的参数值在设置在:JAVA_OPTS='-Xms64m -Xmx128m'时仍然能够跑起来disconf-web应用) 关于Nginx ip:192.168.106.102 nginx位置:/usr/local/nginx 关于zookeeeper ip:192.168.106.101 + 192.168.106.102 + 192.168.106.103 部署位置:/home/tuzq/software/zookeeper 端口都是:2181 关于Redis ip:192.168.106.101 port:6379 这里写图片描述 关于maven: ip:192.168.106.105 位置:/home/tuzq/software/apache-maven-3.3.9 注意配置环境变量
这里写图片描述

6、安装Disconf

6.1.创建文件夹

进入机器:192.168.106.105
执行以下命令: [root@hadoop15 bin]# mkdir -p /home/work/dsp/disconf-rd/online-resources [root@hadoop15 bin]# cd /home/work/dsp/disconf-rd/online-resources [root@hadoop15 online-resources]# ls [root@hadoop15 online-resources]# pwd /home/work/dsp/disconf-rd/online-resources [root@hadoop15 online-resources]# 这里写图片描述

6.2 拷贝配置文件

将下载下来的disconf-masterdisconf-webprofile d目录下的文件,拷贝到/home/work/dsp/disconf-rd/online-resources目录下
配置文件包括: - jdbc-mysql.properties (数据库配置) - redis-config.properties (Redis配置,主要用于web登录使用) - zoo.properties (Zookeeper配置) - application.properties (应用配置) 注意:记得执行以下命令,将application-demo.properties复制一份,名称为application.properties [root@hadoop15 online-resources]# pwd /home/work/dsp/disconf-rd/online-resources [root@hadoop15 online-resources]# ls application-demo.properties jdbc-mysql.properties redis-config.properties zoo.properties [root@hadoop15 online-resources]# cp application-demo.properties application.properties [root@hadoop15 online-resources]# ls application-demo.properties application.properties jdbc-mysql.properties redis-config.properties zoo.properties [root@hadoop15 online-resources]# 这里写图片描述

6.3 修改参数配置

1、修改application.properties [root@hadoop15 online-resources]# vim application.properties 这里写图片描述 2、修改jdbc-mysql.properties [root@hadoop15 online-resources]# vim jdbc-mysql.properties 原配置:
这里写图片描述
新配置:
这里写图片描述 3、修改redis-config.properties
原配置:
这里写图片描述
新配置:
这里写图片描述
注意:
即使只有一个redis,也应该配置两个redis client,否则将造成内部错误。

6.4 配置zoo.properties的信息

原配置:
这里写图片描述
新配置:
这里写图片描述

7 部署disconf-web

7.1 配置环境变量

这里写图片描述 #set disconf environment export ONLINE_CONFIG_PATH=/home/work/dsp/disconf-rd/online-resources export WAR_ROOT_PATH=/home/work/dsp/disconf-rd/war 然后执行: [root@hadoop15 online-resources]# source /etc/profile

7.2 部署disconf-web

创建文件夹: mkdir -p /home/work/dsp/disconf-rd/war 将disconf-masterdisconf-web中的内容放到/home/work/dsp/disconf-rd下,然后执行以下命令: [root@hadoop15 war]# pwd /home/work/dsp/disconf-rd [root@hadoop15 disconf-rd]# ls disconf-web online-resources war [root@hadoop15 war]# cd disconf-web/ [root@hadoop15 disconf-web]# ls bin deploy html pom.xml profile README.md sql src [root@hadoop15 disconf-web]# sh deploy/deploy.sh ********************************************** copy online config /home/work/dsp/disconf-rd/online-resources ********************************************** Removing src/main/online-resources/* ********************************************** It's going to Generate the output for war ********************************************** ********************************************** It's going to got war package ********************************************** ********************************************** use online profile ********************************************** [INFO] Scanning for projects... 注意:上面的过程比较慢,请耐心等待。
如果执行上面的过程中出现了以下错误:
这里写图片描述
按照提示信息,修改/home/work/dsp/disconf-rd/war/disconf-web/pom.xml中相应的jar的版本,若发现下载很慢,请直接在CSDN的资源处下载相应的jar包。 这样会在/home/work/dsp/disconf-rd/war生成以下结果: -disconf-web.war -html -META-INF -WEB-INF 效果图如下:
这里写图片描述

7.3 初始化数据库

可以参考disconf-websql eadme.md来进行数据库的初始化。注意顺序执行: 0-init_table.sql 1-init_data.sql 201512/20151225.sql 20160701/20160701.sql 注意:
里面默认有6个用户(请注意线上环境删除这些用户以避免潜在的安全问题) Tables Are admin admin testUser1 MhxzKhl9209 testUser2 MhxzKhl167 testUser3 MhxzKhl783 testUser4 MhxzKhl8758 testUser5 testUser5 如果想自己设置初始化的用户名信息,可以参考代码来自己生成用户: src/main/java/com/baidu/disconf/web/tools/UserCreateTools.java

7.4部署war

修改server.xml文件,在Host节点下设定Context: <Context path="" docBase="/home/work/dsp/disconf-rd/war">Context> 即在/home/tuzq/software/apache-tomcat-8.5.12/conf/server.xml添加如下内容:
这里写图片描述 启动tomcat即可
这里写图片描述 部署 前端:
将disconf-web里面的disconf-masterdisconf-webhtml文件都放到nginx所在的/home/work/dsp/disconf-rd/war下面 mkdir -p /home/work/dsp/disconf-rd/war/html 修改nginx.conf (到192.168.106.102机器上) upstream disconf { server 192.168.106.105:8080; } server { listen 8081; server_name 192.168.106.102; #access_log /home/work/var/logs/disconf/access.log; #error_log /home/work/var/logs/disconf/error.log; location / { root /home/work/dsp/disconf-rd/war/html; if ($query_string) { expires max; } } location ~ ^/(api|export) { proxy_pass_header Server; proxy_set_header Host $http_host; proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Scheme $scheme; proxy_pass http://disconf; } } 关于Host
这里的server_name必须设置成和application.properties 里的domain一样。然后浏览器的访问域名也是这个。 配置好之后,只需要需在浏览器上访问:http://192.168.106.102:8081即可出现以下界面:
这里写图片描述

8 disconf-web使用介绍

8.1 名词介绍

在disconf中有如下名词(官方文档上介绍的让人费解) APP:使用哪个APP(可以理解成哪个项目),及它的ID,这个在配置disconf.properties时会被用到,建议使用英文。 KEY:配置文件或配置项(关于配置项这个名词容易让人费解,这里和软件工程的独立可运行的软件叫配置项不是一个概念,这里的配置项是指在disconf中配置的key,value的值。而不是通过上传项目的配置文件生成的值。若上传了项目的配置文件,这里的key和项目的配置文件的名称相同(注意这个版本的disconf不能上传文件夹形式的配置文件,并且上传配置文件的时候只能一个一个的上传)) 配置内容:配置文件或配置项在配置中心中的值 实例列表:使用此配置文件或配置项的所有实例列表,及每个实例的配置值。如果实例的配置值与配置中心的值不一致,这里会标识出来。 修改时间:修改此配置的最后一次时间 操作:个性、删除、下载

8.2 登录

点击上图中的登录,出现以下界面:
这里写图片描述 默认的用户名和密码是:admin admin

8.3 主界面

这里写图片描述 关于左侧的rd,qa,local,online在官方文档中并没有介绍如何进行修改,经过摸索,可以通过修改数据库的方式进行修改,修改:
这里写图片描述

8.4 查看不同环境的配置文件信息

在界面的左上角可以选择APP(界面选择的是disconf_demo这个项目)和环境(比如rd环境或qa环境,点击rd环境后发现已经有配置文件了),选择之后,就会在中间出现上传的配置文件的列表。
选择版本后,就会显示 APP、环境、版本 三个条件下的配置列表:
这里写图片描述

8.5 新建APP(即项目属性),配置项(简单理解成k/v值),新建配置文件

这里写图片描述 新建APP
这里写图片描述 新建配置项
这里写图片描述 进入主界面进行查看
这里写图片描述 新建配置文件:
这里写图片描述 上传之后,图的显示效果如8.4中的效果。

9.项目案例介绍

以disconf-standalone-demo为例进行介绍
这里写图片描述
这里写图片描述

9.1配置disconf-client

若项目想用disconf,需要在pom.xml中配置disconf-client,maven依赖配置如下(最新版本为2.6.36版本): <dependency> <groupId>com.baidu.disconfgroupId> <artifactId>disconf-clientartifactId> <version>2.6.36version> dependency>

9.2 配置applicationContext.xml

这里写图片描述 另外要注意的是disconfMgrBean中scanPackage中的包扫描的值。 配置文件的内容:
这里写图片描述 具体的内容是: <bean id="disconfMgrBean" class="com.baidu.disconf.client.DisconfMgrBean" destroy-method="destroy"> <property name="scanPackage" value="com.example.disconf.demo"/> bean> <bean id="disconfMgrBean2" class="com.baidu.disconf.client.DisconfMgrBeanSecond" init-method="init" destroy-method="destroy"> bean> <bean id="configproperties_disconf" class="com.baidu.disconf.client.addons.properties.ReloadablePropertiesFactoryBean"> <property name="locations"> <list> <value>classpath:/autoconfig.propertiesvalue> <value>classpath:/autoconfig2.propertiesvalue> <value>classpath:/myserver_slave.propertiesvalue> <value>classpath:/testJson.jsonvalue> <value>testXml2.xmlvalue> list> property> bean> <bean id="propertyConfigurer" class="com.baidu.disconf.client.addons.properties.ReloadingPropertyPlaceholderConfigurer"> <property name="ignoreResourceNotFound" value="true"/> <property name="ignoreUnresolvablePlaceholders" value="true"/> <property name="propertiesArray"> <list> <ref bean="configproperties_disconf"/> list> property> bean> <bean id="configproperties_no_reloadable_disconf" class="com.baidu.disconf.client.addons.properties.ReloadablePropertiesFactoryBean"> <property name="locations"> <list> <value>myserver.propertiesvalue> list> property> bean> <bean id="propertyConfigurerForProject1" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="ignoreResourceNotFound" value="true"/> <property name="ignoreUnresolvablePlaceholders" value="true"/> <property name="propertiesArray"> <list> <ref bean="configproperties_no_reloadable_disconf"/> list> property> bean>

9.3 配置disconf.properties

这里写图片描述 # 是否使用远程配置文件,true(默认)会从远程获取配置, false则直接获取本地配置 disconf.enable.remote.conf=true #配置服务器的 HOST,用逗号分隔 ,示例:127.0.0.1:8000,127.0.0.1:8000,这里的值和application.propperties中的值要保持一致 disconf.conf_server_host=192.168.106.102:8081 # 版本号, 请采用 X_X_X_X 格式 默认为 DEFAULT_VERSION。优先读取命令行参数,然后再读取此文件的值,最后才读取默认值。 disconf.version=1_0_0_0 # APP 请采用 产品线_服务名 格式 优先读取命令行参数,然后再读取此文件的值 disconf.app=disconf_demo # 环境 默认为 DEFAULT_ENV。优先读取命令行参数,然后再读取此文件的值,最后才读取默认值 disconf.env=rd # 忽略的分布式配置,用空格分隔 disconf.ignore= # 获取远程配置 重试次数,默认是3次 disconf.conf_server_url_retry_times=1 # 获取远程配置 重试时休眠时间,默认是5秒 disconf.conf_server_url_retry_sleep_seconds=1 # 用户定义的下载文件夹, 远程文件下载后会放在这里。注意,此文件夹必须有有权限,否则无法下载到这里 默认:./disconf/download disconf.user_define_download_dir=./disconf/download2 # 下载的文件会被迁移到classpath根路径下,强烈建议将此选项置为 true(默认是true) disconf.enable_local_download_dir_in_class_path=true 这里写图片描述
运行后效果:
这里写图片描述