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组和调用
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
加权轮询,用于解决后端服务器性能不均的情况。
定义方法:
upstream cmdschoolSer { server 10.168.0.185 weight=10; server 10.168.0.186 weight=10; }
3)ip_bash
每个请求按照访问ip的bash结果分配,故访客固定访问一个后端服务器,可以解决session长期保持问题。
定义方法:
upstream cmdschoolSer { ip_hash; server 10.168.0.185:8080; server 10.168.0.186:8080; }
4)fair(第三方)
按后端服务器的响应时间分配,响应时间短的优先分配。
定义方法:
upstream cmdschoolSer { fair; server 10.168.0.185:8080; server 10.168.0.186:8080; }
5)url_bash(第三方)
定义方法:
upstream cmdschoolSer { server 10.168.0.185:8080; server 10.168.0.186:8080; hash $request_uri; hash_method crc32; }
6)tips
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
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{}部分删除,替换为如下代码:
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
启动服务并设置为开机启动
/etc/init.d/nginx restart chkconfig nginx on
2.2.3、step
vim编辑/etc/sysconfig/iptables
增加如下代码:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
2.2.4、step
重启防火墙
/etc/init.d/iptables restart
In client
2.2.5、step
测试负载均衡
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)官方:
http://www.nginx.org
2)Tengine:
http://tengine.taobao.org
实验部分参阅资料:
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