【转载请注明出处】:http://www.javashuo.com/article/p-ezjexnok-ky.htmllinux
Consul-Template是基于Consul的自动替换配置文件的应用。在Consul-Template没出现以前,你们构建服务发现系统大多采用的是Zookeeper、Etcd+Confd这样相似的系统。nginx
Consul官方推出了本身的模板系统Consul-Template后,动态的配置系统能够分化为Etcd+Confd和Consul+Consul-Template两大阵营。Consul-Template的定位和Confd差很少,Confd的后端能够是Etcd或者Consul。git
Consul-Template提供了一个便捷的方式从Consul中获取存储的值,Consul-Template守护进程会查询Consul实例来更新系统上指定的任何模板。当更新完成后,模板还能够选择运行一些任意的命令。github
Consul-Template的使用场景segmentfault
Consul-Template能够查询Consul中的服务目录、Key、Key-values等。这种强大的抽象功能和查询语言模板可使Consul-Template特别适合动态的建立配置文件。例如:建立Apache/Nginx Proxy Balancers、Haproxy Backends、Varnish Servers、Application Configurations等。windows
Consul-Template特性后端
项目地址:https://github.com/hashicorp/consul-templateapi
Consul-Template和Consul同样,也是用Golang实现。所以具备自然可移植性(支持 Linux、windows 和macOS)。安装包仅包含一个可执行文件。Consul-Template安装很是简单,只须要下载对应系统的软件包并解压后就可以使用。tomcat
这里以Linux系统为例:安全
$ wget https://releases.hashicorp.com/consul-template/0.18.3/consul-template_0.18.3_linux_amd64.zip $ unzip consul-template_0.18.3_linux_amd64.zip $ mv consul-template /usr/local/bin/
其它系统版本可在这里下载:https://releases.hashicorp.com/consul-template/
-consul-auth=<username[:password]> 设置基本的认证用户名和密码。 -consul-addr=<address> 设置Consul实例的地址。 -max-stale=<duration> 查询过时的最大频率,默认是1s。 -dedup 启用重复数据删除,当许多consul template实例渲染一个模板的时候能够下降consul的负载。 -consul-ssl 使用https链接Consul。 -consul-ssl-verify 经过SSL链接的时候检查证书。 -consul-ssl-cert SSL客户端证书发送给服务器。 -consul-ssl-key 客户端认证时使用的SSL/TLS私钥。 -consul-ssl-ca-cert 验证服务器的CA证书列表。 -consul-token=<token> 设置Consul API的token。 -syslog 把标准输出和标准错误重定向到syslog,syslog的默认级别是local0。 -syslog-facility=<facility> 设置syslog级别,默认是local0,必须和-syslog配合使用。 -template=<template> 增长一个须要监控的模板,格式是:'templatePath:outputPath(:command)',多个模板则能够设置屡次。 -wait=<duration> 当呈现一个新的模板到系统和触发一个命令的时候,等待的最大最小时间。若是最大值被忽略,默认是最小值的4倍。 -retry=<duration> 当在和consul api交互的返回值是error的时候,等待的时间,默认是5s。 -config=<path> 配置文件或者配置目录的路径。 -pid-file=<path> PID文件的路径。 -log-level=<level> 设置日志级别,能够是"debug","info", "warn" (default), and "err"。 -dry Dump生成的模板到标准输出,不会生成到磁盘。 -once 运行consul-template一次后退出,不以守护进程运行。
在进行如下测试前,你首先得有一个Consul集群。若是你尚未,可搭建一个,固然单节点Consul环境也是能够的。
下面就以动态配置nginx为例来讲明,还须要提早启动好一个端口是8090的tomcat服务、安装好Nginx。
一、先向Consul注册服务
curl -X PUT http://127.0.0.1:8500/v1/catalog/register -d '{"Datacenter": "dc1","Node": "tomcat1","Address": "127.0.0.1","Service": { "Id": "127.0.0.1:8090", "Service": "api_tomcat1","tags": [ "dev" ],"Port": 8090}}'
查看注册的信息
curl -X GET http://127.0.0.1:8500/v1/catalog/service/api_tomcat1
二、准备Nginx启动脚本start_nginx.sh
#!/bin/sh ps -ef |grep nginx |grep -v grep |grep -v .sh if [ $? -ne 0 ]; then nginx; echo "nginx start" else nginx -s reload; echo "nginx reload" fi
三、在Nginx配置目录/etc/nginx/conf.d/
准备一个空配置文件test-consul-template.conf
四、编写Nginx配置文件模板nginx.conf.ctmpl
{{range services}} {{$name := .Name}} {{$service := service .Name}} upstream {{$name}} { zone upstream-{{$name}} 64k; {{range $service}}server {{.Address}}:{{.Port}} max_fails=3 fail_timeout=60 weight=1; {{else}}server 127.0.0.1:65535 down; # force a 502{{end}} } {{end}} server { listen 80 default_server; {{range services}} {{$name := .Name}} location /{{$name}} { proxy_pass http://{{$name}}; } {{end}} }
模板的语法能够参考官网 https://github.com/hashicorp/consul-template#templating-language
五、使用配置文件的方式启动Consul-Template
编辑配置文件nginx.hcl
consul { address = "127.0.0.1:8500" } template { source = "nginx.conf.ctmpl" destination = "/etc/nginx/conf.d/test-consul-template.conf" command = "./start_nginx.sh" }
六、启动Consul-Template
consul-template -config "nginx.hcl"
七、测试
请求http://127.0.0.1/api_tomcat/info
已经通了。
【转载请注明出处】:http://www.javashuo.com/article/p-ezjexnok-ky.html