Skip to content

一个由配置来控制web集群机器上的常驻进程的样例。由supervisor+etcd+confd实现

Notifications You must be signed in to change notification settings

qiuweirun/supervisor-cluster-conf

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

31 Commits
 
 
 
 
 
 
 
 

Repository files navigation

supervisor-cluster-conf

一个由配置来控制web集群机器上的常驻进程的样例。由supervisor+etcd+confd实现

前言

使用supervisor来管理常驻进程、维护常驻进程的运行。然后启用/停止进程可通过开源的第三方web-ui实现管理,如:supervisord-monitor。 这里有的问题是如果是一个集群机器下,当要变更supervisor的进程配置文件需要在每台机器上执行supervisorctl update命令才能生效,那么能否通过后台配置方式来达到这种效果呢?

架构图

image

通过docker构建了一个集群场景,web机器上安装supervisordconfd服务,confd监听etcd。当往etcd发布配置后,监听的confd按照预定义的模板+etcd的配置生成应用进程的supervisor配置文件,并且当有变更时自动执行supervisorctl update命令。

  • etcd提供订阅发布服务
  • confd作为etcd的订阅者
  • monitor.ui.comsupervisord-monitor服务,用于控制web机器进程的启用/停止
  • admin.etcd.com为往etcd服务发布配置的后台,由etcd-kepper组成
  • nginx-proxy为子网访问入口,整个子网只暴露80和8080端口,通过域名的访问均通过80端口进行代理转发。

启动集群

  • 需先安装docker、docker-compose服务,然后使用如下命令
docker-compose -f /path/to/dockercompose/docker-compose.yml up
  • 绑定如下host,然后再通过域名访问相应的服务
如果docker安装方式为Docker Toolbox,使用如下即可,否则把192.168.99.100换为你本机分配到的IP
#站点1
192.168.99.100 demo.website1.com
#supervisor原生管理控制后台
192.168.99.100 svadm.website1.com
#开源管理后台
192.168.99.100 monitor.ui.com
#ETCD管理后台
192.168.99.100 admin.etcd.com
  • 192.168.99.100:8080nginxWebUI服务,配置域名转发以及负载均衡

效果演示

  1. 访问monitor.ui.com,初始下三台web机只有confd的订阅者服务进程。

image

  1. 访问demo.website1.com,为503错误,通过下面配置让服务跑起来
  2. 访问admin.etcd.com,发布如下配置(需修改为下图标红处的一样的地址,content为base64编码内容)。

image

/services/apps/demo1/ips       172.16.238.11,172.16.238.12,172.16.238.13
/services/apps/demo1/content   Y29tbWFuZCA9IC9wcm9qZWN0L2RlbW9fd2Vic2l0ZQpwcm9jZXNzX25hbWU9JShwcm9ncmFtX25hbWUpcwpzdGFydHNlY3MgPSAwCm51bXByb2NzID0gMQphdXRvc3RhcnQgPSB0cnVlCmF1dG9yZXN0YXJ0ID0gdHJ1ZQ==
  1. 发布完成后再访问monitor.ui.com,已经看到demo1的进程

image

  1. 再次访问demo.website1.com看到如下页面(这是demo1站点的内容):

image

  1. 试试/services/apps/demo1/ips删减某些IP看看会发生什么?

一些细节

  • 集群中,通过指定生效的机器IP地址来实现,confd自带的模板方法没有获取服务器IP的,这是一个稍微二次开发的confd服务。安装启动过程可见dockercompose/dockerfile/Dockerfile-supervisord22-51行。
  • 如不用上方的方式,还可以通过每台服务器维护一个唯一的环境变量实现,有confd自带的模板方法getenv支持。
  • confd的模板为dockercompose/dockerfile/build/confd/app.tmpl,与etcd的解码后的content组成完整的supervisor应用程序配置,并按照dockercompose/dockerfile/build/confd/app.toml定义的reload_cmd命令执行使生效。

About

一个由配置来控制web集群机器上的常驻进程的样例。由supervisor+etcd+confd实现

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published