nginx with openSUSE Leap 15.1 in Azure 小記 Part 2
OS: openSUSE Leap 15.1 in Azure
Nginx: 1.14.2
上次練習 nginx 靜態網頁以及 proxy, 今天來實驗 HTTP Load Balancing
架構想法如下
實驗環境
OS: openSUSE Leap 15.1 in Azure x 3 VM
- 前面有 1 台 openSUSE Leap 15.1 執行 nginx
- 後面有 2 台 openSUSE Leap 15.1 使用 container 執行 Web 服務
參考上次的文章
首先建立 2 台 openSUSE Leap 15.1 in Azure, 執行以下動作
- 啟動 docker 服務
- # systemctl start docker
- 執行 container 然後 port 開在 80
- # docker run -d -p 80:80 russmckendrick/cluster
- Azure 該 VM 的網路設定內, 設定 port 80 可以連線
- 設定該 VM DNS 名稱
- 確認都可以進行存取
建立 1 台 openSUSE Leap 15.1 in Azure, 執行以下動作
- 使用 zypper 指令 安裝 nginx
- # zypper install nginx
- 啟動 nginx 服務
- # systemctl start nginx
- # systemctl enable nginx
- 設定 DNS 名稱
上面的動作前一篇文章就已經有了, 所以不贅述
接下來進行 HTTP Load Balancing 實驗
- 參考官方文件
修改 nginx 設定檔
# vi /etc/nginx/nginx.conf
worker_processes 1;
events {
worker_connections 1024;
use epoll;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
include conf.d/*.conf;
upstream backend {
server test2020022801.eastus.cloudapp.azure.com;
server test2020022802.eastus.cloudapp.azure.com;
}
server {
listen 80;
server_name localhost;
location / {
root /srv/www/htdocs/;
index index.html index.htm;
proxy_pass http://backend;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /srv/www/htdocs/;
}
}
include vhosts.d/*.conf;
}
- 新增 upstream backend 區段, 指向剛剛建立的 2 台 Web 服務
- 新增 proxy_pass 指向 http://backend
善用 #nginx -t 檢查語法
- 一開始是寫獨立的 http 區段, 結果就被警告 http 重複設定
將服務 reload
# systemctl reload nginx
進行測試
在瀏覽器開啟 http://testnginx.eastus.cloudapp.azure.com
- 確認會導向後端不同的 Web 服務
Load Balancing 的方式有 6 種
- Nginx open source 支援其中4種, nginx plus 支援 6 種
- Round Robin ( 預設 )
- Least Connections
- IP Hash
- Generic Hash
- Least Time ( NGINX Plus only )
- Random
接下來多實驗一個設定 Server Weight
剛剛有提到, 預設使用 Round Robin 方式將連線平均的分配到後端的服務
那如果 VM 他的規格大小不一樣, 或是想要測試金絲雀佈署這樣的改版測試呢?
這個時候考慮使用 Server Weight 權重方式來因應
修改 nginx 設定檔
# vi /etc/nginx/nginx.conf
worker_processes 1;
events {
worker_connections 1024;
use epoll;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
include conf.d/*.conf;
upstream backend {
server test2020022801.eastus.cloudapp.azure.com weight=3;
server test2020022802.eastus.cloudapp.azure.com;
}
server {
listen 80;
server_name localhost;
location / {
root /srv/www/htdocs/;
index index.html index.htm;
proxy_pass http://backend;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /srv/www/htdocs/;
}
}
include vhosts.d/*.conf;
}
- 針對剛剛後端服務其中一台設定 weight=3
- 沒有設定的話, 權重設定預設是 1, 目前有 2 台機器服務, 所以總共是 3 + 1 = 4, 也就是說 test2020022801 被存取的次數就會佔 3/4 ( 75% ), 另外一台是 1/4 ( 25% )
將服務 reload
# systemctl reload nginx
進行測試
在瀏覽器開啟 http://testnginx.eastus.cloudapp.azure.com
- 觀察 2 台機器服務的顯示比例
這樣算是朝向 nginx 的一小步 :)
~ enjoy it
Reference
沒有留言:
張貼留言