1. 程式人生 > >python flask nginx keepalived 實現負載均衡

python flask nginx keepalived 實現負載均衡

最近在部署一個flask服務,要了兩臺伺服器嘗試了一下負載均衡

環境:Centos,python3,flask,nginx,keepalived,

確保上述包安裝成功

首先實現nginx的負載均衡140.143.66.123:90是我的主機,埠90是因為flask服務監聽的是90埠,權重為2/3,意思是每三次請求有兩次會發送到這臺機器上。

listen   8000;是值nginx監聽8000埠

location   下的proxy_pass  http://flask_server;是指定nginx將請求分發到的地址,之後重啟nginx服務

service nginx stop

service nginx start

這是成功後的效果。紅箭頭請求伺服器nginx監聽的8000埠,黃箭頭是處理請求的伺服器地址,藍箭頭是傳送請求的地址。

這時可以看到nginx會把請求分發到兩臺伺服器做處理。

那接下來就會有一個問題,如果我主機掛了,那服務也將隨之停止,備用機是無法提供服務的。為了解決這一問題我使用了keepalived實現主備模式。(兩臺伺服器都需配置nginx,keepalived)

先解釋一下keepalived設計思路。首先keepalived會將兩臺伺服器區分主備,並且主備伺服器都將提供一個或者幾個相同的虛擬ip,這時使用者訪問地址會解析到主機的虛擬ip,請求也將到達主機的nginx上,nginx再把請求分發到不同的處理請求的伺服器上。

主機正常工作時,備用機會持續監聽主機“心跳”,一旦主機“心跳”停止,keepalived會將虛擬ip解析到備用機上,使用者感受不到主機宕機,而備用機的nginx配置和主機相同,會繼續分發請求。

下面是主機備機keepalived配置箭頭注意主備不同的地方,etho網絡卡標識,用ifconfig檢視

我們來看一下效果,當兩臺伺服器keepalived都開啟時。我們可以看到主機網絡卡綁定了設定的虛擬ip,而備用機還是自己的內網ip

當主機keepalived的“心跳”停止時。我們可以看到主機繫結恢復了自己內網ip,而備用機繫結到了虛擬ip。這就實現了主備模式。

ps:在配置keepalived過程中出現的問題,當兩臺伺服器keepalived都正常時,主機備用機都綁定了虛擬ip。網上很多人說是防火牆的原因需要配置防火牆。我沒有配置而是修改了預設的virtual_router_id。再重啟keepalived,就正常了。