django + etcd + confd 配置管理平台
来源:Python学习     阅读:820
魔方网络
发布于 2018-06-23 23:36
查看主页

环境

CentOS 6/7 x64

Python: 2.7.6

Etcd: 3.2.18

Confd: 0.16.0

Nginx: 1.12.1

效果演示

django + etcd + confd 配置管理平台

一 拓扑图:

django + etcd + confd 配置管理平台

二 涉及软件

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

#./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

django + etcd + confd 配置管理平台

django + etcd + confd 配置管理平台

etcd 里面存储的值

django + etcd + confd 配置管理平台

配置创立:

1.反向代理商 /Shopping/nginx/cluster1/proxy_name

2.绑定一个域名 /Shopping/nginx/cluster1/server_name/1

3.创立一个集群节点 /Shopping/nginx/cluster1/upstream/web1

django + etcd + confd 配置管理平台

etcd 里面存储的值

django + etcd + confd 配置管理平台

生成的配置文件

django + etcd + confd 配置管理平台

通过 hosts 文件我们能查看节点状态(尽管这个节点不是 up 状态但是由此可见,我们能动态增加节点)

django + etcd + confd 配置管理平台

免责声明:本文为用户发表,不代表网站立场,仅供参考,不构成引导等用途。 系统环境 Linux
相关推荐
alpine linux v3.6-使用国内镜像源进行加速
node js爬虫,进程死掉不再执行,也不退出指南。
2020-03-15spring框架2
2018年swoole实战7-进程详解
JavaScript 中的函数式编程原理
首页
搜索
订单
购物车
我的