Python 从零搭建 Conf_Web 配置管理平台
作者:Eagle
某船舶行业科技公司,运维工程师,51Reboot学员。通过在51Reboot学习,由运维工程师转至运维开发工程师。完成公司自动化平台的构建,对运维开发有了自己的理解,空闲时间写了这么一个小的项目来和大家分享一下。
环境
CentOS 6/7 x64
Python: 2.7.6
Etcd: 3.2.18
Confd: 0.16.0
Nginx: 1.12.1
效果演示
一拓扑图:

二涉及软件
etd:分布式KV存储系统,一般用于共享配置和服务注册与发现。是ETOS存储格式类似于文件系统,以根“/”开始下面一级级目录,最后一个是Key,一个关键对应一个值。
etcd集群:使用Raft协议保证每个节点数据一致,由多个节点对外提供服务。这里只用单台。
confd:管理本地应用配置文件,使用etcd或consul存储的数据渲染模板,还支持redis,zookeeper等.confd有一个手表功能,通过HTTP API定期监测对应的etcd中目录变化,获取最新的价值,然后竟染模板
Nginx: Nginx是一款轻量级的Web服务器/反向代理服务器以及电子邮件代理服务器,并在一个BSD-like协议下发行。来自俄罗斯的程序设计师l gor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler使用。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好。
三软件部署
环境说明:建议使用Cento7.X X64
1)安装 etcd(这里安装的单机,集群环境根据自己的需求选取)
# yum install etcd -y # sed -i 's/localhost/0.0.0.0/g' /etc/etcd/etcd.conf #配置监听地址 # systemctl start etcd && systemctl enable etcd #启动服务设置开机动
2)安装 nginx
#cd /usr/local/src
#wget http://nginx.org/download/nginx-1.12.1.tar.gz
#git clone https://github.com/yaoweibin/nginx_upstream_check_module.git
#tar -zxvf nginx-.tar.gz
#cd nginx-
#patch -p1 </usr/local/src/nginx_upstream_check_module/check_1.12.1+.patch
#./configure --prefix=/usr/local/nginx --add-module=/usr/local/src/nginx_upstream_check_module/
make && make install
#mkdir /usr/local/nginx/conf/vhost/
Nginx主配置文件修改为这个样子,增加include目录配置
#vi /usr/local/nginx/conf/nginx.conf
#user nobody;
worker_processes ;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections ;
}
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;
#keepalive_timeout ;
keepalive_timeout ;
#gzip on;
include vhost/*.conf;
}
3)安装 confd
下载地址https://github.com/kelseyhightower/confd/releases
下载完毕丢到系统里面
#cp confd / usr / bin / confd #哪个confd 在/ usr / bin中/ confd
4)创建配置文件目录
# mkdir -p /etc/confd/{conf.d,templates}
conf.d # 资源模板,下面文件必须以toml后缀
templates # 配置文件模板,下面文件必须以tmpl后缀
5)创建 confd 配置文件
# vi /etc/confd/conf.d/app01.conf.toml
[template]
src = "app01.conf.tmpl" #默认在/etc/confd/templates目录下
dest = "/usr/local/nginx/conf/vhost/app01.conf" #要更新的配置文件
keys = [
"/Shopping", #监测的key
]
reload_cmd ="/usr/local/nginx/sbin/nginx -s reload" #最后执行的命令
6)创建confd模板
# vi /etc/confd/templates/app01.conf.tmpl
upstream {{getv "/Shopping/nginx/cluster1/proxy_name"}} {
{{range getvs "/Shopping/nginx/cluster1/upstream/*"}}
server {{.}};
{{end}}
check interval= rise= fall= timeout= type=http;
check_http_send "HEAD / HTTP/1.0\r\n\r\n";
check_http_expect_alive http_2xx http_3xx;
}
server {
server_name {{range getvs "/Shopping/nginx/cluster1/server_name/*"}} {{.}} {{end}};
location / {
proxy_pass http://{{getv "/Shopping/nginx/cluster1/proxy_name"}};
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /status {
check_status;
access_log off;
}
}
7)启动 confd 并设置开机启动
开机启动脚本会随文档附带
拷贝至/etc/init.d/confd,只需要更改等改为连接地址即可
#/ etc / init.d / confd start && chkconfig --add confd && chkconfig confd on
四配置平台部署
1)Github 克隆平台代码安装平台依赖
# git clone https://github.com/1032231418/Conf_Web.git # cd Conf_Web/ospweb/ #virtualenv env #建议创建一个沙盒环境跑该平台 # source env/bin/activate #使用沙盒环境 # pip install -r requirement.txt #安装相关软件
2)创建数据库并将表刷入数据库
# vi opsweb/settings.py #这里数据库信息改为自己的数据库信息
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'confd',
'HOST': '192.168.8.114',
'USER': 'root',
',
,
}
}
ETCD_Server = "192.168.0.221" #这里改为自己etcd 的ip地址
ETCD_Port =
# python manage.py migrate #提交迁移文件至数据库,将表刷入数据库
3)创建超级管理员账号
#python manage.py createsuperuser
4)运行平台
#python manage.py runserver 0:8000
访问地址就是http:// ip:8000账号密码就是上一步创建的超级管理员账号密码5)登录平台为nginx创建键/值
例子:Shopping平台为例
项目创建:
1.创建商城项目/购物
2.创建商城项目里面的/ Shopping / nginx nginx服务
3.创建nginx集群目录/ Shopping / nginx / cluster1
4.给我们的商城nginx集群1项目创建配置文件
5.域名和节点名称可能是多个,这里我们需要创建目录/ Shopping / nginx / cluster1 / server_name和/ Shopping / nginx / cluster1 / upstream
etcd 里面存储的值
配置创建:
1.反向代理/ Shopping / nginx / cluster1 / proxy_name
2.绑定一个域名/ Shopping / nginx / cluster1 / server_name / 1
3.创建一个集群节点/ Shopping / nginx / cluster1 / upstream / web1
etcd里面存储的值
生成的配置文件
通过hosts文件我们可以查看节点状态(虽然这个节点不是up状态但是由此可见,我们可以动态添加节点)
就分享该项目的作者在2018年7月12日晚21:00-22:00 会跟大家详细讲解该项目并且相互探讨共同学习进步。有兴趣的朋友可以看一下报名方式然后报名免费领取视频并且进入直播群和我们的作者互动。
报名方式
分享时间: 18年7月12日晚
21:00--22:00
分享方式:网络直播
报名方式:扫码添加小助手微信,备注“ 公开课 ”进入直播分享群免费获取视频
Python 从零搭建 Conf_Web 配置管理平台的更多相关文章
- Python从零搭建Conf_Web配置管理平台
环境 CentOS 6/7 x64 Python:2 .7.6 Etcd: 3.2.18 Confd:0 .16.0 Nginx: 1.12.1 效果演示 一,拓扑图: 二.涉及软件 ETD: .分布 ...
- 分布式配置管理平台XXL-CONF
<分布式配置管理平台XXL-CONF> 一.简介 1.1 概述 XXL-CONF 是一个分布式配置管理平台,提供统一的配置管理服务.现已开放源代码,开箱即用. 1.2 特性 1. ...
- Eclipse中Python开发环境搭建
Eclipse中Python开发环境搭建 目 录 1.背景介绍 2.Python安装 3.插件PyDev安装 4.测试Demo演示 一.背景介绍 Eclipse是一款基于Java的可扩展开发平台. ...
- sublime搭建Java编译平台及编码问题
Sublime自带Java编译功能,当时只能编译不能运行,我们做一下小小的修改就可以让sublime一步完成编译运行的功能,实现sublime搭建Java编译平台. 使用Ctrl + B 编译时,所编 ...
- 分布式配置管理平台 Disconf
Distributed Configuration Management Platform(分布式配置管理平台) 专注于各种 分布式系统配置管理 的通用组件/通用平台, 提供统一的配置管理服务. 包括 ...
- 【译文】用Spring Cloud和Docker搭建微服务平台
by Kenny Bastani Sunday, July 12, 2015 转自:http://www.kennybastani.com/2015/07/spring-cloud-docker-mi ...
- Python + Appium 环境搭建
---恢复内容开始--- Appium自动化公司内部测试培训1-环境搭建 课程目的 一.Python + Appium 环境搭建 课程内容 1 安装前准备工作 搭建环境所需要的安装文件已经下载好 ...
- Docker进阶之八:搭建LNMP网站平台实战
搭建LNMP网站平台实战 LNMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写.L指Linux,N指Nginx,M一般指MySQL,也可以指MariaDB,P一般指PHP,也可 ...
- 自动化测试 Appium之Python运行环境搭建 Part2
Appium之Python运行环境搭建 Part2 by:授客 QQ:1033553122 实践环境 参见 Appium之Python运行环境搭建 Part1 环境部署 1.安装Android SDK ...
随机推荐
- consul日常操作命令
#开发模式运行agent consul agent -dev #查看consul 集群成员 consul members [-detailed] members命令的输出基于gossip协议,并最终一 ...
- Office 365实现单点登录系列(4)—安装AD FS
单一登录 (Single Sign-On)简而言之,就是让用户使用一套ID和密码,就可以登录一个或多个系统的授权机制.用户只需要通过其中一个应用的安全认证之后,再访问同一服务器其他应用的资源时不需要再 ...
- zabbix3.4 修改监控范围
需求:一段时间内不监控主机的流量(不告警!!!)
- 绕过CDN查找网站真实IP方法收集
方法1很简单,使用各种多地 ping 的服务,查看对应 IP 地址是否唯一,如果不唯一多半是使用了CDN, 多地 Ping 网站有: http://ping.chinaz.com/ http://pi ...
- December 03rd 2016 Week 49th Saturday
By failing to prepare, you are preparing to fail. 不做准备,那就准备失败吧. How does the case when you had prepa ...
- ZT 计算一个无符整数中1Bit的个数(1) 2010-04-20 10:52:48
计算一个无符整数中1Bit的个数(1) 2010-04-20 10:52:48 分类: C/C++ [转]计算一个无符整数中1Bit的个数(1) Count the number of bits ...
- PHP设计模式系列 - 建造者模式
什么是建造者模式 建造者模式主要是为了消除其它对象复杂的创建过程. 设计场景 有一个用户的UserInfo类,创建这个类,需要创建用户的姓名,年龄,金钱等信息,才能获得用户具体的信息结果. 创建一个U ...
- PHP设计模式系列 - 适配器
什么是适配器: 适配器设计模式只是将某个对象的接口适配为另一个对象所期望的接口. 设计情景: 假如我们原始的有一个UserInfo的类,提供用户信息的类,早起设计该类的时候,只实现了一个getUser ...
- Type Safety and Type Inference
Swift is a type-safe language. A type safe language encourages you to be clear about the types of va ...
- 浅析Java CompletionService
JDK的CompletionService提供了一种将生产新的异步任务与使用已完毕任务的结果分离开来的服务.生产者 submit 运行的任务.使用者 take 已完毕的任务,并依照完毕这些任务的顺序处 ...