NGINX(2) - NGINX load balancer
本文會建立兩個 Flask services 然後利用 NGINX 調整被呼叫的比例。
1. 建立 Flask service:
利用 ifconfig 取得 IP,下面用 192.168.xxx.xxx 表示機器 IP。
$ ifconfig # 顯示所有 IP
建立一個 app1.py,負責 192.168.xxx.xxx:8081。
對 192.168.xxx.xxx:8081 發出請求時會得到 'Hello, World from server1!' 這個字串。
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World from server1!'
app.run(host="192.168.xxx.xxx", port=8081)
再建立一個 app2.py,負責 192.168.xxx.xxx:8082。
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World from server2!'
app.run(host="192.168.xxx.xxx", port=8082)
利用兩個終端機將兩個服務分別打開。
$ python3 app1.py
$ python3 app2.py
檢查瀏覽器 192.168.xxx.xxx:8081 和 192.168.xxx.xxx:8082 是否有正確顯示字串,如果有就代表服務有被正確地啟動。
2. 啟動 NGINX:
啟動 NGINX 並設定 port 的規則如下:
docker run -it --rm -p80:80 nginx bash
我們希望 80 port 呼叫時能轉跳至 192.168.xxx.xxx:8081 或 192.168.xxx.xxx:8082,所以利用 vim 編輯 /etc/nginx/nginx.conf (vim 需要透過 apt 另外安裝)。
找到 include /etc/nginx/conf.d/*.conf; 並將其註解掉,然後新增 8081 和 8082 的附載平衡。
#include /etc/nginx/conf.d/*.conf;
upstream flaskserver {
server 192.168.xxx.xxx:8081 weight=1;
server 192.168.xxx.xxx:8082 weight=4;
}
server {
listen 80;
location / {
proxy_pass http://flaskserver;
}
}
這邊定義了 flaskserver 這個規則並設定選擇的權重為 1:4,然後再建立一個 proxy。
啟動或重啟 NGINX 後就可以在 127.0.0.1:80 上看到 'Hello, World from server1!' 或 'Hello, World from server2!'。字串1及字串2出現的比例約為 1:4。
$ nginx $ nginx -s reload

留言
張貼留言