【轉載請註明出處】: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