confd 0.20.0 监听etcd动态更新nginx配置文件,解决confd0.16.0连接etcd失败时程序终止的问题

本文介绍了如何从旧版本confd0.16.0升级到0.20.0,以解决连接etcd失败导致的重启问题。升级后,confd可以监听并自动更新nginx配置,适用于etcd集群环境,确保配置文件在key值变化时实时更新并重启nginx。
摘要由CSDN通过智能技术生成

使用 confd 更新nginx

工作需要,使用confd来实现更新nginx配置文件重启nginx服务的需求;
大致流程是:首先confd启动连接etcd -> confd监听etcd指定的key值 -> 当etcd的key值发生变化时 -> confd来修改配置好的nginx模板和执行自定义脚本来实现软重启nginx
最终实现:etcd的指定key值发生变化时,nginx的配置文件更新,nginx重启的效果。

confd 0.16.0存在的问题

confd0.16.0启动时如果连接etcd失败会直接挂掉;
confd 停留在 0.16.0已经很长时间没有更新了,最近发现这个版本在启动时如果连接etcd失败时,confd不会等待连接而是会直接挂掉,不能满足我所作业务需求。
查找资料发现一个还在更新维护的confd 0.20.0仓库,测试发现用这个仓库的最新版本可实现启动连接失败时等待重连的效果,仓库地址:https://github.com/abtreece/confd/tags

使用confd 0.20.0 监听etcd配置

  1. 首先需要配置confd所需的 配置文件[confd.toml]文件放在confd执行文件的同级目录的conf.d子目录下,即conf.d/confd.toml,这个文件中配置了监听etcd的key值,模板文件[confd.tmpl]和模板目标文件[nginx.confd]的位置。
    示例:
[template] # confd 配置文件
prefix = "/etcdkeypath/nginx/" # etcd key值前缀
src = "confd.tmpl" # confd 模板文件,默认位置 etc/confd/templates
dest = "/etc/nginx/nginx.conf" # 配置nginx读取的配置文件位置,
keys = [
    "/certschange","/pocport" # 监听etcd的key值
]

check_cmd = "nginx -t" # nginx检测命令,监听etcd值发生变化时会重新执行这个命令
reload_cmd = "sh /root/startup/start_nginx.sh" # 自定义脚本,监听etcd值发生变化时会重新执行这个脚本

  1. 配置confd所需的 配置模板[confd.tmpl]:
    示例:
server {
        listen       {{getv "/pocport" "443"}} ssl;
        {{ $certschange := split (getv "/certschange") "," }}{{range $certschange}}
            #{{.}}
        {{end}}
        ssl_certificate      CA/server.crt;
        ssl_certificate_key  CA/server.key;

        location / {
          alias /etc/nginx/html/dist/;
          index index.html;
          try_files $uri $uri/ /index.html;
        }
    }
  1. 配置confd所需的 模板更新的目标文件[nginx.conf]:
server {
        listen       443 ssl;

        ssl_certificate      CA/server.crt;
        ssl_certificate_key  CA/server.key;

        location / {
          alias /etc/nginx/html/dist/;
          index index.html;
          try_files $uri $uri/ /index.html;
        }
    }
  1. linux服务器文件位置

confd版本
在这里插入图片描述

toml文件
在这里插入图片描述
tmpl文件
在这里插入图片描述
目标文件
在这里插入图片描述

  1. confd启动命令:
    重点:
    如果监听的etcd是集群环境,需要用 -node server1 -node server2 -node server3 这种写法,不能用 -node server1,server2.server3这种写法,否则会报错!!! 另外 confd0.20.0不需要指定为【etcdv3】参数,用【 etcd 】参数即可。

示例如下:

/etc/confd/confd-0.20.0-linux-amd64 -watch -backend etcd -node 192.168.1.1:2379 -node 192.168.1.2:2379 -node 192.168.1.3:2379

至此,当etcd的key值/etcdkeypath/nginx//pocport 、/etcdkeypath/nginx/certschange变化时,nginx.conf配置文件就会根据key值更新成最新的配置文件,然后nginx重启读取最新的配置文件。

  • 35
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值