- 一、背景
在生产部署过程中,遇到以下问题:
1、由于节点较多,每次增量修改配置文件后都需要每个节点替换配置文件。
2、有些动态配置修改后,需要重启服务。
- 二、解决方案
1、使用linux文件共享配置文件来实现,但是这个需要解决配置的权限分配问题,操作起来比较麻烦,并且无法解决问题2。
2、使用中间件来解决配置加载问题,由于我们服务已经使用了dubbo,所以最后采用了百度的disconf来实现动态配置加载。
- 三、实现
- 安装依赖
安装Mysql
安装Tomcat(apache-tomcat-7)
安装Nginx(nginx/1.10.2)(安装nginx还需要安装openssl-fips-2.0.10、pcre-8.40、zlib-1.2.11)
安装 zookeeeper (zookeeper-3.5.2)
安装 Redis (2.6.10)
2、安装以上文件后,下载disconf
直接上去下载disconf源码,https://github.com/knightliao/disconf
新建disconf目录,并创建war、sql、src子目录,并将压缩包解压到src目录
3、初始化数据库。
进入disconf/sql目录,按照说明初始化数据脚本。
4、拷贝初始化文件
新建disconf/online-resource子目录将配置文件拷贝进去
5、修改配置并打包
进入下面目录修改配置文件:/home/www/soft/disconf/disconf-master/disconf-web/profile/rd
修改jdbc-mysql.properties
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.db_0.url=jdbc:mysql://172.18.50.11:3306/wanjiaweb?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&rewriteBatchedStatements=false
jdbc.db_0.username=wanjiaweb
jdbc.db_0.password=web@123456
jdbc.maxPoolSize=20
jdbc.minPoolSize=10
jdbc.initialPoolSize=10
jdbc.idleConnectionTestPeriod=1200
jdbc.maxIdleTime=3600
修改zoo.properties
hosts=172.18.50.4:2181,172.18.50.6:2181,172.18.50.7:2181
# zookeeper\u7684\u524D\u7F00\u8DEF\u5F84\u540D
zookeeper_url_prefix=/disconf
修改redis-config.propertie
redis.group1.retry.times=2
redis.group1.client1.name=BeidouRedis1
redis.group1.client1.host=172.20.50.25
redis.group1.client1.port=6379
redis.group1.client1.timeout=5000
redis.group1.client1.password=foobared
redis.group1.client2.name=BeidouRedis2
redis.group1.client2.host=127.0.0.1
redis.group1.client2.port=6380
redis.group1.client2.timeout=5000
redis.group1.client2.password=foobared
redis.evictor.delayCheckSeconds=300
redis.evictor.checkPeriodSeconds=30
redis.evictor.failedTimesToBeTickOut=6
修改完成后执行
mvn package
命令
- 四、部署disconf
- 第一步部署war
cd /usr/local/tomcat7/conf
vi server.xml 修改该配置
在Host节点下添加以下配置
<Context path="/" docBase="/home/www/soft/disconf/war/disconf-web.war" reloadable="false" crossContext="true" />
然后进入bin目录启动tomcat
- 第二步配置nginx
进入nginx配置目录/usr/local/nginx/conf
修改nginx.conf配置
http {
include 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 logs/access.log main;
sendfile on;
#tcp_nopush on;
upstream disconf {
server 127.0.0.1:8990;
}
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 8992;
server_name 127.0.0.1;
access_log logs/disconf_access.log;
error_log logs/disconf_error.log;
location / {
root /home/www/soft/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;
}
}
}
upstream disconf 配置中的端口必须与tomcat启动的端口一致
server中listen是启动该disconf前端的端口
disconf使用前后端分离的部署方式,前端配置在nginx是那个,后端api部署在tomcat中
启动nginx。
- 五、登陆并配置
访问http://172.20.50.26:8992/main.html
默认用户密码都是admin
登陆后进行操作,可以根据公司的环境进行配置,我将原有的rd、qa、local、online分别改成了dev、test、stg、product