在企业中,随着公司业务的扩张,用户量的增大,单一节点应用无法支撑正常的业务逻辑,比较常见的现象是访问速度变慢,甚至超时,严重时可能会造成系统宕机。为了尽量减少宕机的风险,单一节点系统需要进行水平扩展,采用分布式-分而治之的方式对海量请求进行处理,分摊单个节点的压力,使系统整体高可用。但分布式也会带来一定的挑战,比如配置文件的管理。如果某个配置要修改,那么所有的节点都要进行修改,当面临大规模集群时,很容易改错或改漏。因此,需要一个统一的配置管理中心对配置进行管理,集中修改一个配置文件,所有机器能够自动同步。disconf就是百度开源的配置管理中心。

以下是参照官方开源文档在单节点上进行搭建,文档地址:https://github.com/knightliao/disconf/tree/master/disconf-web

操作系统为:ubuntu server 16.04 64bit

1 安装依赖软件

安装MySQL、Tomcat、Nginx、zookeeper、Redis,并提前配置好jdk(JAVA_HOME)和maven(MAVEN_HOME)环境。

2 下载disconf-web,并安装

下载地址:https://github.com/knightliao/disconf/tree/master/disconf-web

2.1 准备配置

将你的配置文件存放在此目录下(以下地址可以自行设定)

$HOME/app/disconf-rd/online-resources

如果不知道如何配置,可以拷贝disconf-web/profile/rd目录下的文件,拷贝过去后修改即可。

配置文件包括:

- jdbc-mysql.properties (数据库配置)  主要修改数据库的host和mysql的用户名和密码
- redis-config.properties (Redis配置) 主要修改2个实例的host和端口
- zoo.properties (Zookeeper配置)    主要修改里面的hosts,指定zookeeper集群的host的端口,按zookeeper集群实际情况配置,如果一个节点就只配置一个节点,不要配置多个,否则disconf client在启动时会报无法连接的异常
- application.properties (应用配置) 该文件中主要是配置了监控邮件发送和接受的服务器和邮箱地址

注意,记得执行将application-demo.properties复制成application.properties:

$ cp application-demo.properties application.properties 

注意,即使只有一个redis,也应该配置两个redis client,否则将造成内部错误。

设置war包将要被部署的地址(以下地址可以自行设定)

$HOME/app/disconf-rd/war

2.2 构建

由于ubuntu 16.04已经放弃了python2.x,使用python3.x,所以需要先将 deploy/deploy.sh 中的python命令修改为python3。

$ ONLINE_CONFIG_PATH=$HOME/app/disconf-rd/online-resources
$ WAR_ROOT_PATH=$HOME/app/disconf-rd/war
$ export ONLINE_CONFIG_PATH
$ export WAR_ROOT_PATH
$ cd disconf-web
$ sh deploy/deploy.sh

构建过程中会出现以下错误:

Traceback (most recent call last):
File "build.py", line , in <module>
reload(sys)
NameError: name 'reload' is not defined

修改方式:在 html/build.py 中import reload方法:

from imp import reload  # In Python 2.x, reload() was a builtin, but in 3.x, it's in the imp module.

重新进行构建,再次报错:

Traceback (most recent call last):
File "build.py", line 12, in <module>
sys.setdefaultencoding('utf-8') # @UndefinedVariable
AttributeError: module 'sys' has no attribute 'setdefaultencoding'

修改方式:在 html/build.py 中将 sys.setdefaultencoding('utf-8') 注释掉。因为在python3默认使用utf-8编码,不需要显示设置。

这样会在 $HOME/app/disconf-rd/war 生成以下结果:

-disconf-web.war
-html
-META-INF
-WEB-INF

2.3 上线前的初始化工作

初始化数据库:

可以参考 sql/readme.md 来进行数据库的初始化。注意顺序执行 0-init_table.sql、1-init_data.sql、201512/20151225.sql、20160701/20160701.sql。

部署war:

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

<Context path="" docBase="/home/jason/app/disconf-rd/war"></Context>

并设置端口为 8015,启动Tomcat,即可。

部署前端:

在http节点内部加上:

upstream disconf {
server 127.0.0.1:8015;
} server { listen 8081;
server_name disconf.com;
access_log /home/jason/app/disconf-rd/logs/access.log;
error_log /home/jason/app/disconf-rd/logs/error.log; location / {
root /home/jason/app/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;
}
}

upstream disconf 配置中的端口必须与tomcat启动的端口一致。
server中listen是启动该disconf前端的端口。
里面需要修改access_log和error_log指定log的位置。
disconf使用前后端分离的部署方式,前端配置在nginx中,后端api部署在tomcat中。

2.4 启动

分别启动redis、zookeeper、tomcat和nginx,然后浏览器访问:http://ip:8081/,使用用户名admin和密码admin进入系统,至此disconf的web操作服务搭建完成。

界面如下:

disconf实践(一)Ubuntu16.04部署disconf的更多相关文章

  1. 基于ubuntu16.04部署IBM开源区块链项目-弹珠资产管理(Marbles)

    前言 本教程基本上是对Marbles项目的翻译过程. 如果英文比较好的话,建议根据官方操作说明,一步步进行环境部署.当然你也可以参考本教程在自己的主机上部署该项目. Marbles 介绍 关于 Mar ...

  2. ubuntu16.04 部署配置LVS主从

    实验环境---ubuntu16.04 四台机器:10.211.55.13—55.16 具体实验环境配置如下: 10.211.55.102  LVS_VIP 10.211.55.13  LVS_MAST ...

  3. ubuntu16.04部署vsftpd

    问题描述: 之前在centos6/7可以快速构建vsftpd服务,在ubuntu上频繁出错.最后发现是vsftpd版本比较新(新增安全特性导致的) 问题解决: 加上对应参数即可解决问题 window资 ...

  4. Ubuntu16.04部署python2和python3共存的Jupyter Notebook

    一.安装python和python-pip sudo apt-get install python python3 python-pip python3-pip sudo pip install -- ...

  5. Ubuntu16.04部署phantomjs的一个问题

    首先phantomjs是作为pyspider的一个外部依赖组件部署的. apt安装完出现问题: QXcbConnection: Could not connect to display Phantom ...

  6. Ubuntu16.04 部署安装Docker容器 & 注意事项

    一.部署安装Docker容器 1.1 Ubuntu下安装 crul sudo apt install curl curl是利用URL语法在命令行方式下工作的开源文件传输工具.它被广泛应用在Unix.多 ...

  7. ubuntu16.04部署RED5流媒体服务器

    前提:jdk已经安装 1,下载RED5(https://github.com/Red5/red5-server/releases)选择red5-server-X.X.X-MXX.tar.gz 2,解压 ...

  8. Ubuntu16.04 部署配置GO语言开发环境 & 注意事项

    1. 安装GO 安装go语言包: $ curl -O https://storage.googleapis.com/golang/go1.10.1.linux-amd64.tar.gz   下载完成后 ...

  9. 阿里云 Ubuntu16.04 部署 LAMP

    1.更新软件源 sudo apt-get update 2.安装Apache sudo apt-get install apache2 3.查看Apache是否安装成功 apache2 –v 如下所示 ...

随机推荐

  1. 最短路问题(dijkstral 算法)(优化待续)

    迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题.迪杰斯特拉算法主要特点是以起始点为中心向 ...

  2. 记录一次使用terminal进行git管理与提交到Github的过程

    1.环境的构建: 使用Mac系统自带的Git进行版本管理存在,Git是系统的Xcode集成的 查看版本的命令: $ git --version git version (Apple Git-) 查看g ...

  3. CSS(二)选择符

     2019-04-11 22:14:23 1.类型选择符(标签选择符)  html中所有的标签都可以直接对元素选择  p em i a html body.....   特点:对页面中所有当前类型的元 ...

  4. Servlet - Reasource loading

    1. Load db3.properties String path = this.getServletContext().getRealPath("/WEB-INF/classes/db/ ...

  5. Maximum Product Subarray 最大连续乘积子集

    Find the contiguous subarray within an array (containing at least one number) which has the largest ...

  6. Bitmap到底占多少内存

    转至:Android 开发绕不过的坑:你的 Bitmap 究竟占多大内存? Bugly 技术干货系列内容主要涉及移动开发方向,是由 Bugly 邀请腾讯内部各位技术大咖,通过日常工作经验的总结以及感悟 ...

  7. 浏览器缓存(Web Cache/ Http Cache)

    浏览器缓存(Web Cache/ Http Cache)是前端性能优化中很重要的组成部分. 缓存策略 浏览器的缓存策略是: 1.如果本地没有缓存,则发送非条件性请求. 2.如果本地有缓存,则判断本地缓 ...

  8. java笔记--String类格式化当天日期转换符文档

    String类格式化当天日期 --如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/3877389.html "谢谢-- 转换符:% ...

  9. Mvnw 简介

    Mvnw 简介  8月 17, 2016 |  Nix.Huang 背景 maven是一款非常流行的java项目构建软件,它集项目的依赖管理.测试用例运行.打包.构件管理于一身,是我们工作的好帮手,m ...

  10. Eclipse导出可运行的jar包并运行

    https://blog.csdn.net/kpchen_0508/article/details/49275407 程序运行的第二种方式: