Python 从零搭建 Conf_Web 配置管理平台

Conf_Web 配置管理平台

作者 Eagle

某船舶行业科技公司,运维工程师,51Reboot 学员。通过在 51Reboot 学习,由运维工程师转至运维开发工程师。完成公司自动化平台的构建,对运维开发有了自己的理解,空闲时间写了这么一个小的项目来和大家分享一下。

Django + Etcd + Conf_Web 配置管理平台

环境

CentOS 6/7 x64

Python: 2.7.6

Etcd: 3.2.18

Confd: 0.16.0

Nginx: 1.12.1

优化功能:可选择上级项目目录,进行下级项目目录创建

效果演示
拓扑图

项目实施具体介绍

涉及软件

etcd:分布式KV存储系统,一般用于共享配置和服务注册与发现。是CoreOS公司发起的一个开源项目。 ETCD存储格式类似于文件系统,以根"/"开始下面一级级目录,最后一个是Key,一个key对应一个Value。

etcd 集群:使用Raft协议保证每个节点数据一致,由多个节点对外提供服务。这里只用单台。

confd:管理本地应用配置文件,使用etcd或consul存储的数据渲染模板,还支持redis、zookeeper等。confd有一个watch功能,通过HTTP API定期监测对应的etcd中目录变化,获取最新的Value,然后渲染模板。

Nginx: Nginx是一款轻量级的Web服务器/反向代理服务器以及电子邮件代理服务器,并在一个BSD-like协议下发行。由俄罗斯的程序设计师lgor 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

 #yum install  python-devel gcc gcc-c++ pcre  pcre-devel   patch   unzip   zlib  zlib-devel  openssl openssl-devel  git  -y  #依赖包 #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-1.12.1.tar.gz  #cd nginx-1.12.1 #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 -j4 && make install #mkdir  /usr/local/nginx/conf/vhost/ Nginx主配置文件修改为这个样子,增加include目录配置 #vi  /usr/local/nginx/conf/nginx.conf     #user  nobody;   worker_processes  1;   #error_log  logs/error.log;   #error_log  logs/error.log  notice;   #error_log  logs/error.log  info;   #pid        logs/nginx.pid;   events {     worker_connections  1024;   }   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  0;     keepalive_timeout  65;     #gzip  on;   include   vhost/*.conf;   }

3)安装 confd

下载地址https://github.com/kelseyhightower/confd/releases

下载完毕丢到系统里面

 # cp confd  /usr/bin/confd  # which  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=5000 rise=1 fall=5 timeout=4000 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 ,只需要更改 etcd 的连接地址即可

#/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/ #yum install python-pip -y         #安装pip #mkdir   /root/.pip/               #创建pip源配置文件目录 # vi  /root/.pip/pip.conf          #修改为阿里云的pip源    [global]   trusted-host=mirrors.aliyun.com   index-url=http://mirrors.aliyun.com/pypi/simple/   [list]   format=columns    #pip install   virtualenv          #安装沙盒工具 #virtualenv   env                  #建议创建一个沙盒环境跑该平台 # source  env/bin/activate         #使用沙盒环境 # pip install -r requirement.txt   #安装相关软件

2)创建数据库并将表刷入数据库

 #  mysql  -p          #登录数据库为平台创建一个数据库 #CREATE DATABASE  opsweb   CHARACTER SET utf8 COLLATE utf8_general_ci;      #创建数据库opsweb  # vi opsweb/settings.py   #这里数据库信息改为自己的数据库信息     DATABASES = {         'default': {         'ENGINE': 'django.db.backends.mysql',         'NAME': 'opsweb',         'HOST': 'localhost',         'USER': 'root',         'PASSWORD': '123456',         'PORT': 3306,       }     }          ETCD_Server = "192.168.0.221"        #这里改为自己etcd 的ip地址     ETCD_Port = 2379      # python manage.py   migrate          #提交迁移文件至数据库,将表刷入数据库

3)创建超级管理员账号

# python manage.py    createsuperuser

4)运行平台

 # python manage.py  runserver 0:8000 访问地址就是 http://ip:8000   账号密码就是上一步创建的超级管理员账号密码

5)登录平台为 nginx 创建 key/value

例子: Shopping 平台为例

项目创建:

1.创建商城项目 /Shopping

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

分享方式:网络直播

报名方式:扫码添加小助手微信,备注“公开课”进入直播分享群免费获取视频

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容

  • from http://www.infoq.com/cn/articles/etcd-interpretation...
    小树苗苗阅读 13,939评论 3 38
  • feisky云计算、虚拟化与Linux技术笔记posts - 1014, comments - 298, trac...
    不排版阅读 3,813评论 0 5
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,598评论 18 139
  • 今天听了波司仪的课,真的觉得喜欢和这种层次的人打交道。有知识,有文化,有内涵,口吐莲花,出口成章。 自己原来也喜欢...
    bananafour阅读 344评论 0 1
  • 我是85后,算算自己已步入中年,工作,成家,买房,生娃,一步步都中规中矩,于是向往尝鲜和冒险的念头又跳跃出来,我在...
    YJ_Kim阅读 433评论 0 0