五、Nginx负载均衡配置实例
实现效果:访问 www.123.com/edu/a.html的时候,将请求平均分配到8080和8081端口。
准备工作:
1)准备两台Tomcat服务器(端口号为8080和8081)
2)在两台Tomcat里面的webapps目录下,创建目录edu,在目录edu下存放一个a.html文件。
在第四章 Nginx反向代理配置实例2 中,我们已经准备了两台Tomcat服务器,并且在8080端口下,我们已经创建好了edu目录,写好了a.html文件。
现在,我们要做的就是在8081端口的Tomcat服务器下也创建一个edu目录,并写一个a.html文件。
cd
cd tomcat8081/apache-tomcat-8.5.72/
mkdir edu
cp movie/a.html edu/
此时,如果还未启动tomcat,记得启动,已经启动的该步骤可以跳过。(可以通过 ps -ef | grep tomcat 查看进程是否启动)
#启动tomcat8080
cd
cd tomcat8080/apache-tomcat-8.5.72/bin/
./startup.sh
#启动tomcat8081
cd
cd tomcat8081/apache-tomcat-8.5.72/bin/
./startup.sh
完成后,我们就可以在Nginx的配置文件中进行负载均衡的配置了。
cd /usr/local/nginx/conf/
vim nginx.conf
内容如下:
解释一下:
首先在http块里面加upstream 然后取一个名字(我这里取名叫myserver)。然后写我们需要进行负载均衡的服务器的地址。这里因为是自己的8080和8081端口,所以直接写自己的ip:端口号即可。
然后再http块的server中,我们写自己监听的端口号,并修改server_name为服务器的ip地址。
最后在location / 中,我们加一个proxy_pass,让他将请求转发到 http://myserver。这个myserver其实就是我们上面定义的upstream。他会帮我们把接收到的请求分发到他里面定义的8080和8081端口。
如此,我们对负载均衡的配置就完成了。现在,我们来重启一下Nginx。
cd …/sbin/
./nginx -s stop
./nginx
然后我们来访问我们的/edu/a.html。
可以看到,访问同一个地址,Nginx帮我们已经实现了负载均衡,在两个Tomcat之间分发我们的请求。
Nginx对于负载均衡提供了几种分配方式:
-
轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器中,如果某些个后端服务器宕机,能自动剔除。
-
weight:weight代表每个服务器的权重值,默认为1,权重越高,被分配的用户数就越多。这种分配方式主要用于后端服务器性能不均的情况。使用方法如下:
此时,访问8081端口的次数会是8080端口的两倍。(我试了一下,就是连续访问两次8081后,就访问一次8080,然后再访问两次8081,再访问一次8080,一直这样下去)
-
ip_hash:每个请求按照用户的ip的hash结果分配。这样每个访客固定访问一个后端服务器,可以觉得session问题。(简单说就是,A用户访问我们的服务器的时候,如果一开始访问的是8080端口,那么他就一直访问的都是8080端口)
-
fair:按后端服务器的响应时间分配,响应时间越短,越早被分配。(就是看8080和8081端口哪个比较快响应就让用户访问哪个)