【Linux】Nginx+Tomcat负载均衡、动静分离、多实例部署

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

Nginx+Tomcat负载均衡、动静分离、多实例部署

  • 一、Tomcat 多实例部署
    • 1.安装好 jdk 及 tomcat
    • 2.配置 tomcat 环境变量
    • 3.修改 tomcat2 中的 server.xml 文件
    • 4.修改各 tomcat 文件 ,添加 tomcat 环境变量
    • 5.启动各 tomcat 中的 /bin/startup.sh
    • 7.浏览器访问测试
  • 二、Nginx+Tomcat负载均衡、动静分离
    • 1.部署Nginx 负载均衡器
    • 2.部署2台Tomcat 应用服务器
    • 3.动静分离配置
    • 4.测试效果
  • 四、Nginx 负载均衡模式
    • 1.rr 轮询 负载均衡模式
    • 2.least_conn 最少连接
    • 3.ip_hash 负载均衡模式
    • 4.fair(第三方)负载均衡模式
    • 5.url_hash(第三方)负载均衡模式


一、Tomcat 多实例部署

1.安装好 jdk 及 tomcat

cd /opt
tar zxvf apache-tomcat-9.0.16.tar.gz
mkdir /usr/local/tomcat
mv apache-tomcat-9.0.16 /usr/local/tomcat/tomcat1
cp -a /usr/local/tomcat/tomcat1 /usr/local/tomcat/tomcat2

2.配置 tomcat 环境变量

vim /etc/profile.d/tomcat.sh
#tomcat1
export CATALINA_HOME1=/usr/local/tomcat/tomcat1
export CATALINA_BASE1=/usr/local/tomcat/tomcat1
export TOMCAT_HOME1=/usr/local/tomcat/tomcat1

#tomcat2
export CATALINA_HOME2=/usr/local/tomcat/tomcat2
export CATALINA_BASE2=/usr/local/tomcat/tomcat2
export TOMCAT_HOME2=/usr/local/tomcat/tomcat2

source /etc/profile.d/tomcat.sh

【Linux】Nginx+Tomcat负载均衡、动静分离、多实例部署_第1张图片

3.修改 tomcat2 中的 server.xml 文件

要求各 tomcat 实例配置不能有重复的端口号

vim /usr/local/tomcat/tomcat2/conf/server.xml
		#22行,修改Server prot,默认为8005 -> 修改为8006
 修改为8081
	#116行,修改Connector port AJP/1.3,默认为8009 -> 修改为8010

第一个连接器默认监听8080端口,负责建立HTTP连接。在通过浏览器访问Tomcat服务器的Web应用时,使用的就是这个连接器。
第二个连接器默认监听8009端口,AJP端口,即容器使用,如Apache能通过AJP协议访问Tomcat的8009端口。

4.修改各 tomcat 文件 ,添加 tomcat 环境变量

修改各 tomcat实例中的 startup.sh 和 shutdown.sh 文件,添加 tomcat 环境变量

vim /usr/local/tomcat/tomcat1/bin/startup.sh 
# -----------------------------------------------------------------------------
# Start Script for the CATALINA Server
# -----------------------------------------------------------------------------
##添加以下内容
export CATALINA_BASE=$CATALINA_BASE1
export CATALINA_HOME=$CATALINA_HOME1
export TOMCAT_HOME=$TOMCAT_HOME1


vim /usr/local/tomcat/tomcat1/bin/shutdown.sh
# -----------------------------------------------------------------------------
# Stop script for the CATALINA Server
# -----------------------------------------------------------------------------
export CATALINA_BASE=$CATALINA_BASE1
export CATALINA_HOME=$CATALINA_HOME1
export TOMCAT_HOME=$TOMCAT_HOME1


vim /usr/local/tomcat/tomcat2/bin/startup.sh 
# -----------------------------------------------------------------------------
# Start Script for the CATALINA Server
# -----------------------------------------------------------------------------
export CATALINA_BASE=$CATALINA_BASE2
export CATALINA_HOME=$CATALINA_HOME2
export TOMCAT_HOME=$TOMCAT_HOME2


vim /usr/local/tomcat/tomcat2/bin/shutdown.sh
# -----------------------------------------------------------------------------
# Stop script for the CATALINA Server
# -----------------------------------------------------------------------------
export CATALINA_BASE=$CATALINA_BASE2
export CATALINA_HOME=$CATALINA_HOME2
export TOMCAT_HOME=$TOMCAT_HOME2

5.启动各 tomcat 中的 /bin/startup.sh

/usr/local/tomcat/tomcat1/bin/startup.sh 
/usr/local/tomcat/tomcat2/bin/startup.sh 

netstat -natp | grep java

【Linux】Nginx+Tomcat负载均衡、动静分离、多实例部署_第2张图片

7.浏览器访问测试

http://192.168.142.30:8080
【Linux】Nginx+Tomcat负载均衡、动静分离、多实例部署_第3张图片

http://192.168.142.30:8081
【Linux】Nginx+Tomcat负载均衡、动静分离、多实例部署_第4张图片

二、Nginx+Tomcat负载均衡、动静分离

Nginx实现负载均衡是通过反向代理实现Nginx服务器作为前端,Tomcat服务器作为后端,web页面请求由Nginx服务来进行转发。 但是不是把所有的web请求转发,而是将静态页面请求Ncinx服务器自己来处理,动态页面请求,转发给后端的Tomcat服务器来处理。据了解,Tomcat是属于轻量级的应用服务器,可接受访问量可能会不足,所以我们需要多台Tomcat服务器。并且Tomcat并发量处理能力弱(约Nginx的六分之一),所以需要Nginx方向代理时,进行合理的调用分配。

1.部署Nginx 负载均衡器

systemctl stop firewalld
setenforce 0

yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make

useradd -M -s /sbin/nologin nginx

cd /opt
tar zxvf nginx-1.24.0.tar.gz -C /opt/

cd nginx-1.12.0/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-file-aio \									`启用文件修改支持`
--with-http_stub_status_module \					`启用状态统计`
--with-http_gzip_static_module \					`启用 gzip静态压缩`
--with-http_flv_module \							`启用 flv模块,提供对 flv 视频的伪流支持`
--with-http_ssl_module \							`启用 SSL模块,提供SSL加密功能`
--with-stream										`启用 stream模块,提供4层调度`

make && make install

ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecrReload=/bin/kill -s HUP $MAINPID
ExecrStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target

chmod 754 /lib/systemd/system/nginx.service
systemctl start nginx.service
systemctl enable nginx.service

2.部署2台Tomcat 应用服务器

systemctl stop firewalld
setenforce 0

tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/

vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_91
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin:$PATH

source /etc/profile

tar zxvf apache-tomcat-8.5.16.tar.gz

mv /opt/apache-tomcat-8.5.16/ /usr/local/tomcat

/usr/local/tomcat/bin/shutdown.sh 
/usr/local/tomcat/bin/startup.sh

netstat -ntap | grep 8080

3.动静分离配置

(1)Tomcat1 server 配置
mkdir /usr/local/tomcat/webapps/test
vim /usr/local/tomcat/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>


JSP test1 page   #指定为 test1 页面


<% out.println("动态页面 1,http://www.test1.com");%>




vim /usr/local/tomcat/conf/server.xml
#由于主机名 name 配置都为 localhost,需要删除前面的 HOST 配置

	
	


/usr/local/tomcat/bin/shutdown.sh 
/usr/local/tomcat/bin/startup.sh 
(2)Tomcat2 server 配置
mkdir /usr/local/tomcat/tomcat1/webapps/test /usr/local/tomcat/tomcat2/webapps/test

vim /usr/local/tomcat/tomcat1/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>


JSP test2 page   #指定为 test2 页面


<% out.println("动态页面 2,http://www.test2.com");%>




vim /usr/local/tomcat/tomcat1/conf/server.xml
#删除前面的 HOST 配置

	


/usr/local/tomcat/tomcat1/bin/shutdown.sh 
/usr/local/tomcat/tomcat1/bin/startup.sh 


vim /usr/local/tomcat/tomcat2/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>


JSP test3 page   #指定为 test3 页面


<% out.println("动态页面 3,http://www.test3.com");%>




vim /usr/local/tomcat/tomcat2/conf/server.xml
#删除前面的 HOST 配置

	


/usr/local/tomcat/tomcat2/bin/shutdown.sh 
/usr/local/tomcat/tomcat2/bin/startup.sh 
(3)Nginx server 配置
#准备静态页面和静态图片
echo '

这是静态页面

' > /usr/local/nginx/html/index.html mkdir /usr/local/nginx/html/img cp /root/game.jpg /usr/local/nginx/html/img vim /usr/local/nginx/conf/nginx.conf ...... http { ...... #gzip on; #配置负载均衡的服务器列表,weight参数表示权重,权重越高,被分配到的概率越大 upstream tomcat_server { server 192.168.142.60:8080 weight=1; server 192.168.142.50:8080 weight=1; server 192.168.142.50:8081 weight=1; } server { listen 80; server_name www.ztm.com; charset utf-8; #access_log logs/host.access.log main; location ~ .*\.jsp$ { proxy_pass http://tomcat_server; proxy_set_header HOST $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css)$ { root /usr/local/nginx/html/img; expires 10d; } location / { root html; index index.html index.htm; } ...... } ...... }

4.测试效果

测试静态页面效果
浏览器访问 http://192.168.142.40/
浏览器访问 http://192.168.142.40/game.jpg
【Linux】Nginx+Tomcat负载均衡、动静分离、多实例部署_第5张图片

四、Nginx 负载均衡模式

1.rr 轮询 负载均衡模式

每个请求按时间顺序逐一分配到不同的后端服务器,如果超过了最大失败次数后(max_fails,默认1),在失效时间内(fail_timeout,默认10秒),该节点失效权重变为0,超过失效时间后,则恢复正常,或者全部节点都为down后,那么将所有节点都恢复为有效继续探测,一般来说rr可以根据权重来进行均匀分配。

2.least_conn 最少连接

优先将客户端请求调度到当前连接最少的服务器。

3.ip_hash 负载均衡模式

每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题,但是ip_hash会造成负载不均,有的服务请求接受多,有的服务请求接受少,所以不建议采用ip_hash模式,session 共享问题可用后端服务的 session 共享代替 nginx 的 ip_hash(使用后端服务器自身通过相关机制保持session同步)。

4.fair(第三方)负载均衡模式

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

5.url_hash(第三方)负载均衡模式

基于用户请求的uri做hash。和ip_hash算法类似,是对每个请求按url的hash结果分配,使每个URL定向到同一个后端服务器,但是也会造成分配不均的问题,这种模式后端服务器为缓存时比较好。

你可能感兴趣的:(tomcat,linux,nginx)