nginx負載均衡的4中配置策略
nginx的upstream目前支持4種方式的分配:
1、輪詢(默認)
每個請求按時間順序逐一分配到不同的後端服務器,如果後端服務器down掉,能自動剔除。
2、weight
指定輪詢機率,weight和訪問比率成正比,用於後端服務器性能不均的情況。
例如:
upstream tomcats {
server 10.1.1.107:88 weight=10 ;
server 10.1.1.132:80 weight=10 ;
}
3、ip_hash
每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問一個後端服務器,可以解決session的問題。
例如:
upstream tomcats {
ip_hash;
server 10.1.1.107:88;
server 10.1.1.132:80;
}
4、fair(第三方)
按後端服務器的響應時間來分配請求,響應時間短的優先分配。
5、url_hash(第三方)
按訪問url的hash結果來分配請求,使每個url定向到同一個後端服務器,後端服務器爲緩存時比較有效。
安裝nginx版本爲0.8.36
一。下載nginx
將該下載包拷貝到/usr/local/下(隨意了,找個地方就好)
二。安裝
cd /usr/local/
tar zxvf nginx-0.8.36.tar.gz
cd nginx-0.8.36
按照一些網絡資料的介紹,執行如下命令即可完成安裝
./configure
make
make install
但在實際安裝過程中會,執行./configure時,根據系統的配置不同會有不同的錯誤提示,這裏不羅嗦了,安裝nginx需要安裝openssl和 pcre,
openssl在linux下svn的安裝中有過介紹,這裏不再贅述,下面只介紹一下pcre的安裝,如下:
下載pcre:http://sourceforge.net/projects/pcre/files/ ,選擇pcre-8.02.tar.gz,拷貝到/usr/local/下
tar -zxvf pcre-8.02.tar.gz
cd pcre-8.02
./configure --prefix=/usr/local/pcre
make
make install
ok,pcre安裝完成
接着我們安裝nginx,
cd /usr/local/nginx-0.8.36
./configure --prefix=/usr/local/nginx --with-pcre=/usr/local/pcre-8.02 --with-http_ssl_module --with-openssl=/usr/local/openssl-0.9.8o
make
make install
ok,nginx安裝完成。
三。配置
修改 /usr/local/nginx/conf/nginx.conf 來滿足自己的需求,下面給一個負載的小實例
- user nginx;#確保存在這個用戶
- worker_processes 2;
- error_log /var/log/nginx/error.log info;#確保路徑存在
- pid logs/nginx.pid;
- events {
- worker_connections 1024;
- multi_accept on;
- use epoll;
- }
- http {
- include mime.types;
- default_type application/octet-stream;
- log_format main '$remote_addr - $remote_user [$time_local] $request '
- '"$status" $body_bytes_sent "$http_referer" '
- '"$http_user_agent" "$http_x_forwarded_for"';
- access_log /var/log/nginx/access.log main;
- sendfile on;
- #tcp_nopush on;
- keepalive_timeout 30;
- #gzip on;
- server_names_hash_bucket_size 128;
- upstream tomcats {
- server 192.168.0.104:8888 weight=3;
- server 192.168.2.94:8888 weight=2;
- ip_hash;
- }
- server {
- listen 80;
- charset gb2312;
- add_header test private;
- location / {
- root /usr/local/test/boss/test;
- index index.html index.htm index.jsp;
- proxy_pass http://tomcats;
- proxy_redirect off;
- proxy_set_header Host $host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- client_max_body_size 50m;
- client_body_buffer_size 256k;
- proxy_connect_timeout 10;
- proxy_send_timeout 15;
- proxy_read_timeout 15;
- proxy_buffer_size 4k;
- proxy_buffers 4 32k;
- proxy_busy_buffers_size 64k;
- proxy_temp_file_write_size 64k;
- }
- error_page 500 502 503 504 /50x.html;
- location = /50x.html {
- root html;
- }
- }
- }
user nginx;#確保存在這個用戶
worker_processes 2;
error_log /var/log/nginx/error.log info;#確保路徑存在
pid logs/nginx.pid;
events {
worker_connections 1024;
multi_accept on;
use epoll;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] $request '
'"$status" $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 30;
#gzip on;
server_names_hash_bucket_size 128;
upstream tomcats {
server 192.168.0.104:8888 weight=3;
server 192.168.2.94:8888 weight=2;
ip_hash;
}
server {
listen 80;
charset gb2312;
add_header test private;
location / {
root /usr/local/test/boss/test;
index index.html index.htm index.jsp;
proxy_pass http://tomcats;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 50m;
client_body_buffer_size 256k;
proxy_connect_timeout 10;
proxy_send_timeout 15;
proxy_read_timeout 15;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
注意,這裏nginx監聽80端口,所以要在iptables裏打開80端口。
啓動nqinx:
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
接着訪問這臺機器的80的端口,如果請求成功,則說明配置成功。
爲了操作方便,可以自己寫一個nginx命令腳本,放到/etc/init.d下,並賦予其執行權限即可,詳見附件,執行方法如下:
啓動:service nginx start
停止:service nginx stop
重啓:service nginx reconfigure
查看狀態:service nginx status
nginx升級或重新編譯時平滑啓動的方法:
1.執行編譯nginx,並覆蓋原來的路徑
2.kill -USR2 舊nginx主進程號:此時會在不關閉老進程的情況下啓動一個新的nginx進程
3.kill -WINCH 舊nginx主進程號:查看老的工作進程是否還在使用,不使用時就關閉,如下
4.kill -QUIT 舊nginx主進程號:關閉舊nginx主進程