一、Nginx负载均衡配置,常用策略,场景及特点简介
Nginx负载均衡配置及策略:
-
轮询(默认)
-
优点:实现简单
-
缺点:不考虑每台服务器的处理能力
-
配置示例如下:
upstream www.xxx.com {
# 需要负载的server列表server www.xxx.com:8080;
server www.xxx.com:9080;
}
-
-
权重,使用的较多的策略
-
优点:考虑了每台服务器处理能力的不同,哪台机器性能高就给哪台机器的权重高一些
-
配置示例如下:
upstream www.xxx.com {
# 需要负载的server列表,weight表示权重,weight默认为1,如果多个配置权重的节点,比较相对值server www.xxx.com:8080 weight=15;
server www.xxx.com:9080 weight=10;
}
-
-
ip hash
-
优点:能实现同一个用户始终访问同一个服务器
-
缺点:根据 ip hash 不一定平均
-
配置示例如下:
upstream www.xxx.com {
ip_hash;
# 需要负载的server列表
server www.xxx.com:8080;
server www.xxx.com:9080;
}
-
-
url hash (第三方插件)
-
优点:能实现同一个服务访问同一个服务器,也就是根据url进行负载
-
缺点:和ip hash一样,根据 url hash 分配请求不一定平均,请求频繁的url会请求到同一台服务器上
-
配置示例如下(需要事先安装插件)
upstream www.xxx.com {
# 需要负载的server列表server www.xxx.com:8080;
server www.xxx.com:9080;
hash $request_uri;
}
-
-
fair (第三方插件)
-
特点:按后端服务器的响应时间来分配请求,响应时间短的优先分配
-
配置示例如下(需要事先安装插件)
upstream www.xxx.com {
# 需要负载的server列表
server www.xxx.com:8080;
server www.xxx.com:9080;
fair;
}
-
一些负载均衡参数简介:
upstream www.xxx.com {
ip_hash;
# 需要负载的server列表
server www.xxx.com:8080 down; # down表示当前的server暂时不参与负载
server www.xxx.com:9080 weight=2; # weight默认值为1,weight的值越大,负载的权重就越大
server www.xxx.com:7080 backup; # 其他所有的非backup机器,在down掉或者很忙的时候,才请求backup机器,也就是一个备用机器
server www.xxx.com:6080;
}
二、Nginx+Tomcat搭建集群
在上文中我们已经介绍了如何在单机上部署多个Tomcat实例,本节将介绍如何安装Nginx,并且使用Nginx+Tomcat搭建集群。
1.到nginx官网上获取下载链接,然后到Linux上下载并解压编译nginx:
[root@study-01 ~]# cd /usr/local/src/
[root@study-01 /usr/local/src]# wget http://nginx.org/download/nginx-1.14.0.tar.gz
[root@study-01 /usr/local/src]# tar -zxvf nginx-1.14.0.tar.gz
[root@study-01 /usr/local/src]# cd nginx-1.14.0
[root@study-01 /usr/local/src/nginx-1.14.0]# ./configure --prefix=/usr/local/nginx
[root@study-01 /usr/local/src/nginx-1.14.0]# echo $?
0
[root@study-01 /usr/local/src/nginx-1.14.0]# make && make install
[root@study-01 /usr/local/src/nginx-1.14.0]# echo $?
0
[root@study-01 /usr/local/src/nginx-1.14.0]# cd ../../nginx/
[root@study-01 /usr/local/nginx]# ls # 安装完成
conf html logs sbin
[root@study-01 /usr/local/nginx]#
2.修改nginx的主配置文件,添加如下配置:
【1】在http内部添加
upstream mServer{
server 127.0.0.1:8080 weight=1; #权重可自行修改
server 127.0.0.1:9080 weight=2; #权重可自行修改
}
【2】在http内部的server中添加如下:
location / {
proxy_pass http://mServer; #即上面配置的mServer
proxy_redirect default;
}
3.检查nginx配置文件,显示没问题则启动nginx服务:
[root@study-01 /usr/local/nginx/conf/vhost]# cd ../../sbin/
[root@study-01 /usr/local/nginx/sbin]# ./nginx -t # 检查nginx配置文件
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@study-01 /usr/local/nginx/sbin]# ./nginx -c /usr/local/nginx/conf/nginx.conf # 启动nginx服务
[root@study-01 /usr/local/nginx/sbin]# netstat -lntp | grep nginx # 检查端口是否已监听
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 5676/nginx: master
[root@study-01 /usr/local/nginx/sbin]# ps aux |grep nginx # 检查nginx进程是否正常
root 5676 0.0 0.0 20492 624 ? Ss 19:57 0:00 nginx: master process ./nginx -c /usr/local/nginx/conf/nginx.conf
nobody 5677 0.0 0.0 22936 3220 ? S 19:57 0:00 nginx: worker process
nobody 5678 0.0 0.0 22936 3220 ? S 19:57 0:00 nginx: worker process
root 5683 0.0 0.0 112680 976 pts/0 S+ 19:58 0:00 grep --color=auto nginx
[root@study-01 /usr/local/nginx/sbin]#
4.修改每个Tomcat实例的index.jsp文件内容,以便区别,方便一会验证负载均衡是否已成功生效:
[root@study-01 ~]# vim /usr/local/tomcat9-02/webapps/ROOT/index.jsp
<div id="congrats" class="curved container">
<h2>I'm Tomcat 2</h2>
</div>
[root@study-01 ~]#
5.启动两个Tomcat实例:
[root@study-01 ~]# cd /usr/local/tomcat9-01/bin/
[root@study-01 /usr/local/tomcat9-01/bin]# ./startup.sh
Using CATALINA_BASE: /usr/local/tomcat9-01
Using CATALINA_HOME: /usr/local/tomcat9-01
Using CATALINA_TMPDIR: /usr/local/tomcat9-01/temp
Using JRE_HOME: /usr/local/jdk1.8
Using CLASSPATH: /usr/local/tomcat9-01/bin/bootstrap.jar:/usr/local/tomcat9-01/bin/tomcat-juli.jar
Tomcat started.
[root@study-01 /usr/local/tomcat9-01/bin]# cd /usr/local/tomcat9-02/bin/
[root@study-01 /usr/local/tomcat9-02/bin]# ./startup.sh
Using CATALINA_BASE: /usr/local/tomcat9-02
Using CATALINA_HOME: /usr/local/tomcat9-02
Using CATALINA_TMPDIR: /usr/local/tomcat9-02/temp
Using JRE_HOME: /usr/local/jdk1.8
Using CLASSPATH: /usr/local/tomcat9-02/bin/bootstrap.jar:/usr/local/tomcat9-02/bin/tomcat-juli.jar
Tomcat started.
[root@study-01 /usr/local/tomcat9-02/bin]#
6.设置防火墙规则,开放80端口:
[root@study-01 ~]# firewall-cmd --zone=public --add-port=80/tcp --permanent
success
[root@study-01 ~]# firewall-cmd --reload
success
[root@study-01 ~]#
7.使用浏览器进行访问(多次刷新一下页面,看页面变化),验证nginx的负载均衡是否已成功生效:
localhost/myweb/ #localhost为集群所在的主机IP地址;
如上,验证成功,我们配置的nginx的负载均衡成功。到此为止,我们的Tomcat集群环境就搭建完成了。