簡介 Consul-template是Consul的一個方擴展工具,通過監聽Consul中的數據可以動態修改一些配置文件,大家比較熱衷於應用在Nginx,HAProxy上動態配置健康狀態下的客戶端反向代理信息。GitHub上的文檔比較詳細,這裡簡單做個入門介紹。 關於配置中心不做過多介紹了。簡單描述 ...
簡介
Consul-template是Consul的一個方擴展工具,通過監聽Consul中的數據可以動態修改一些配置文件,大家比較熱衷於應用在Nginx,HAProxy上動態配置健康狀態下的客戶端反向代理信息。GitHub上的文檔比較詳細,這裡簡單做個入門介紹。
關於配置中心不做過多介紹了。簡單描述就是項目多了,管理起來就會比較複雜,比如在海量應用中要修改一部分應用中的某些配置,由於大家變得越來越懶了,為了保證靈活穩定及時等,配置中心的重要性也就體現出來了。
假定場景
此處假定一個高可用redis集群讀寫分離的場景,存在一個業務服務BusinessService.Sample,通過對配置文件XXX.BusinessService.Sample.Redis.json中Redis的集群信息的讀取來維持Redis客戶端的正常讀寫,配置文件中的數據發生變化時。Redis客戶端會進行更新(假定場景- -只表達大致意思,勿噴)。
XXX.BusinessService.Sample.Redis.json中的配置信息假定為
{ "redis":{ "servers": ["127.0.0.1:6378""127.0.0.1:6379"], "master": "127.0.0.1:6378" } }
註冊Redis健康監測及配置中心維護Redis的Master節點信息
將Redis的所有節點註冊到Consul,並應用Consul進行健康監測。
{ "services": [{ "id":"redis1", "name":"redis", "tags":["redis1"], "address": "127.0.0.1", "port":6378, "checks": [ { "Tcp": "127.0.0.1:6378", "interval": "3s" } ] },{ "id":"redis2", "name":"redis", "tags":["redis2"], "address": "127.0.0.1", "port":6379, "checks": [ { "Tcp": "127.0.0.1:6379", "interval": "3s" } ] } ] }
Redis正常運行的狀態如下:
對於Master的節點信息,這裡採用配置中心進程存儲
到這裡基本工作算是完成了
創建Consul-template模板並註冊
consul-template會通過Http請求從Consul中讀取集群中的數據,數據發生變更時 consul-template會觸發更新指定配置文件的操作。此處根據XXX.BusinessService.Sample.Redis.json的數據格式創建.ctmpl模板文件,內容如下(配置格式參考 Consul-template文檔):
{ "redis":{ "servers": [{{range service "redis" "passing"}}"{{.Address}}:{{.Port}}"{{end}}], "master": "{{key "service/redis/master"}}" } }
然後進行註冊(此處以windows作為實例,Linux操作一樣)
consul-template.exe -consul "127.0.0.1:8500" -template="C:\Users\admin\Desktop\consul064\consul-temp\templates\XXX.BusinessService.Sample.Redis.json.ctmpl:C:\Users\admin\Desktop\BusinessService.Sample\BusinessService.Sample\BusinessService.Sample\XXX.BusinessService.Sample.Redis.json">> C:\Users\admin\Desktop\consul064\consul-temp\templates\logs\consul.log 2>&1
-consul後是consul的webui介面 ,用web管理consul就用的8500埠。
-template 後面是模板參數 第一個是模板地址 。冒號後的第二個參數是輸出位置。
>> 後為日誌輸出路徑
註冊完成後即可動態觸發XXX.BusinessService.Sample.Redis.json文件的動態修改了,比如關閉一個Redis實例或者Master節點發生變更時即可及時完成更新。
Redis的Master節點更新
master節點的更新此處可以通過監聽redis哨兵的+switch-master事件監聽,觸發修改Consul配置中心中指定Redis Key完成。
對於Consul的應用國內的圈子表象上比較小,出於工作原因平時研究也不是很深入,希望大家一起學習交流。群號:234939415