nginx四层+七层分享代理实现与tomcat多实例动静分离
实验架构图如下,最终实现负载均衡和动静分离:
一、Tomcat 多实例
1.配置思路
1)修改 tomcat 主配置文件 server.xml 中的三个端口号 8080 8005 8009;
2)修改 tomcat 启动停止脚本 startup.sh shutdown.sh,添加 export CATALINA BASE CATALINA HONE TOWCAT HOME 变量都指向实例的工作目录。
2.配置实现
安装jdk
安装tomcat
#解压tomcat安装包 cd /opt tar zxf apache-tomcat-9.0.16.tar.gz
mkdir /usr/local/tomcat #实例1 mv apache-tomcat-9.0.16 /usr/local/tomcat/tomcat1 #实例2 cp -a /usr/local/tomcat/tomcat1 /usr/local/tomcat/tomcat2
useradd -s /sbin/nologin tomcat #新建用户 chown tomcat:tomcat tomcat/ -R #修改属主和属组
配置 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
修改端口号
第一个连接器默认监听8080端口,负责建立HTTP连接。在通过浏览器访问Tomcat服务器的Web应用时,使用的就是这个连接器。
第二个连接器默认监听8443端口,是建立HTTPS协议的连接
第三个连接器默认监听8009端口,AJP端口,即容器使用,如Apache能通过AJP协议访问Tomcat的8009端口。
还有一个监听的8005端口,是用于接收 SHUTDOWN 命令的端口。当 Tomcat 启动时,它会在该端口监听来自本地机器的 SHUTDOWN 命令。
这个 SHUTDOWN 命令用于优雅地关闭 Tomcat 服务器,即在关闭前允许正在进行的请求完成,而不是立即中断正在处理的请求。
#tomcat2 vim /usr/local/tomcat/tomcat2/conf/server.xml #22行,修改Server prot,默认为8005 -> 修改为8007 #69行,修改Connector port,HTTP/1.1 默认为8080 -> 修改为8082 #116行,修改Connector port AJP/1.3,默认为8009 -> 修改为8011
修改各 tomcat 实例中的 startup.sh 和 shutdown.sh 文件,添加 tomcat 环境变量
tomcat2和tomcat1同理
#tomcat1 vim /usr/local/tomcat/tomcat1/bin/startup.sh export CATALINA_BASE=$CATALINA_BASE1 export CATALINA_HOME=$CATALINA_HOME1 export TOMCAT_HOME=$TOMCAT_HOME1 vim /usr/local/tomcat/tomcat1/bin/shutdown.sh export CATALINA_BASE=$CATALINA_BASE1 export CATALINA_HOME=$CATALINA_HOME1 export TOMCAT_HOME=$TOMCAT_HOME1
启动各 tomcat 中的 /bin/startup.sh
#都是后台启动 /usr/local/tomcat/tomcat1/bin/startup.sh /usr/local/tomcat/tomcat2/bin/startup.sh
ss -natp | grep java
浏览器访问测试
http://192.168.100.150:8080 http://192.168.100.150:8080
二、Nginx+Tomcat负载均衡、动静分离
配置思路
使用七层代理实现动静分离+负载均衡,配置tomcat多实例,多个tomcat轮流处理动态资源(轮询算法);
访问静态资源,由nginx直接处理并响应。
使用四层代理实现nginx负载均衡,客户端到nginx1的请求,由nginx2和nignx3轮流处理(轮询算法)。
配置nginx,四层代理实现负载均衡
编译安装nginx,用systemd管理
#依赖 yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make #创建管理用户 useradd -M -s /sbin/nologin nginx #编译安装ngnix cd /opt tar -zxf nginx-1.24.0\ .tar.gz cd nginx-1.24.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 -j2 && 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 systemctl daemon_reload chmod 754 /lib/systemd/system/nginx.service
#启动nginx
systemctl start nginx
systemctl status nginx
配置负载均衡,四层代理实现
vim /usr/local/nginx/conf/nginx.conf ... #写在http部分上面 stream { upstream myserver { server 192.168.100.210:80 weight=1; server 192.168.100.220:80 weight=1; } server { listen 80; proxy_pass myserver; } } nginx -t nginx -s reload
ss -natp | grep nginx
配置nginx1和nginx2,七层代理动静分离
以nginx1为例
yum -y install epel-release.noarch -y yum -y install nginx systemctl start nginx
编辑配置文件 七层代理负载均衡,轮询+动静分离
vim /etc/nginx/conf.d/a.conf upstream tomcat_server { server 192.168.100.146:8080 weight=1; server 192.168.100.150:8080 weight=1; server 192.168.100.150:8082 weight=1; }
server { listen 80;
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/share/nginx/html/hx; expires 10d; } }
nginx -t
nginx -s reload
创建静态页面+准备测试图片
#静态页面 cd /usr/share/nginx/html mkdir hx echo "this is static, nginx1" > index.html #准备测试图片,放在hx下
Tomcat配置,作为动态资源服务器
mkdir /usr/local/tomcat/tomcat1/webapps/test mkdir /usr/local/tomcat/tomcat2/webapps/test
#创建动态页面 #tomcat2 vim /usr/local/tomcat/tomcat1/webapps/test/index.jsp <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <html> <head> <title>JSP test2 page</title> </head> <body> <% out.println("动态页面 2,http://www.test2.com");%> </body> </html> #tomcat3 vim /usr/local/tomcat/tomcat2/webapps/test/index.jsp <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <html> <head> <title>JSP test3 page</title> </head> <body> <% out.println("动态页面 3,http://www.test3.com");%> </body> </html>
#重启服务 /usr/local/tomcat/tomcat1/bin/shutdown.sh /usr/local/tomcat/tomcat1/bin/startup.sh /usr/local/tomcat/tomcat2/bin/shutdown.sh /usr/local/tomcat/tomcat2/bin/startup.sh