1. 程式人生 > >django + etcd + confd配置管理平臺

django + etcd + confd配置管理平臺

super templates text word 多個 eal real 類型 51cto

環境

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,一個關鍵對應的一個 Value。

etcd 集群:使用 Raft 協議保證每個節點數據一致,由多個節點對外提供服務。這裏只用單臺。

confd:管理本地應用配置文件,使用 etcd 或 consul 存儲的數據渲染模板,還支持 redis,zookeepe r等 .confd 有一個 watch 功能,通過 HTTP API 定期監測對應的 etcd 中目錄變化,獲取最新的 Value,然後渲染模板

Nginx: Nginx 是一款輕量級的 Web 服務器/反向代理服務器以及電子郵件代理服務器,並且在一個類似 BSD 的協議下發行。由俄羅斯的程序設計師 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

 #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

#哪個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創建鍵/值

例子:購物平臺為例

項目創建:

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 文件我們可以查看節點狀態(雖然這個節點不是上升狀態但是由此可見,我們可以動態添加節點)

技術分享圖片

作者:保成
GitHub:https://github.com/1032231418/Conf_Web

django + etcd + confd配置管理平臺