项目作者: lee2son

项目描述 :
项目配置集中管理。监听zookeeper节点的变化,通过预设脚本通知到项目(支持任何语言)
高级语言: Python
项目地址: git://github.com/lee2son/af-conf.git
创建时间: 2017-09-21T01:46:00Z
项目社区:https://github.com/lee2son/af-conf

开源协议:

下载


af-conf

项目配置集中管理工具。通过监听zookeeper(http://zookeeper.apache.org/)节点的变化去调用预设的脚本,脚本再去修改配置文件。脚本不光可以修改项目配置,还能执行命令,于是af-conf摇身一变成了一个在多台机器同时执行命令的工具,比如用户来在负载均衡上发布项目代码

af-conf应用场景

假设有2两个项目,一个面向用户的web网站,一个面向公司内部的erp系统,由于公司业务庞大这些项目集群化部署在很多台机器上,这些项目都连接了同一个DB,假如有一天发现DB密码泄漏需要修改DB密码。此时总不能跑到每台机器上挨个修改,于是af-conf上场了

使用方法

本工具由python编写,除了zookeeper包,其它无特殊依赖库。zookeeper包使用的是:

  1. // zkpython 0.4.2
  2. https://pypi.python.org/pypi/zkpython/

设置要监听配置

配置文件使用.ini文件,示例如下:

  1. [sdkapi]
  2. command = /usr/bin/php xxx.php
  3. chdir = ./
  4. path.db_master = /anfeng/dev/database/sdk/master
  5. path.db_slave = /anfeng/dev/database/sdk/slave
  6. path.db_56gamebbs_master = /anfeng/dev/database/sdk/56gamebbs_master
  7. path.db_56gamebbs_slave = /anfeng/dev/database/sdk/56gamebbs_slave
  8. path.mongodb_user_messages = /anfeng/dev/mongodb/sdk/user_messages
  9. path.mongodb_logs = /anfeng/dev/mongodb/sdk/logs
  10. path.redis_default = /anfeng/dev/redis/sdk/default
  1. command 如果配置文件有更新,则调用该shell命令
  2. chdir 调用命令之前先chdir到该目录
  3. path.[key] 要订阅的配置文件(zookeeper节点)

当监听到配置文件有更改时,会将配置文件的内容保存为文件,并将文件路径和path.[key]中的key传递给command脚本,例如:

  1. /usr/bin/php xxx.php mongodb_user_messages /tmp/af-conf/anfeng/dev/mongodb/sdk/user_messages/2.json

此时在xxx.php脚本中通过argv[1]能拿到path.[key]中的key,argv[2]能拿到配置文件的路径,脚本在调用成功之后必须输出OK并返回状态码0,否则将会每隔60秒重试

启动监听脚本

  1. Using: af-conf.py [OPTIONS] [conf...]
  2. -s, server zookeeper server(host:port), use "," separated
  3. -o, output config file output directory
  4. -h, help show help

参数说明

  1. -s, server 设置zookeeper服务的地址,多个服务器使用逗号分隔,例如:192.168.1.100:2181,192.168.1.100:2182
  2. -o, output 当监听到配置文件发生变化时,将配置文件何存在何处
  3. -h, help 显示帮助

示例(demo):

  1. python ./../af-conf.py -s 127.0.0.1:2181 -o /tmp/af-conf ./af-conf.conf

af-conf自身的配置

af-conf解决的问题就是集中管理多台服务器上的配置文件,那么af-conf本身的配置怎么去管理?af-conf自身的配置也是通过zookeeper节点来设置,它的zookeeper节点名称为:/af-conf,节点值为json格式。

  1. {
  2. "restart":true

restart,如果标记为true,则af-conf进程本身会被重启