1、理论部分
1.1、nginx的负载均衡
nginx的负载均衡由upstream模块实现
1.2、nginx的模块
1.2.1、nginx的模块分类
nginx模块分为三大类:
1)handler
2)filter
3)upstream(上游)
1.2.2、模块的作用
handler&filter - 用于完成单机工作
upstream - 用于跨越单机限制,完成网络数据接收、处理和转发
1.2.3、upstream的意义
为nginx提供跨越单机的横向处理扩展能力,使nginx摆脱只能作为终端节点,而具备网络应用级别的拆分、封装和整合的战略功能。
1.3、upstream的使用方法
1.3.1、定义upstream组和调用
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
http {
upstream myproject {
server 127.0.0.1:8000 weight=3;
server 127.0.0.1:8001;
server 127.0.0.1:8002;
server 127.0.0.1:8003;
}
server {
listen 80;
server_name www.domain.com;
location / {
proxy_pass http:
//myproject
;
}
}
}
|
1.3.2、upstream的分配方式
1)round robin(默认)
轮询,每个请求按照时间顺序逐一分配,如果后端服务器宕机,会自动剔除。
2)weight
加权轮询,用于解决后端服务器性能不均的情况。
定义方法:
|
1
2
3
4
|
upstream cmdschoolSer {
server 10.168.0.185 weight=10;
server 10.168.0.186 weight=10;
}
|
3)ip_bash
每个请求按照访问ip的bash结果分配,故访客固定访问一个后端服务器,可以解决session长期保持问题。
定义方法:
|
1
2
3
4
5
|
upstream cmdschoolSer {
ip_hash;
server 10.168.0.185:8080;
server 10.168.0.186:8080;
}
|
4)fair(第三方)
按后端服务器的响应时间分配,响应时间短的优先分配。
定义方法:
|
1
2
3
4
5
|
upstream cmdschoolSer {
fair;
server 10.168.0.185:8080;
server 10.168.0.186:8080;
}
|
5)url_bash(第三方)
定义方法:
|
1
2
3
4
5
6
|
upstream cmdschoolSer {
server 10.168.0.185:8080;
server 10.168.0.186:8080;
hash
$request_uri;
hash_method crc32;
}
|
6)tips
|
1
2
3
4
5
6
7
|
upstream cmdschoolSer {
#定义负载均衡设备的ip及设备状态
ip_hash;
server 10.168.0.185:8080 down;
server 10.168.0.185:8081 weight=2;
server 10.168.0.186:8080;
server 10.168.0.186:8081 backup;
}
|
1.3.3、设备的状态
1)down
表示当前server暂时不参与负载
2)weight
数值越大权重越大(默认1)
3)max_fails
允许请求失败的次数,超过失败次数,返回proxy_next_upstream模块定义的错误(默认1)
4)fail_timeout
max_fails次失败后,暂停的时间
5)backup
其他所有非backup机器down或者忙的时候,请求backup机器(压力最轻)
2、实验部分
2.1、实验信息
2.1.1、实验基础
你已经做完以下实验:
http://cmdschool.blog.51cto.com/2420395/1703299
2.1.2、主机信息
lbSer
ip address=10.168.0.183
hostname=lbSer
proxySer:
ip address=10.168.0.185
hostname=proxySer
tomcatSer:
ip address=10.168.0.188
hostname=tomcatSer
client:
ipaddress=10.168.0.8
hostname=client
2.1.3、yum包安装
In lbSer
|
1
2
|
yum -y
install
http:
//nginx
.org
/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0
.el6.ngx.noarch.rpm
yum -y
install
nginx
|
2.2、配置部分
In lbSer
2.2.1、step
vim编辑/etc/nginx/nginx.conf
将原来http{}部分删除,替换为如下代码:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
http {
upstream cmdschool {
server 10.168.0.185:81;
server 10.168.0.185:82;
}
server {
listen 80;
server_name www.cmdschool.org;
location / {
proxy_pass http:
//cmdschool
;
}
}
}
|
2.2.2、step
启动服务并设置为开机启动
|
1
2
|
/etc/init
.d
/nginx
restart
chkconfig nginx on
|
2.2.3、step
vim编辑/etc/sysconfig/iptables
增加如下代码:
|
1
|
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
|
2.2.4、step
重启防火墙
|
1
|
/etc/init
.d
/iptables
restart
|
In client
2.2.5、step
测试负载均衡
|
1
2
3
4
|
curl http:
//10
.168.0.182
curl http:
//10
.168.0.182
curl http:
//10
.168.0.182
curl http:
//10
.168.0.182
|
----------------------------------------------------------
理论部分参阅资料:
1)官方:
2)Tengine:
实验部分参阅资料:
1)Nginx官方下载路径:
http://nginx.org/en/download.html
2)Nginx+Tomcat负载均衡配置(Upstream模块)
https://www.nginx.com/resources/wiki/start/topics/examples/loadbalanceexample/
http://tengine.taobao.org/book/chapter_5.html
http://www.cnblogs.com/xiaogangqq123/archive/2011/03/04/1971002.html
http://onlyzq.blog.51cto.com/1228/557848/
http://developer.51cto.com/art/201407/446626.htm
http://www.myhack58.com/Article/sort099/sort0102/2011/31642.htm