【nginx】負載配置
contos搭建nginx服務:http://www.cnblogs.com/wangzhongqiu/p/6527346.html
轉自:http://ajita.iteye.com/blog/1715269
Nginx ("engine x") 是一個高效能的 HTTP 和 反向代理 伺服器,也是一個 IMAP/POP3/SMTP 代理伺服器。
Nginx 是一個很牛的高效能Web和反向代理伺服器,它具有很多非常優越的特性: 在高連線併發的情況下,Nginx是Apache伺服器不錯的替代品:Nginx在美國是做虛擬主機生意的老闆們經常選擇的軟體平臺之一。能夠支援高達 50,000 個併發連線數的響應,感謝Nginx為我們選擇了 epoll and kqueue作為開發模型。
Nginx作為負載均衡伺服器:Nginx 既可以在內部直接支援 Rails 和 PHP 程式對外進行服務,也可以支援作為 HTTP代理伺服器對外進行服務。Nginx採用C進行編寫,不論是系統資源開銷還是CPU使用效率都比 Perlbal 要好很多。
-----------------------------------------------------
以上都是簡介,也算是廢話吧
-----------------------------------------------------
nginx直接去官網下載就可以,配置檔案放在下面的conf目錄。
1.下面先做最簡單的配置,意思就是把請求到本機8080埠的所有http請求分別轉發到本機18080和28080埠:
- #user nobody;
- worker_processes 2;
- #error_log logs/error.log;
- #error_log logs/error.log notice;
- #error_log logs/error.log info;
- #pid logs/nginx.pid;
- events {
- #使用網路IO模型linux建議epoll,FreeBSD建議採用kqueue,window下不指定。
- #use epoll;
- worker_connections 1024;
- }
- http {
- include mime.types;
- default_type application/octet-stream;
- sendfile on;
- keepalive_timeout 65;
- #gzip on;
- upstream mysvr {
- #根據ip計算將請求分配各那個後端tomcat,許多人誤認為可以解決session問題,其實並不能。
- #同一機器在多網情況下,路由切換,ip可能不同
- #ip_hash;
- server localhost:18080;
- server localhost:28080;
- }
- server {
- listen 8080;
- server_name localhost;
- #charset koi8-r;
- #access_log logs/host.access.log main;
- location / {
- proxy_connect_timeout 3;
- proxy_send_timeout 30;
- proxy_read_timeout 30;
- proxy_pass http://mysvr;
- }
- }
- }
2.Nginx upstream的5種權重分配方式
1)、輪詢(預設)
每個請求按時間順序逐一分配到不同的後端伺服器,如果後端伺服器down掉,能自動剔除。
2)、weight
指定輪詢機率,weight和訪問比率成正比,用於後端伺服器效能不均的情況。
例如:
upstream mysvr {
server 192.168.0.14:8080 weight=10;
server 192.168.0.15:8080 weight=10;
}
3)、ip_hash
每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後端伺服器,可以解決session的問題(在上面提到的,如果一臺機器有多個ip,且都能達到我們的伺服器,這點就無效了)。
(適用於要求ip地址一致性的場景)
例如:
upstream mysvr {
ip_hash;
server 192.168.0.14:8080;
server 192.168.0.15:8080;
}
4)、fair(第三方)
按後端伺服器的響應時間來分配請求,響應時間短的優先分配。
(fair策略是擴充套件策略,預設不被編譯進nginx核心。其原理是根據後端伺服器的響應時間判斷負載情況,從中選出負載最輕的機器進行分流。這種策略具有很強的自適應性,但是實際的網路環境往往不是那麼簡單,因此要慎用。)
upstream mysvr {
server 192.168.0.14:8080;
server 192.168.0.15:8080;
fair;
}
5)、url_hash(第三方)
按訪問url的hash結果來分配請求,使每個url定向到同一個後端伺服器,後端伺服器為快取時比較有效。(適用於請求一致性,如快取伺服器)
例:在upstream中加入hash語句,server語句中不能寫入weight等其他的引數,hash_method是使用的hash演算法
upstream mysvr {
server 192.168.0.14:8080;
server 192.168.0.15:8080;
hash $request_uri;
hash_method crc32;
}
3.定義負載均衡裝置的Ip及裝置狀態
upstream mysvr {
ip_hash;
server 127.0.0.1:9090 down;
server 127.0.0.1:8080 weight=2;
server 127.0.0.1:6060;
server 127.0.0.1:7070 backup;
}
在需要使用負載均衡的server中增加
proxy_pass http://bakend/;
每個裝置的狀態設定為:
1.down 表示單前的server暫時不參與負載
2.weight 預設為1.weight越大,負載的權重就越大。
3.max_fails:允許請求失敗的次數預設為1.當超過最大次數時,返回proxy_next_upstream 模組定義的錯誤
4.fail_timeout:max_fails次失敗後,暫停的時間。
5.backup: 其它所有的非backup機器down或者忙的時候,請求backup機器。所以這臺機器壓力會最輕。