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
        由于只是线下测试,故采用单节点模式,不用集群模式


        看着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"}}

    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

        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秒检查一次,所以有一点点延迟,效果如下:


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


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



转载于:https://my.oschina.net/guol/blog/480788

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值