在Windows環境中使用Nginx, Consul, Consul Template搭建負載平衡和服務探索服務

來源:互聯網
上載者:User

標籤:ken   request   情況   range   tle   很多   pst   site   127.0.0.1   

搭建負載平衡和服務探索服務的目的

隨著網站業務的不斷提升,單個伺服器的效能越來越難滿足客戶的業務需求,所以很多情況下,需要使用多伺服器執行個體和負載平衡器來滿足業務需要。

Nginx什麼是Nginx

Nginx一款高效能的Web伺服器,它既可以單獨使用,也可以作為負載平衡器與其他Web伺服器組合使用。

Nginx安裝

我們可用從Nginx官網上(http://nginx.org/)下載最新的Windows版本壓縮包。
壓縮包解壓之後目錄結構如下:

Nginx的配置
events {    worker_connections 1024;}http {    upstream backend    {        server 127.0.0.1:91 weight=1;        server 127.0.0.1:92 weight=1;    }    server     {        location / {            proxy_pass http://backend;        }    }}

其中upstream部分定義了對於HTTP請求的負載平衡。 當使用者發送請求到http://backend的時候,Nginx會將這個請求轉寄到指定伺服器IP列表中的一個。配置中的weight欄位設定了指定伺服器IP的權重,權重越高,轉寄的可能性越高。

常見問題

Nginx預設會佔用80連接埠,這個和IIS有衝突, 所以需要在nginx.conf中修改Nginx的預設連接埠

events {    worker_connections 1024;}http {    upstream backend    {        server 127.0.0.1:92 weight=1;        server 127.0.0.1:93 weight=1;    }    server     {        listen 81;        server_name localhost;        location / {            proxy_pass http://backend;        }    }}
執行個體

當前網站有2個執行個體部署在IIS中,siteA IP 127.0.0.1:92, siteB IP 127.0.0.1:93。

siteA和siteB都只有一個index.html頁面。
代碼如下:

siteA

<!DOCTYPE html><html><head>   <title>Nginx Sample</title></head><body>    <h1>This is site A</h1></body></html>

siteB

<!DOCTYPE html><html><head>   <title>Nginx Sample</title></head><body>    <h1>This is site B</h1></body></html>

Nginx伺服器使用81連接埠。 我們希望實現的效果是當使用者訪問http://127.0.0.1:81時,Nginx隨機將請求轉寄到http://127.0.0.1:92或者http://127.0.0.1:93上

siteA網站的index.html頁效果如下

siteB網站的index.html頁效果如下

實現步驟

a. 首先我們修改Nginx的設定檔

events {    worker_connections 1024;}http {    upstream 127.0.0.1    {        server 127.0.0.1:91 weight=1;        server 127.0.0.1:92 weight=1;    }    server     {        listen 81;        server_name localhost;        location / {            proxy_pass http://127.0.0.1;        }    }}

b. 在命令列啟動NginX

c. 開啟瀏覽器,輸入http://127.0.0.1:81, 反覆按F5重新整理, 網站內容在siteA和siteB之間切換,這說明負載平衡已經成功啟用。

Consul什麼是Consul

Consul是一款用高效能服務註冊/服務健全狀態檢查組件

Consul安裝

我們可以從官網(https://www.consul.io/downloads.html) 中對應版本的32位或64位程式。下載之後就是一個可執行檔consul.exe

如何啟動Consul

使用命令consul agent -dev, consul就會已開發模式啟動(開發模式不會啟用持久化,程式關閉後所有配置會丟失

Consul服務後台

Consul服務啟動之後,我們可以訪問,http://localhost:8500 來訪問Consul的管理後台,介面如下。

在這個管理後台中可以查看Consul註冊的所有服務和所有主機節點。

註冊服務

Consul服務啟動之後,我們可以調用一些相應的Api來註冊服務(相關Api列表 https://www.consul.io/api/index.html)

繼續我們的執行個體

現在我們嘗試將之前的siteA, siteB註冊到Consul中。

a. 首先這裡我們去下載一個Curl程式(https://curl.haxx.se/) 來調用Api(這裡可以用POSTMAN代替)

b. 建立2個json檔案siteA.json, siteB.json。其內容如下

siteA.json

{    "ID":"webA",    "Name":"web",    "Tags":[],    "Address":"127.0.0.1",    "Port":92,    "EnableTagOverride":false}

siteB.json

{    "ID":"webB",    "Name":"web",    "Tags":[],    "Address":"127.0.0.1",    "Port":93,    "EnableTagOverride":false}

這裡的Name就是服務名稱,ID就是該服務的一個執行個體ID。

c. 使用curl調用註冊服務Api,將siteA和siteB註冊到Consul中
curl --request PUT --data @siteA.json http://localhost:8500/v1/agent/service/register
curl --request PUT --data @siteB.json http://localhost:8500/v1/agent/service/register

d. 回到Consul管理頁面,我們會探索服務列表中會出現一個名為web的服務,這個服務有2個執行個體

如果看到以上結果,就說明2個Web服務執行個體註冊成功了。

添加服務健全狀態檢查

將服務註冊到Consul之後,得到的第一個好處就是可以藉助Consul對每個服務執行個體進行健全狀態檢查。

繼續修改我們的執行個體

a. 關閉之前開啟的Consul服務,新開一個命令列視窗,使用consul agent -dev重新開啟一個新的Consul服務

b. 在siteA和siteB網站目錄中,分別添加一個healthcheck.html檔案,其內容如下

<html><head>   <title>Nginx Sample</title></head><body>    <h1>This is health check page</h1></body></html>

c. 修改之前的siteA.json和siteB.json
siteA.json

{    "ID":"webA",    "Name":"web",    "Tags":[],    "Address":"127.0.0.1",    "Port":92,    "Checks":[{        "http":"http://127.0.0.1:92/healthcheck.html",        "interval":"5s"    }],    "EnableTagOverride":false}

siteB.json

{    "ID":"webB",   "Name":"web",    "Tags":[],    "Address":"127.0.0.1",    "Port":93,    "Checks":[{        "http":"http://127.0.0.1:93/healthcheck.html",        "interval":"5s"    }],    "EnableTagOverride":false}

d. 重新使用curl調用註冊服務Api, 將siteA和siteB註冊到Consul中

e. 開啟siteA目錄,將healthcheck.html改名為healthcheck1.html(這個操作相當於類比siteA所在的伺服器崩潰, consul請求不到healthcheck.html檔案了)

f. 回到Consul管理介面,我們看一下結果,它會顯示webA檢查失敗

g. 將healthcheck1.html改名會healthcheck.html, 等待5秒後,返回consul介面中,webA已經變回檢測通過狀態。

Consul Template什麼是Consul Template

Consul Template是Consul的一個向外延展群組件,可以讀取Consul中的服務配置,根據指定模板產生不同的設定檔。

所以這裡我們就可以組合使用Consul, Consul Template來動態產生Nginx的設定檔, 並自動重啟Nginx。

安裝Consul Template

我們可以從官網(https://releases.hashicorp.com/consul-template)中下載consul-template.exe

啟動Consul Template

consul-template -consul-addr 127.0.0.1:8500 -template "./2.tpl:./conf/nginx.conf:nginx -s reload"

這裡-consul-addr參數是指定consul服務的地址, -template是指定consul template使用的模板,產生的新檔案地址,以及產生新檔案之後的執行的命令。

繼續我們的案例

現在我們添加一個新的siteC, ip為127.0.0.1:94, siteC中也只有index.html和healthcheck.html2個檔案

a. 建立2.tpl, 檔案內容如下, 這裡使用的是consul-template的模板文法(相應文法介紹可以查看https://github.com/hashicorp/consul-template)

events {    worker_connections 1024;}http {   upstream 127.0.0.1{        {{ range service "web" }}    server {{ .Address }}:{{ .Port }} weight=1;{{ end }}     }    server {        listen       81;        server_name  localhost;        location / {           proxy_pass http://127.0.0.1;        }    }}

b. 使用命令consul-template -consul-addr 127.0.0.1:8500 -template "2.tpl:conf/nginx.conf:nginx -s reload" 啟動consul-template

c. 建立siteC.json, 使用curl將siteC註冊到consul中, siteC.json內容如下

{    "ID":"webC",    "Name":"web",    "Tags":[],    "Address":"127.0.0.1",    "Port":94,    "Checks":[{        "http":"http://127.0.0.1:94/healthcheck.html",        "interval":"5s"    }],    "EnableTagOverride":false}

d. 開啟瀏覽器,輸入http://localhost:81, 反覆按F5重新整理,你會發現siteC已經加入到了Nginx負載平衡配置中。d

e. 然後我們進行一個測試,我們將siteA的healthcheck.html重新命名為healthcheck1.html

f. 回到剛才頁面中繼續按F5重新整理,我們會發現現在只顯示siteB和siteC的內容了,這是因為siteA已經被consul認定為不健康的服務,所以consul-template重建Nginx的設定檔,將siteA中設定檔中抹除,並重新啟動了Nginx。

在Windows環境中使用Nginx, Consul, Consul Template搭建負載平衡和服務探索服務

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.