consul-template 是 Consul 的一个守护程序,使用 consul-template 能够方便快速的实现对 Consul Key/Value 存储系统的访问,能够从 KV 系统中读取数据、监视变更、同步本地文件;还能够在执行模板更新的同时,执行本地系统命令,好比常见的就是在同步数据到本地模板文件后,生成 Nginx 配置文件,并执行 nginx -s reload 命令,使 Nginx 从新加载配置文件。html
参考文档:
https://www.google.com
https://github.com/hashicorp/consul-template
https://www.consul.io
https://www.hi-linux.com/posts/36431.htmllinux
执行如下命令nginx
// 添加源 rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm // 执行安装 yum install -y nginx // 修改 nginx 默认端口为 8010 vi /etc/nginx/conf.d/default.conf // 加入开机启动 systemctl enable nginx.service // 启动 nginx systemctl start nginx.service
mkdir -p /etc/nginx/conf.d/consul
编辑 nginx.conf 文件,将上面的目录 /etc/nginx/conf.d/consul 做为配置文件目录导入到 nginx 中github
vi /etc/nginx/nginx.conf // 将下面这句代码加入到nginx倒数第二行 include /etc/nginx/consul/*.conf
由于 consul-template 只有一个二进制包,因此其安装过程很是的简单;首先是下载二进制包编程
wget https://releases.hashicorp.com/consul-template/0.20.0/consul-template_0.20.0_linux_amd64.tgz
解压到当前目录centos
tar -zxf consul-template_0.20.0_linux_amd64.tgz
移动到 consul 相同目录下浏览器
mkdir /usr/local/bin/consul-template mv consul-template /usr/local/bin/consul-template
设置环境变量,输入命令:vi /etc/profile安全
// 将这里的代码添加到 profile 文件末尾 export CONSUL_TEMPLATE_HOME=/usr/local/bin/consul-template export PATH=$PATH:$CONSUL_HOME:$CONSUL_TEMPLATE_HOME // 执行命令使环境变量生效 source /etc/profile
为了得到变动自动通知,咱们呢须要将 consul-template 模板文件添加到 Consul 的 Key/Value 存储系统中服务器
代码格式选择 HCL,会自动高亮喔。关于 consul-template 的语法,请参考:https://github.com/hashicorp/consul-template,为了方便,我直接复制了官方的 examples/nginx.md 文件内容
回到 consul-template 服务器上的目录 /usr/local/bin/consul-template ,建立一个 find_adress.tpl 文件内容
// 建立文件 vi find_adress.tpl // 输入如下内容 {{ key "hashicorp/street_address" }} // 保存退出
// 执行命令 consul-template --template "find_address.tpl:hashicorp_address.tpl" -once
好了,准备工做进行到这里,已基本结束;通过这么长时间的命令执行,相信不少同窗已经把网页关闭了,可是没办法,这这些事情仍是得一步一步的来。
终于能够启动了 consul-template 了,激动人心哪,consul-template 提供两种启动方式,命令行参数/加载配置文件 方式启动,就便利性来讲,仍是推荐“加载配置文件”方式启动,一次配置,终身有效嘛。
consul-template --consul-addr 172.16.1.218:8500 --template "hashicorp_address.tpl:/etc/nginx/consul/vhost.conf:/usr/sbin/nginx -s reload" --log-level=info
上面的代码参数这里作简单的解释
编写 hashicorp 的 nginx 配置文件
wait { min = "3s" max = "9s" } syslog { enabled = true facility = "LOCAL5" } consul { address = "172.16.1.218:8500" } template { source = "hashicorp_address.tpl" destination = "/etc/nginx/consul/vhost.conf" command = "service nginx reload" }
命令行参数和配置文件中的参数名称是一致的,配置文件编写完成,以加载配置文件形式启动 consul-template
consul-template -config "nginx.hcl" --log-level=info
经过上图看到,consul-template 启动后即刻进入侦听状态,在侦听 Consul 服务变更,若是有服务注册进来,立刻就会更新 nginx 文件;下面,咱们尝试启动一个 Ron.Consul.dll:12008 的服务,该服务将会注册到 Consul,让咱们来看看在不从新启动 consul-template 的状况下,是否会自动更新 vhost.conf 文件
12008注册为 home 节点的服务已经启动了,下面查看 /etc/nginx/consul/vhost.conf 配置文件
上图红框处内容就是自动更新的配置文件
还记得最开始的时候,咱们设置 nginx 的默认侦听端口为 8010 吗;如今,咱们在浏览器中打开下面的地址
http://172.16.1.218:8010/home/add/10/20
获得返回值:30,表示本次搭建 consul-template+nginx 成功!
写了这么长时间的博客,这篇文章应该是输入命令最多的一篇文章了,这也是和 Windows 下编程的最大的不一样,颇有快感,但愿你们也乐在其中。