Confd+Consul 配置文件动态生成

    Confd是一个轻量级的配置文件管理工具,可以使用你存储在etcd、consul、redis、dynamodb、dzookeeper中的数据实时的更新你的本地配置文件。重新加载应用的新配置文件。consul是什么?看这里,Confd可以来这里下载,Consul按照上篇文章安装即可。

开始实战:

    1  Confd后端的数据存储,我采用consul,因为之前调研过consul,感觉consul比etcd功能上强一些,而不仅仅是一个KV系统。我的confd、consul都是源码安装在/opt目录下的。

cd /opt/consul
./consul agent -server -bootstrap-expect 1 -data-dir /tmp/consul -node=work1 -bind=172.16.1.100 -client=172.16.1.100
        由于只是线下测试,故采用单节点模式,不用集群模式

Confd+Consul 配置文件动态生成_第1张图片

        看着consul命令行参数是不是很烦,我们可以把这些参数集中在配置文件中,通过指定配置文件目录来启动,例如:

./consul agent -config-dir /etc/consul.d/server

    2  创建confd的TOML配置文件

            TOML的资源配置文件一般在/etc/confd/conf.d/目录下,但也可以自由的配置,而我的confd是源码编译的,所以我的confd的主目录在/opt/confd,我的TOML目录在/opt/confd/conf.d,关于TOML配置文件的格式可以参照这里

            定义config.toml:

[template]
src = "config.conf.tmpl"
dest = "/tmp/config.conf"
keys = ["/test"]

    3 创建源模板,该文件的目录一般在confd的主目录下,和TOML文件目录平级,我的源模板在/opt/confd/templates

            定义config.conf.tmpl:

[config]
database_name = {{getv "/test"}}

Confd+Consul 配置文件动态生成_第2张图片

    4  给consul中插入数据,我们之前在confd中查找的是test这个key,所以我们插入一对KV值

curl -X PUT -d 'nginx' http://172.16.100:8500/v1/kv/test
curl -s http://172.16.1.100:8500/v1/kv/test | python -m json.tool

Confd+Consul 配置文件动态生成_第3张图片

        consul还有良好的API支持,喜欢python的,可以直接使用python来操作consul

>>> dir(consul.Consul)
['ACL', 'Agent', 'Catalog', 'Event', 'Health', 'KV', 'Session', 'Status', '__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'connect']

     5  启动confd

            confd后端支持多种db,我采用的是consul,所以confd的启动命令是

./confd -confdir="/opt/confd/" -config-file="/opt/confd/conf.d/config.toml" -onetime=false -interval=3 -backend consul -node 172.16.1.100:8500 -log-level="debug"

     根据日志提示,可以看到在/tmp下面生成了新的配置文件


    6  下面我们更新一下consul中test的值为nginx2,看看confd会不会实时更新本地的配置文件

curl -X PUT -d 'nginx2' http://172.16.1.100:8500/v1/kv/test

        由于我们的confd设置的是3秒检查一次,所以有一点点延迟,效果如下:

Confd+Consul 配置文件动态生成_第4张图片

        可以看到,更新完毕后,配置文件没有立即变化,而是第二次查看时才变为nginx2,我们看看日志是怎么显示的:

Confd+Consul 配置文件动态生成_第5张图片

        可以看到confd检测到更新后,就立即更新了本地配置文件。



你可能感兴趣的:(consul,confd)