Nginx+Tomcat 负载均衡集群方案
该方案是我之前做过的一个项目生产应用的,目前运行良好,如何您生产使用,请先做好测试。
转载:http://www.unixhot.com/wiki/doku.php?id=nginx_tomcat
下载软件包
1
2
3
4
5
6
7
8
9
|
"
]
[
root
@
Nginx
-
node1
src
]
# cd /usr/local/src
[
root
@
Nginx
-
node1
src
]
# wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.02.tar.gz
[
root
@
Nginx
-
node1
src
]
# wget http://nginx.org/download/nginx-0.8.34.tar.gz
[
root
@
Nginx
-
node1
src
]
# wget http://www.keepalived.org/software/keepalived-1.1.19.tar.gz
[
root
@
Nginx
-
node1
src
]
# chmod +x *
[
root
@
Nginx
-
node1
src
]
# ls -l
-
rwxr
-
xr
-
x
1
root
root
241437
10
-
01
17
:
25
keepalived
-
1.1.19.tar.gz
-
rwxr
-
xr
-
x
1
root
root
621534
03
-
04
01
:
00
nginx
-
0.8.34.tar.gz
-
rwxr
-
xr
-
x
1
root
root
1247730
03
-
31
16
:
31
pcre
-
8.02.tar.gz
|
安装Nginx
安装Nginx依赖的包
1
2
3
4
|
"
]
[
root
@
Nginx
-
node1
src
]
# tar zxvf pcre-8.02.tar.gz
[
root
@
Nginx
-
node1
src
]
# cd pcre-8.02
[
root
@
Nginx
-
node1
pcre
-
8.02
]
# ./configure
[
root
@
Nginx
-
node1
pcre
-
8.02
]
# make && make install
|
安装Nginx
1
2
3
4
5
6
7
8
|
"
]
[
root
@
Nginx
-
node1
pcre
-
8.02
]
# cd ../
[
root
@
Nginx
-
node1
src
]
# tar zxvf nginx-0.8.34.tar.gz
[
root
@
Nginx
-
node1
src
]
# cd nginx-0.8.34
[
root
@
Nginx
-
node1
nginx
-
0.8.34
]
# ./configure --prefix=/usr/local/nginx \
&
gt
;
--
with
-
http_stub_status
_module
\
&
gt
;
--
with
-
http_ssl
_module
[
root
@
Nginx
-
node1
nginx
-
0.8.34
]
# make && make install
[
root
@
Nginx
-
node1
~
]
# vim /usr/local/nginx/conf/nginx.conf
|
Nginx 配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
"
]
user
website
website
;
worker
_processes
4
;
error_log
logs
/
error
.log
;
pid
logs
/
nginx
.pid
;
worker_rlimit
_nofile
65535
;
events
{
use
epoll
;
worker
_connections
10240
;
}
http
{
include
mime
.types
;
default_type
application
/
octet
-
stream
;
server_names_hash_bucket
_size
128
;
client_header_buffer
_size
32k
;
large_client_header
_buffers
4
32k
;
client_max_body
_size
8m
;
sendfile
on
;
tcp_nopush
on
;
keepalive
_timeout
60
;
tcp_nodelay
on
;
gzip
on
;
gzip_min
_length
1k
;
gzip
_buffers
4
16k
;
gzip_http
_version
1.0
;
gzip_comp
_level
2
;
gzip_types
text
/
plain
application
/
x
-
javascript
text
/
css
application
/
xml
;
gzip_vary
on
;
server_tokens
off
;
upstream
web
#设置web集群池
{
ip_hash
;
#
server
192.168.0.141
:
8080
;
server
192.168.0.142
:
8080
;
server
192.168.0.143
:
8080
;
server
192.168.0.144
:
8080
;
server
192.168.0.145
:
8080
;
server
192.168.0.146
:
8080
;
}
upstream
wap
#设置wap集群池
{
ip_hash
;
server
192.168.0.151
:
8080
;
server
192.168.0.152
:
8080
;
server
192.168.0.153
:
8080
;
server
192.168.0.154
:
8080
;
server
192.168.0.155
:
8080
;
server
192.168.0.156
:
8080
;
}
server
{
listen
80
;
server_name
www
.
*
*
*
.com
;
location
/
{
root
html
;
index
index
.html
index
.htm
;
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
;
proxy_pass
http
:
/
/
web
;
#注意设置在这里
}
error
_page
500
502
503
504
/
50x.html
;
location
=
/
50x.html
{
root
html
;
}
}
server
{
listen
80
;
server_name
wap
.
*
*
*
.com
;
location
/
{
root
html
;
index
index
.html
index
.htm
;
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
;
proxy_pass
http
:
/
/
wap
;
#注意:设置在这里
}
error
_page
500
502
503
504
/
50x.html
;
location
=
/
50x.html
{
root
html
;
}
}
}
|
Nginx Upstream支持的分配方法
nginx的upstream目前支持5种方式的分配
*1.轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
*2.weight (带权重的)
指定轮询权重,weight和访问比率成正比,用于后端服务器性能不均的情况。
例如:
1
2
3
4
|
"
]
upstream
bakend
{
server
192.168.0.141
weight
=
10
;
server
192.168.0.142
weight
=
10
;
}
|
*3.ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
例如:
1
2
3
4
5
|
"
]
upstream
bakend
{
ip_hash
;
server
192.168.0.151
:
80
;
server
192.168.0.152
:
80
;
}
|
*4.fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
1
2
3
4
5
|
"
]
upstream
backend
{
server
server1
;
server
server2
;
fair
;
}
|
*5.url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
例:在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法
1
2
3
4
5
6
|
"
]
upstream
backend
{
server
squid1
:
3128
;
server
squid2
:
3128
;
hash
$request_uri
;
hash_method
crc32
;
}
|
*设置说明:
每个设备的状态设置为:
1.down 表示单前的server暂时不参与负载
2.weight 默认为1.weight越大,负载的权重就越大。
3.max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误
4.fail_timeout:max_fails次失败后,暂停的时间。
5.backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
nginx支持同时设置多组的负载均衡,用来给不用的server来使用。
client_body_in_file_only 设置为On 可以讲client post过来的数据记录到文件中用来做debug
client_body_temp_path 设置记录文件的目录 可以设置最多3层目录
location 对URL进行匹配.可以进行重定向或者进行新的代理 负载均衡