美文网首页程序员自动化技术文
django + etcd + confd 配置管理平台

django + etcd + confd 配置管理平台

作者: 51reboot | 来源:发表于2018-06-21 09:11 被阅读33次

    环境

    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 协议下发行。由俄罗斯的程序设计师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-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 && 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/ #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',         '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 状态但是由此可见,我们可以动态添加节点)


    喜欢的朋友就留下你的小心心吧!

    公告通知

    Python实战班、自动化运维班、区块链正在招生中

    各位小伙伴们,欢迎试听和咨询:

    相关文章

      网友评论

        本文标题:django + etcd + confd 配置管理平台

        本文链接:https://www.haomeiwen.com/subject/ljzfyftx.html