2018-10-19 · Tools

如何在 CentOS 7 上安装 Disconf

剧情回顾:

前面我们讲了如何使用文件流读取 properties 配置文件 - Java 配置文件-ConfigUtil

然后使用 spring 来管理配置文件 - Java 配置文件-Spring

随着项目的演进我们增加了使用 maven 或者 spring-boot 来进行配置文件的环境隔离和几个主流分布式配置中心的介绍以便技术选型 - Java 配置文件-环境隔离和分布式配置中心选型

这篇文章主要讲述分布式配置中心 Disconf 的搭建过程。

为什么选择 Disconf

关于技术选型,为什么选择 Disconf 呢,是因为公司已经有项目组使用了 Disconf ,而公司又没有多余的服务器来玩,所以。。。

搭建前的准备

搭建之前建议仔细阅读 官方文档GitHub 源码

我们知道 Disconf 使用 Java 编写的,所以开篇需要搭建 Java 的开发环境和依赖管理工具 Maven

yum install -y java-1.8.0-openjdk-devel

yum install -y maven

下载 disconf-web 的安装包

wget -c https://github.com/knightliao/disconf/archive/2.6.36.tar.gz

tar zxvf 2.6.36.tar.gz

安装依赖软件

文档上面说需要的依赖软件,我们来一个一个的安装:

Mysql/MariaDB

我选择安装 MariaDB

yum install -y mariadb-server mariadb

启动 mariadb 并执行 mysql_secure_installation

systemctl start mariadb

mysql_secure_installation

创建数据库和用户并授权用户

create database disconf character set utf8mb4 collate utf8mb4_unicode_ci;

grant all privileges on disconf.* to 'disconf'@'%' identified by 'disconf' with grant option;

flush privileges;

按照文档初始化数据,具体请阅读 disconf-2.6.36/disconf-web/sql/readme.md 文件,执行下面的命令需要工作目录在 disconf-2.6.36/disconf-web/sql/ 目录下

source 0-init_table.sql

source 1-init_data.sql

source 201512/20151225.sql

source 20160701/20160701.sql

Redis

Redis 的安装请参考我的另一篇文章 - 如何在 CentOS 7 上安装 Redis

这篇文章不是为生成环境而写的,只是为开发或者测试过程中使用而简单搭建,所以 redis 安装一个就可以了,也不需要设置密码什么的。

zookeeeper

下载并解压

wget -c http://mirrors.shu.edu.cn/apache/zookeeper/zookeeper-3.4.13/zookeeper-3.4.13.tar.gz

tar zxvf zookeeper-3.4.13.tar.gz

cd zookeeper-3.4.13

修改配置

cp conf/zoo_sample.cfg conf/zoo.cfg

创建 Data 目录

mkdir -p /tmp/zookeeper

启动

bin/zkServer.sh

输出如下信息

ZooKeeper JMX enabled by default
Using config: /root/zookeeper-3.4.13/bin/../conf/zoo.cfg
Usage: bin/zkServer.sh {start|start-foreground|stop|restart|status|upgrade|print-cmd}

Tomcat && Nginx

Tomcat 和 Nginx 的配置依赖 disconf-web 的构建,所以我们先将软件安装好,等构建后再进行配置。

wget -c http://mirror.bit.edu.cn/apache/tomcat/tomcat-7/v7.0.91/bin/apache-tomcat-7.0.91.tar.gz

tar zxvf apache-tomcat-7.0.91.tar.gz
yum install -y nignx

systemctl start nginx

修改配置文件

和文档保持一致

mkdir -p /home/work/dsp/disconf-rd/online-resources

cp disconf-2.6.36/disconf-web/profile/rd/* /home/work/dsp/disconf-rd/online-resources

cd /home/work/dsp/disconf-rd/online-resources/

mv application-demo.properties application.properties

1. application.properties 里面的 domain 换成你的 IP 地址,邮箱信息可以不用改,反正不是生成的部署。


#
# \u670d\u52a1\u5668\u7684domain
#

domain=192.168.113.131

#
# \u90ae\u7bb1\u8bbe\u7f6e
#

EMAIL_MONITOR_ON = true
EMAIL_HOST = smtp.163.com
EMAIL_HOST_PASSWORD = password
EMAIL_HOST_USER = sender@163.com
EMAIL_PORT = 25
DEFAULT_FROM_EMAIL = disconf@163.com

#
# \u5b9a\u65f6\u6821\u9a8c\u4e2d\u5fc3\u7684\u914d\u7f6e\u4e0e\u6240\u6709\u5ba2\u6237\u7aef\u914d\u7f6e\u7684\u4e00\u81f4\u6027
#
CHECK_CONSISTENCY_ON= true

2. jdbc-mysql.properties

jdbc.driverClassName=com.mysql.jdbc.Driver

jdbc.db_0.url=jdbc:mysql://127.0.0.1:3306/disconf?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&rewriteBatchedStatements=false
jdbc.db_0.username=disconf
jdbc.db_0.password=disconf

jdbc.maxPoolSize=20
jdbc.minPoolSize=10
jdbc.initialPoolSize=10
jdbc.idleConnectionTestPeriod=1200
jdbc.maxIdleTime=3600

3. redis-config.properties

redis.group1.retry.times=2

redis.group1.client1.name=BeidouRedis1
redis.group1.client1.host=127.0.0.1
redis.group1.client1.port=6379
redis.group1.client1.timeout=5000
redis.group1.client1.password=

redis.group1.client2.name=BeidouRedis2
redis.group1.client2.host=127.0.0.1
redis.group1.client2.port=6379
redis.group1.client2.timeout=5000
redis.group1.client2.password=

redis.evictor.delayCheckSeconds=300
redis.evictor.checkPeriodSeconds=30
redis.evictor.failedTimesToBeTickOut=6

注意,即使只有一个redis,也应该配置两个redis client,否则将造成内部错误。 这是文档的原话,我们没有设置密码,将两个 redis 的 IP 改成一样。

4. zoo.properties


hosts=127.0.0.1:2181

# zookeeper\u7684\u524D\u7F00\u8DEF\u5F84\u540D
zookeeper_url_prefix=/disconf

编译构建

cd disconf-web
export ONLINE_CONFIG_PATH=/home/work/dsp/disconf-rd/online-resources
export WAR_ROOT_PATH=/home/work/dsp/disconf-rd/war
sh deploy/deploy.sh

配置 tomcat 和 nginx 并启动项目

修改 server.xml 文件,在 Host 结点下设定 Context:

<Context path="" docBase="/home/work/dsp/disconf-rd/war" />

启动 tomcat

sh bin/startup.sh

新增文件 /etc/nginx/conf.d/disconf.conf

upstream disconf {
    server 127.0.0.1:8080;
}

server {

    listen   80;
    server_name 192.168.113.131;
    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://192.168.113.131:8080;
    }
}

修改文件夹权限

chown -R nginx:nginx /home/work/

chmod -R 755 /home/work/

修改 nginx.conf 为 root 用户和用户组

# user nginx;
user root root;

启动 ngixn

nginx -t

nginx -c /etc/nginx/nginx.conf

开发防火墙端口,并访问你的 IP 地址: http://192.168.113.131

disconf-login

六个默认账户

name pwd
admin admin
testUser1 MhxzKhl9209
testUser2 MhxzKhl167
testUser3 MhxzKhl783
testUser4 MhxzKhl8758
testUser5 MhxzKhl112

disconf-index