Nginx動態管理upstream
這篇文章主要討論下,對於分散式服務,站點如何平滑的上下線問題。
在分散式服務下,我們會用nginx做負載均衡, web站點訪問某服務站點的時候, 統一走nginx, 然後nginx根據一定的輪詢策略,將請求路由到後端的伺服器上。
這樣的架構是沒問題的,但是我們這裡考慮以下兩個問題:
網站上下線問題:我們網站平時更新服務的時候是直接覆蓋檔案,然後重啟,這樣就會造成一些請求中斷,如果是非核心邏輯還好, 但如果是核心邏輯,那請求中斷將會影響一些資料一致性,比如資金、交易、訂單等。
動態加減機器,比如某個站點訪問量突然變大,要新增機器,那就需要修改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從而達到平滑上線。
如果對你有啟發和幫助,幫忙點贊和分享。感謝~
想要學習更多幹貨,趕緊關注【進階的碼農】公眾號噢~