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

留言

熱門文章