Etcd+Confd实现Nginx配置文件变化自动更新服务
一.Confd介绍
Confd是一个集中化配置管理系统,一方面提供统一的本地配置管理,使用etcd或consul存储的数据渲染模板,还支持redis、zookeeper等,另一方面提供配置变更的自动下发,及时生效配置文件。
二.confd的部署
1.本次测试部署架构
etcd保存配置数据
confd:confd有一个watch功能,通过HTTP API定期监测对应的etcd中目录变化,获取最新的Value,然后渲染模板,更新配置文件
通过修改etcd中的配置文件达到自动更新nginx的服务配置
本次资源规划
nginx confd 服务节点 190.168.3.250
httpd1 190.168.3.251
httpd2 190.168.3.252
域名:www.test.com
2-3个httpd节点web节点
2.安装nginx
测试通过安装扩展源,yum install -y nginx
3.安装etcd并启动
tar zxvf etcd-v3.3.25-linux-amd64.tar.gz
cd /root/etcd-v3.3.25-linux-amd64
mv etcd etcdctl /usr/bin/
[root@server1 ~]# nohup etcd --data-dir /root/etcd/data.etcd --listen-client-urls http://190.168.3.250:2379 --advertise-client-urls http://190.168.3.250:2379 &>/root/etcd/etcd.log &
4.安装confd
cp confd-0.16.0-linux-amd64 /usr/bin/confd
mkdir -p /etc/confd/{conf.d,templates}
conf.d # 资源模板,下面文件必须以toml后缀
templates # 配置文件模板,下面文件必须以tmpl后缀
cd /etc/confd/conf.d 配置资源模版 [root@server1 templates]# vi test.conf.toml [template]
src = "test.conf.tmpl" 配置资源模版名
dest = "/etc/nginx/conf.d/test.conf" #生成文件的位置
keys = [
"/nginx", #在etcd里监控的keys,在本次的测试中nginx下有好几个key值,这里匹配了这个nginx的目录
]
reload_cmd ="/usr/sbin/nginx -s reload" #变化后重新加载配置文件
cd /etc/confd/templates
[root@server1 templates]# vi test.conf.tmpl
upstream www.{{getv "/nginx/test/server_name"}} {
{{range getvs "/nginx/test/upstream/*"}}
server {{.}};
{{end}}
}
server {
server_name www.{{getv "/nginx/test/server_name"}};
location / {
proxy_pass http://www.{{getv "/nginx/test/server_name"}};
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For
4fc0
$proxy_add_x_forwarded_for;
}
}
5.先给etcd写入数据
etcdctl -C http://190.168.3.250:2379 set /nginx/test/server_name "test.com"
etcdctl -C http://190.168.3.250:2379 set /nginx/test/upstream/server01 "190.168.3.251:80"
tcdctl -C http://190.168.3.250:2379 set /nginx/test/upstream/server02 "190.168.3.252:80"
查看写入的配置文件
6.启动 confd watch功能,通过HTTP API定期监测对应的etcd中目录变化,获取最新的Value,然后渲染模板,更新配置文件
[root@server1 ~]# confd -watch -backend etcd -node http://190.168.3.250:2379
另开一个窗口查看生成的配置文件
[root@server1 conf.d]# vi test.conf
![]
绑定一个www.test.com进行访问
三.测试
我们通过etcd的接口新添加一台节点,写入数据
etcdctl -C http://190.168.3.250:2379 set /nginx/test/upstream/server03 "190.168.3.253:80"
通过监控etcd的nginx keys,重新渲染模版
查看nginx配置文件
[root@server1 conf.d]# vi test.conf
实现自动更新配置,服务立即生效,负载均衡已经有第三个节点了
这个可以在生产环境中项目采用灰度发布方式,每次项目升级,都要手动先从Nginx下摘掉一组,然后再升级这组,当项目快速迭代时,手动做这些操作显然会增加部署时间,于是就想通过脚本实现自动化管理Nginx配置文件。
confd使用文档:
https://github.com/kelseyhightower/confd/blob/master/docs/quick-start-guide.md
资源模板其他参数:
https://github.com/kelseyhightower/confd/blob/master/docs/template-resources.md
- 【转载】Etcd+Confd实现Nginx配置文件自动管理
- Etcd+Confd实现Nginx配置文件自动管理
- 脚本自动实现DNS服务各区域配置文件
- linux shell 脚本自动从配置远程ftp服务上下载更新文件
- Java 实现自动监听并更新配置文件内容
- JAVA 实现自动监听并更新配置文件内容
- 脚本自动实现DNS服务各区域配置文件
- Java 实现自动监听并更新配置文件内容 (转自高手)
- 用数据库和C# Web Service实现客户端文件自动更新
- 实现Winform应用系统自动升级 ---------关于服务器端配置文件以实现的一点总结
- Nginx的伪静态配置中使用rewrite来实现自动补全的实例
- RHEL4- SAMBA服务(五)通过修改配置文件smb.conf来实现samba服务
- 扩展spring类实现自动读取配置文件
- 在服务 ObtainData 实现的协定列表中找不到协定名称 "IMetadataExchange"。将 ServiceMetadataBehavior 添加到配置文件或直接添加到 ServiceHost,以启用对该协定的支持。
- C# 动态获取、修改、更新配置文件 实现思路
- Ubuntu下改写vim配置文件 vimrc来实现显示行号,语法高亮,自动缩进功能
- rsync+inotify 实现资源服务器的同步目录下的文件变化时,备份服务器的同步目录更新,以资源服务器为准,去同步其他客户端
- centos6.5下vsftpd服务的安装及配置并通过pam认证实现虚拟用户文件共享
- 服务器自动宕机后,自动更新了web.xml配置文件
- Centos6.6搭建nginx服务及配置文件详解