OPS Nginx 负载均衡

环境准备

实验内容

Nginx将请求分发的不同的服务器,如node1的tomcat:8080,node2的tomact:8080,以达到负载均衡的目的。

如输入http://www.xyz.com/balanced/index.html可能会显示node1,也有可能会显示node2。

这里是为了实验能够明确的展示出负载均衡的效果,在实际生产中node1或者node2的项目应该保持一致。

image-20210406231202116

文件内容

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能看到不一样的结果:

image-20210406234300507

image-20210406234324587

配置解释

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;
    }
posted @ 2021-04-06 23:54  云崖君  阅读(106)  评论(0编辑  收藏  举报