OPS Nginx 负载均衡
环境准备
实验内容
Nginx将请求分发的不同的服务器,如node1的tomcat:8080,node2的tomact:8080,以达到负载均衡的目的。
如输入http://www.xyz.com/balanced/index.html可能会显示node1,也有可能会显示node2。
这里是为了实验能够明确的展示出负载均衡的效果,在实际生产中node1或者node2的项目应该保持一致。
文件内容
node1上创建balanced文件夹:
$ mkdir -p /project/tomcat8080/apache-tomcat-7.0.70/webapps/balanced
在node1的balanced文件夹中书写内容:
$ cat > /project/tomcat8080/apache-tomcat-7.0.70/webapps/balanced/index.html<<EOF
<h1> node1 </h1>
EOF
node2上创建balanced文件夹:
$ mkdir -p /project/tomcat8080/apache-tomcat-7.0.70/webapps/balanced
在node2的balanced文件夹中书写内容:
$ cat > /project/tomcat8080/apache-tomcat-7.0.70/webapps/balanced/index.html<<EOF
<h1> node2 </h1>
EOF
启动两个节点上的tomact:
$ /project/tomcat8080/apache-tomcat-7.0.70/bin/startup.sh
Nginx配置
配置过程
接下来配置Nginx的负载均衡,由于我们的Nginx是装在node1上的,所以在node1上进行:
$ vim /usr/local/nginx/conf/nginx.conf
http {
...
upstream TestServer{
server 192.168.0.110:8080;
server 192.168.0.120:8080;
}
...
server {
listen 80;
server_name 192.168.0.110;
location / {
proxy_pass http://TestServer;
proxy_connect_timeout 10;
}
...
}
}
然后进行重载Nginx配置文件:
$ nginx -s reload
测试结果,连续两次访问http://www.xyz.com/balanced/index.html能看到不一样的结果:
配置解释
http global block中配置了一组负载集群,名字是TestServer:
upstream TestServer{
server 192.168.0.110:8080;
server 192.168.0.120:8080;
}
http server location block中对192.168.0.110:80的请求做反向代理,代理的负载集群是TestServer:
location / {
proxy_pass http://TestServer;
proxy_connect_timeout 10;
}
均衡策略
Nginx下常用的负载均衡策略有以下几种:
1)轮询策略,默认的策略。每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。
upstream TestServer{
server 192.168.0.110:8080;
server 192.168.0.120:8080;
}
2)weight策略,每个负载集群中节点的权重越高能则收到的请求越多,默认所有的权重都为1:
upstream TestServer{
server 192.168.0.110:8080 weight=2;
server 192.168.0.120:8080 weight=1;
}
3)ip_hash策略:对每个请求的IP地址进行hash,通过hash结果分配到集群中不同的节点上,能有效解决分布式HASH的问题,但是可能造成负载不均衡的情况:
upstream TestServer{
ip_hash;
server 192.168.0.110:8080;
server 192.168.0.120:8080;
}
4)falr策略:这是一种第三方策略,按后端服务器的响应时间来分配请求,响应时间短的优先分配,用于在分布式场景中较为常用,能对访问进行就分配节点。
upstream TestServer{
fair;
server 192.168.0.110:8080;
server 192.168.0.120:8080;
}