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

     CentOS系统更换软件安装源 第一步:备份你的原镜像文件,以免出错后可以恢复. mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/Cent ...

  2. 图解 CMS 垃圾回收机制,你值得拥有(转 强烈推荐)

          首页 所有文章 资讯 Web 架构 基础技术 书籍 教程 Java小组 工具资源 - 导航条 - 首页 所有文章 资讯 Web 架构 基础技术 书籍 教程 Java小组 工具资源     ...

  3. CF17E Palisection

    题意 给定一个长度为n的小写字母串.问你有多少对相交的回文子串(包含也算相交) 相交的回文子串个数 \(mod\ 51123987\) Sol 求相交的回文子串不太好求 考虑用总数减去不相交的回文串个 ...

  4. WC前的颓废——带花树

    QAQ现在很不想写题解博客那就来写个算法吧QAQ... 带花树 题目 来看个题... UOJ79. 某机房里有\(n\)个OIer,其中有\(n\)个男生,\(0\)个女生.现在他们要两两配对. 有\ ...

  5. C# 读取excel用户列表过滤一个月内未收到外部邮件已离职的员工

    1.通过aspose.cells读取excel中的数据并添加到list中 //存储从excel中读取出来的数据 List<UserInfo> lst_userinfo = new List ...

  6. <Android Framework 之路> N版本 Framework Camera的一些改动

    前言 Android N版本最近发布,Nougat是否好吃,不得而知,慢慢看下~ 感谢AndroidXref这个网站,给开发者提供了大量的便捷~以后学习Android就靠它了. N版本上Framewo ...

  7. 软工读书笔记 week2

    <程序员修炼之道>这本书后面一部分则是更深入.更具体.更细致地就程序员应该注意的事项做一些讨论,书中说的很多在过去的经历中都有较深的体会,同时也给了我很多启发.以下是一些我感悟较深的点: ...

  8. weixin设置菜单

    https://jingyan.baidu.com/article/925f8cb8dfcf11c0dce05661.html

  9. C#--动态加载DLL,通过反射调用参数,方法,窗体

    一些文章: 反射插件插件 http://bbs.csdn.net/topics/391950257?page=1 反射窗体 http://www.sufeinet.com/thread-2984-1- ...

  10. django项目配置

    创建工程 本项目使用git管理项目代码,代码库放在gitee码云平台.(注意,公司中通常放在gitlab私有服务器中) 1. 在git平台创建工程 1) 创建私有项目库 2)克隆项目到本地 3)创建并 ...