disconf概述
disconf
Distributed Configuration Management Platform(分布式配置管理平台)
专注于各种「分布式系统配置管理」的「通用组件」和「通用平台」, 提供统一的「配置管理服务」
主要目标
- 部署极其简单:同一个上线包,无须改动配置,即可在 多个环境中(RD/QA/PRODUCTION) 上线
- 部署动态化:更改配置,无需重新打包或重启,即可 实时生效
- 统一管理:提供web平台,统一管理 多个环境(RD/QA/PRODUCTION)、多个产品 的所有配置
- 核心目标:一个jar包,到处运行
功能特点
- 支持配置(配置项+配置文件)的分布式化管理
- 配置发布统一化
- 配置发布、更新统一化:
- 同一个上线包 无须改动配置 即可在 多个环境中(RD/QA/PRODUCTION) 上线
- 配置存储在云端系统,用户统一管理 多个环境(RD/QA/PRODUCTION)、多个平台 的所有配置
- 配置更新自动化:用户在平台更新配置,使用该配置的系统会自动发现该情况,并应用新配置。特殊地,如果用户为此配置定义了回调函数类,则此函数类会被自动调用。
- 配置发布、更新统一化:
- 极简的使用方式(注解式编程 或 XML无代码侵入模式):我们追求的是极简的、用户编程体验良好的编程方式。目前支持两种开发模式:基于XML配置或者基于注解,即可完成复杂的配置分布式化。
注:配置项是指某个类里的某个Field字段。
其它功能特点
- 低侵入性或无侵入性、强兼容性:
- 低侵入性:通过极少的注解式代码撰写,即可实现分布式配置。
- 无侵入性:通过XML简单配置,即可实现分布式配置。
- 强兼容性:为程序添加了分布式配置注解后,开启Disconf则使用分布式配置; 若关闭Disconf则使用本地配置;若开启Disconf后disconf-web不能正常Work,则Disconf使用本地配置。
- 支持配置项多个项目共享,支持批量处理项目配置
- 配置监控:平台提供自校验功能(进一步提高稳定性),可以定时校验应用系统的配置是否正确。
工作环境以及安装依赖软件
- 操作系统: CentOS 6.8
- 安装Nginx 1.10.1
- 安装JDK 1.7.0_80
- 安装Tomcat 7.0.69
- 安装mysql 5.1
- 安装zookeeper
- 安装Redis
注意,如果选择在服务器上编译打包还需要在服务器上配置maven环境
准备配置
jdbc-mysql.properties (数据库配置)
redis-config.properties (Redis配置)
zoo.properties (Zookeeper配置)
application.properties (应用配置)
注意,记得执行将application-demo.properties复制成application.properties:
cp application-demo.properties application.properties
注意,即使只有一个redis,也应该配置两个redis client,否则将造成内部错误。
构建
只需要关心disconf-web,进入disconf-web文件夹,运行命令进行打包:
mvn package -Dmaven.skip.test=true
打包成功之后,就会发现disconf-web下的target文件夹下disconf-web.war包
上线前的初始化工作
初始化数据库: 为了方便大家开发,统一了所有SQL,SQL所在位置是\disconf-2.6.36\disconf-web\sql
中,请先后执行:
0-init_table.sql create db,tables
1-init_data.sql create data
201512/20151225.sql patch
20160701/20160701.sql patch
部署War
可以将生成的war包的内容解压到服务器上的/home/yangyy/disconf/war
中,(以上地址可自行设定)内容大致如下
修改server.xml文件,在Host结点下设定Context:
<Context path="" docBase="/home/yangyy/disconf/war"></Context>
启动Tomcat,即可。
部署 前端
修改 nginx.conf,可以参考:
user yang;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
# include /etc/nginx/conf.d/*.conf;
upstream disconf {
server 127.0.0.1:8080;
}
server {
listen 80;
server_name localhost;
access_log /home/yangyy/nginx/log/disconf/access.log;
error_log /home/yangyy//nginx/log/disconf/error.log;
location / {
root /home/yangyy/disconf/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;
}
}
}
运行
完成以上的搭建后,访问http://ip/
,就可以看到管理页面了(账号密码是 admin/admin
)。