歡迎光臨
每天分享高質量文章

Consul-template+nginx實現自動負載均衡

前言

consul-template 是 Consul 的一個守護程式,使用 consul-template 可以方便快速的實現對 Consul Key/Value 儲存系統的訪問,可以從 KV 系統中讀取資料、監視變動、同步本地檔案;還可以在執行模板更新的同時,執行本地系統命令,比如常見的就是在同步資料到本地模板檔案後,生成 Nginx 配置檔案,並執行 nginx -s reload 命令,使 Nginx 重新加載配置檔案。

consul-template 的特點
  • 智慧發現:一旦開始運行 consul-template ,consul-template 將會自動的發現 Consul 中的 Key/Value 變更,並自動更新到本地模板檔案
  • 重覆過濾:consul-template 內部可以跨實體對資料進行重覆篩選,多個 consul-template 實體進行選舉,確定只有一個 consul-template 執行 KV 查詢,然後將結果同步到其它 consul-template 實體,在命令列中使用 -dedup 標記或者在配置檔案中配置“deduplicate” 來啟用重覆過濾功能
  • 快速使用:支持命令列和配置檔案,有多種方法可以運行Consul Template,但最常見的樣式是將Consul Template作為系統服務運行。
  • Dry Mode:在Dry樣式,Consul-Template會將結果呈現在STDOUT,操作員可以檢查輸出是否正常,以決定更換模板是否安全。

參考文件:
https://www.google.com
https://github.com/hashicorp/consul-template
https://www.consul.io
https://www.hi-linux.com/posts/36431.html

Centos7.0 安裝 nginx

執行以下命令

  1. // 添加源
  2. rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
  3.  
  4. // 執行安裝
  5. yum install -y nginx
  6.  
  7. // 修改 nginx 預設端口為 8010
  8. vi /etc/nginx/conf.d/default.conf
  9.  
  10. // 加入開機啟動
  11. systemctl enable nginx.service
  12.  
  13. // 啟動 nginx
  14. systemctl start nginx.service
打開瀏覽器

http://172.16.1.218:8010

設置 Consul-template 的生成 nginx 配置檔案的目錄

創建目錄
  1. mkdir -p /etc/nginx/conf.d/consul
編輯 nginx.conf

編輯 nginx.conf 檔案,將上面的目錄 /etc/nginx/conf.d/consul 作為配置檔案目錄匯入到 nginx 中

  1. vi /etc/nginx/nginx.conf
  2.  
  3. // 將下麵這句代碼加入到nginx倒數第二行
  4.  
  5. include /etc/nginx/consul/*.conf
編輯好的 nginx.conf 檔案

安裝 consul-template

因為 consul-template 只有一個二進制包,所以其安裝過程非常的簡單;首先是下載二進制包

  1. wget https://releases.hashicorp.com/consul-template/0.20.0/consul-template_0.20.0_linux_amd64.tgz

解壓到當前目錄

  1. tar -zxf consul-template_0.20.0_linux_amd64.tgz

移動到 consul 相同目錄下

  1. mkdir /usr/local/bin/consul-template
  2. mv consul-template /usr/local/bin/consul-template

設置環境變數,輸入命令:vi /etc/profile

  1. // 將這裡的代碼添加到 profile 檔案末尾
  2. export CONSUL_TEMPLATE_HOME=/usr/local/bin/consul-template
  3. export PATH=$PATH:$CONSUL_HOME:$CONSUL_TEMPLATE_HOME
  4.  
  5. // 執行命令使環境變數生效
  6. source /etc/profile

將模板檔案存入 KV系統

為了獲得變更自動通知,我們呢需要將 consul-template 模板檔案添加到 Consul 的 Key/Value 儲存系統中

從控制台存入

代碼格式選擇 HCL,會自動高亮喔。關於 consul-template 的語法,請參考:https://github.com/hashicorp/consul-template,為了方便,我直接複製了官方的 examples/nginx.md 檔案內容

在 consul-template 本地建立 tpl 檔案

回到 consul-template 服務器上的目錄 /usr/local/bin/consul-template ,創建一個 find_adress.tpl 檔案內容

  1. // 創建檔案
  2. vi find_adress.tpl
  3.  
  4. // 輸入以下內容
  5. {{ key "hashicorp/street_address" }}
  6.  
  7. // 儲存退出
根據 find_adress.tpl 獲得模板內容
  1. // 執行命令
  2. consul-template --template "find_address.tpl:hashicorp_address.tpl" -once

好了,準備工作進行到這裡,已基本結束;經過這麼長時間的命令執行,相信很多同學已經把網頁關閉了,但是沒辦法,這這些事情還是得一步一步的來。

啟動 consul-template

終於可以啟動了 consul-template 了,激動人心哪,consul-template 提供兩種啟動方式,命令列引數/加載配置檔案 方式啟動,就便利性來說,還是推薦“加載配置檔案”方式啟動,一次配置,終身有效嘛。

命令列引數啟動方式
  1. 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

上面的代碼引數這裡做簡單的解釋

  • –consul-addr:指定 Consul 代理服務器的地址,預設 127.0.0.1:8500
  • –template :指定模板,這裡有3個值,每個值以冒號(:)進行分隔,首先是利用 hashicorp_address.tpl 生成 /etc/nginx/consul/vhost.conf 配置檔案,然後馬上執行命令 /usr/sbin/nginx -s reload 重新加載 nginx 配置
  • –log-level:日誌輸出級別
查看生成的 vhost.conf 檔案

加載配置檔案啟動方式

編寫 hashicorp 的 nginx 配置檔案

  1. wait {
  2. min = "3s"
  3. max = "9s"
  4. }
  5.  
  6. syslog {
  7. enabled = true
  8. facility = "LOCAL5"
  9. }
  10.  
  11. consul {
  12. address = "172.16.1.218:8500"
  13. }
  14.  
  15. template {
  16. source = "hashicorp_address.tpl"
  17. destination = "/etc/nginx/consul/vhost.conf"
  18. command = "service nginx reload"
  19. }

命令列引數和配置檔案中的引數名稱是一致的,配置檔案編寫完成,以加載配置檔案形式啟動 consul-template

  1. consul-template -config "nginx.hcl" --log-level=info

通過上圖看到,consul-template 啟動後即刻進入偵聽狀態,在偵聽 Consul 服務變動,如果有服務註冊進來,馬上就會更新 nginx 檔案;下麵,我們嘗試啟動一個 Ron.Consul.dll:12008 的服務,該服務將會註冊到 Consul,讓我們來看看在不重新啟動 consul-template 的情況下,是否會自動更新 vhost.conf 檔案

啟動 12008 服務註冊

12008註冊為 home 節點的服務已經啟動了,下麵查看 /etc/nginx/consul/vhost.conf 配置檔案

上圖紅框處內容就是自動更新的配置檔案

通過訪問 nginx 訪問服務

還記得最開始的時候,我們設置 nginx 的預設偵聽端口為 8010 嗎;現在,我們在瀏覽器中打開下麵的地址

  1. http://172.16.1.218:8010/home/add/10/20

得到傳回值:30,表示本次搭建 consul-template+nginx 成功!

結束語

寫了這麼長時間的博客,這篇文章應該是輸入命令最多的一篇文章了,這也是和 Windows 下編程的最大的不同,很有快感,希望大家也樂在其中。

.NETCore 集成 Consul 導讀

  • 1、Consul初探-在深交之前先認識
  • 2、Consul初探-從安裝到運行
  • 3、Consul初探-服務註冊和發現
  • 4、Consul初探-集成ocelot
  • 5、Consul初探-Consul-template+nginx實現自動負載均衡


    已同步到看一看
    赞(0)

    分享創造快樂