您當前的位置:首頁 > 舞蹈

Nginx動態管理upstream

作者:由 dongruan00 發表于 舞蹈時間:2020-12-02

這篇文章主要討論下,對於分散式服務,站點如何平滑的上下線問題。

在分散式服務下,我們會用nginx做負載均衡, web站點訪問某服務站點的時候, 統一走nginx, 然後nginx根據一定的輪詢策略,將請求路由到後端的伺服器上。

Nginx動態管理upstream

這樣的架構是沒問題的,但是我們這裡考慮以下兩個問題:

網站上下線問題:我們網站平時更新服務的時候是直接覆蓋檔案,然後重啟,這樣就會造成一些請求中斷,如果是非核心邏輯還好, 但如果是核心邏輯,那請求中斷將會影響一些資料一致性,比如資金、交易、訂單等。

動態加減機器,比如某個站點訪問量突然變大,要新增機器,那就需要修改nginx的配置,然後reload,這樣會中斷連線。 雖然reload很快,但是還是會有一瞬間的請求中斷。

為了解決以上問題,我們就需要動態管理upstream,這樣就不需要修改和重啟nginx來達到平滑上線的目的。

「nginx_http_dyups_module」

是第三方開源軟體,它提供API動態修改upstream的配置,我們透過示例來學習下

upstream test_upstream {

server 192。168。20。20:8000;

server 192。168。20。20:8001;

}

server {

listen 8888;

location / {

allow 127。0。0。1;

deny all;

dyups_interface;

}

}

server {

listen 80;

server_name localhost;

location / {

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

set $ups test_upstream;

proxy_pass http://$ups;

}

}

dyups支援的介面說明表

請求方法

HTTP介面

用途

獲取upstream的詳情

curl 127。0。0。1:8888/detail

#輸出顯示

server 127。0。0。1:8000 weight=1 max_fails=1 fail_timeout=10 backup=0 down=0

server 127。0。0。1:8001 weight=1 max_fails=1 fail_timeout=10 backup=0 down=0

動態新增upstream

#動態切換upstream到如下兩個埠

curl -d “server 127。0。0。1:9000;server 127。0。0。1:9001;” 127。0。0。1:8888/upstream/test_upstream

這樣我們後端服務有變化到時候就可以透過dyups動態更新upstream從而達到平滑上線。

如果對你有啟發和幫助,幫忙點贊和分享。感謝~

想要學習更多幹貨,趕緊關注【進階的碼農】公眾號噢~

標簽: upstream  Server  127  nginx  Proxy