项目搭建[7]Nginx负载均衡与Tomcat集群

单机部署多个Tomcat实例

下载Tomcat并解压到相应的目录下

1
2
wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-9/v9.0.7/bin/apache-tomcat-9.0.7.tar.gz
tar -zxvf apache-tomcat-9.0.7.tar.gz

拷贝多份Tomcat目录

1
2
cp -r apache-tomcat-9.0.7 ./tomcat9-02
mv apache-tomcat-9.0.7 ./tomcat9-01

配置环境变量

1
2
3
4
5
6
7
8
9
10
11
vim /etc/profile  # 在文件末尾增加如下内容

export CATALINA_BASE=/usr/local/tomcat9-01
export CATALINA_HOME=/usr/local/tomcat9-01
export TOMCAT_HOME=/usr/local/tomcat9-01

export CATALINA_2_BASE=/usr/local/tomcat9-02
export CATALINA_2_HOME=/usr/local/tomcat9-02
export TOMCAT_2_HOME=/usr/local/tomcat9-02

source /ect/profile # 使配置文件生效

编辑第二个Tomcat的bin下的catalina.sh文件

1
2
3
4
5
cd /usr/local/tomcat9-02/bin/
vim catalina.sh # 找到如下那行注释,在该注释下,增加两行配置
# OS specific support. $var_must_be set to either true or false.
export CATALINA_BASE=$CATALINA_2_BASE
export CATALINA_HOME=$CATALINA_2_HOME

编辑第二个Tomcat的conf下的server.xml文件

1
2
3
4
5
6
7
8
9
10
cd ../conf/
vim server.xml
# 第一个端口, Server port 节点端口
<Server port="9005" shutdown="SHUTDOWN">
# 第二个端口, Connector port 节点端口, 也即是Tomcat访问端口
<Connector port="9080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8" />
# 第三个端口, Connector port节点端口
<Connector port="9009" protocol="AJP/1.3" redirectPort="8443" />

执行 bin目录下的startup.sh

1
2
cd ../bin/
./startup.sh

检查监听的端口号及进程

1
2
netstat -lntp | grep java
ps -aux | grep java

通过访问不同的端口,能够访问到Tomcat默认的首页

Nginx负载均衡配置,常用策略简介

轮询(默认)

  • 优点: 实现简单

  • 缺点: 不考虑每台服务器的处理能力

  • 配置:

1
2
3
4
5
upstream www.xxx.com {
# 需要负载的server列表
server www.xxx.com:8080;
server www.xxx.com:9080;
}

权重(使用最多)

  • 优点: 考虑了每台服务器处理能力的不同,哪台机器性能高就给哪台机器的权重高一些

  • 配置:

1
2
3
4
upstream www.xxx.com {
server www.xxx.com:8080 weight=15;
server www.xxx.com:9080 weight=10;
}

ip hash

  • 优点: 能实现同一个用户始终访问同一个服务器

  • 缺点: 根据ip hash 不一定平均

  • 配置:

1
2
3
4
5
6
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会请求到同一台服务器上。

  • 配置:

1
2
3
4
5
6
upstream www.xxx.com {
# 需要负载的server 列表
server www.xxx.com:8080;
server www.xxx.com:9080;
hash $request_uri;
}

fair (第三方插件)

  • 特点: 按后端服务器的相应时间来分配请求,相应时间短的优先分配

  • 配置:

1
2
3
4
5
6
upstream www.xxx.com {
# 需要负载的server列表
server www.xxx.com:8080;
server www.xxx.com:9080;
fair;
}

负载均衡参数简介

1
2
3
4
5
6
7
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机器
}