etcd:etcd是一个高可用的键值存储系统,主要用于共享配置和服务发现。
confd:confd是一个配置管理工具。通过查询etcd,结合配置模板引擎生成正式配置文件,同时具备定期探测机制(根据参数手动指定间隔秒数)来生成新的配置,配置变更自动重载。
# 安装 etcd 单机版,直接github下载二进制版本即可运行。
nohup etcd --listen-client-urls http://0.0.0.0:2379 --advertise-client-urls http://0.0.0.0:2379 > etcd.log &
# 安装 confd 直接github下载二进制版
# 创建配置文件目录及模板目录
mkdir -p /etc/confd/{conf.d,templates}
# 配置文件内容,注意后缀名
[root@localhost confd]# cat conf.d/test2.toml [template] src = "nginx2.conf.tpl" dest = "/tmp/nginx2.conf" keys = [ "/myapp/web/nginx2/user", "/myapp/web/nginx2/root", "/myapp/web/nginx2/upstream" ] check_cmd = "/usr/sbin/nginx -t -c {{.dest}}" reload_cmd = "/usr/sbin/nginx -s reload"
如果有多个,可以写多个 [template]
注释:
src 模板文件路径
dest 生成的配置文件路径
keys 去etcd抓取的key
check_cmd 可以检测配置文件是否有问题
reload_cmd 是检测成功才执行的命令
# 模板文件内容
aaa bbb ccc user = {{getv "/myapp/web/nginx2/user"}} root = {{getv "/myapp/web/nginx2/root"}} ddd eee upstream aaa { {{range getvs "/myapp/web/nginx2/upstream/*"}} server {{.}} {{end}} }
#这里随便写了点东西测试效果
这样通过读src的模板路径,生成到dest路径下,根据定义的keys去etcd抓取回来后,赋值给模板中。
可以看到有getv和getvs,前面是抓取单个key,getvs是批量抓取,根据定义的前缀(key的前缀)循环写入模板。(比如nginx的upstream会用到多个server)
# 往 etcd 中添加key
etcdctl set /myapp/web/nginx2/user www etcdctl set /myapp/web/nginx2/root /home/www2 etcdctl set /myapp/web/nginx2/upstream/s1 1.1.1.1:80 etcdctl set /myapp/web/nginx2/upstream/s1 1.1.1.2:80 etcdctl set /myapp/web/nginx2/upstream/s1 1.1.1.3:80
# 运行 confd ,每隔1秒抓取一次etcd
confd -interval=1 -backend etcd -node http://192.168.10.64:2379
# 运行 confd ,单次
confd -onetime -backend etcd -node http://192.168.10.64:2379
# 查看生成结果
[root@localhost ~]# cat /tmp/nginx2.conf aaa bbb ccc user = www root = /home/www2 ddd eee upstream aaa { server 1.1.1.2:80 server 1.1.1.3:80 server 1.1.1.3:80 }
这样就自动生成想要的配置文件了。
原创文章,转载请注明。本文链接地址: https://www.rootop.org/pages/4058.html