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
留言
張貼留言