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