介紹
首先要介紹的就是什麼是負載均衡。
衆所周知一個互聯網應用必須能承受大量的併發訪問,而再好的服務器也無法做到可以承受無限制增長的併發訪問量,並提供優秀的容錯機制。於是“集羣”這一概念就應運而生,所謂“集羣”,簡單點來說就是使用N個廉價的PC機共同作爲服務器使用,從而達到降低成本、提高容錯率等效果。(本文不再詳細贅述)
而既然使用集羣,那麼就必然要面臨一個問題——當服務端接收到一個請求的時候,我該安排哪個服務器爲其服務呢?我是應該挑選空閒的服務器爲其服務還是選用性能優秀的服務器?或者使用它之前就訪問過的服務器來提高緩存的命中率?這一系列的問題就是著名的“負載均衡”,本文就將隆重介紹高性能負載均衡服務器Nginx。
負載均衡算法
下面就簡單介紹幾種負載均衡的算法:
- 輪詢法 —— 輪詢使用所有掛載在代理服務器下的服務實例,爲請求提供服務。
- 最少連接數法 —— 每次接收請求以後都自動尋找當前連接數最少的服務器爲其服務。
- ip 哈希法 —— 建立一個合適的哈希算法,通過請求者的ip對服務器進行映射,選取被映射到的服務器爲其服務,這樣可以保證每個ip都是由一個與它對應的服務器服務。
下面就介紹負載均衡算法如何在Nginx中配置
默認的負載均衡配置
http {
upstream myapp1 {
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
server {
listen 80;
location / {
proxy_pass http://myapp1;
}
}
}
上面就是最簡單的負載均衡配置,在這樣的配置下,默認使用的負載均衡算法就是輪詢法。代理端口爲80,一共代理srv1、srv2、srv3三個服務器。意思就是請求只需要訪問該機器的80端口,Nginx就會自動將請求轉發到所配置的三個服務器下面,選擇服務器的算法就是輪詢法。
最少連接數算法
upstream myapp1 {
least_conn;
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
若要使用最小連接數算法,只需要在最上面添上“least_conn” 即可。
ip哈希法
upstream myapp1 {
ip_hash;
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
與最少連接數法類似,只需在配置中添加"ip_hash" 即可使用ip哈希算法做負載均衡。
權重法
最後再介紹一種負載均衡算法——權重法。配置如下:
upstream myapp1 {
server srv1.example.com weight=3;
server srv2.example.com;
server srv3.example.com;
}
如上所示,只需在服務器的後面添加“weiht=x”即可奉陪某個服務器的權重(默認是1)。上述配置的作用就是如果有5個請求,那麼srv1將會處理3個,其它各處理1個。