用nginx實現簡單的負載平衡,配置如下
...
http{
...
upstream mytomcatscluster{
#ip_hash 在同一台服务器部署了2个tomcat,使用不同的端口
server 127.0.0.1:8080 weight=2;
server 127.0.0.1:8180 weight=1;
}
...
server{
...
# 将所有后端请求分发到我定义的集群服务器上
location /service/fen/{
proxy_pass http://mytomcatscluster;
}
...
}
}
...
現在的問題是:如果2個tomcat都正常,則nginx能正常分發請求到指定的伺服器上,使用輪詢的方式,權重也可以起作用,但是如果我把其中一個tomcat給關掉,那麼請求就會卡死,因為會有請求被nginx分發到掛掉的伺服器上, 這種情況怎麼處理,ngxin有對應的解決策略嗎? nginx能有辦法監控叢集伺服器的運作狀態嗎?怎麼配置?
upstream 有兩個參數 max_fails和fail_timeout,如果某台server在fail_timeout時間內出現了max_fails次連線失敗,那麼Nginx會認為其已經掛掉了,從而在fail_timeout時間內不再去請求它。
fail_timeout預設為10s,max_fails預設為1。
另外 有個第三方模組 nginx_upstream_check_module 專門用來偵測後端server的健康狀況
。
yaoweibin/nginx_upstream_check_module: Health checks upstreams for nginx
https://github.com/yaoweibin/...
不用ip_hash的方式,把session存在redis裡面