1. 程式人生 > >consul-template + nginx部署高可用負載均衡

consul-template + nginx部署高可用負載均衡

mas server web key use 健康 png ice pre

簡介

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的應用國內的圈子表象上比較小,出於工作原因平時研究也不是很深入,希望大家一起學習交流。

consul-template + nginx部署高可用負載均衡