在部署Tomcat之前必须安装好JDK,因为JDK是Tomcat运行的必要环境
关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
Tomcat安装包放到opt目录下
jdk-8u201-linux-x64.rpm
apache-tomcat-9.0.16.tar.gz
rpm -ivh jdk-8u201-linux-x64.rpm 安装JDK运行环境
vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$PATH
source /etc/profile.d/java.sh
java -version
cd /opt
tar zxvf apache-tomcat-9.0.16.tar.gz
mkdir /usr/local/tomcat 移动解压包,配置两台tomcat
mv apache-tomcat-9.0.16 /usr/local/tomcat/tomcat1
cp -a /usr/local/tomcat/tomcat1 /usr/local/tomcat/tomcat2
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
vim /usr/local/tomcat/tomcat2/conf/server.xml
#22行,修改Server prot,默认为8005 -> 修改为8006
修改为8081
#116行,修改Connector port AJP/1.3,默认为8009 -> 修改为8010
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_HOME1=/usr/local/tomcat/tomcat2
export CATALINA_BASE1=/usr/local/tomcat/tomcat2
export TOMCAT_HOME1=/usr/local/tomcat/tomcat2
#刷新变量
source /etc/profile.d/tomcat.sh
启动tomcat1
cd /usr/local/tomcat/
cd /usr/local/tomcat/
netstat -anpt | grep java 查看端口是否全部正常打开
http://192.168.59.118:8080/
项目需求:在192.168.50.128上部署两个tomcat服务,端口分别为8080与8081;在192.168.50.168上部署一个tomcat服务,端口为8080;在192.168.50.138上部署一台Nginx服务
在这些基础上,当进行web访问时,Nginx处理静态页面的请求,Tomcat负责处理动态页面的请求,实现动静分离并且实现负载均衡。
每个请求按时间顺序逐一分配到不同的后端服务器,如果超过最大失败次数后(max_fails,默认为1),在失效时间内(fail_timeout,默认为10秒),该节点失效权重变为0,超过失效时间后,则恢复正常,或全部节点down后,那么所有节点都恢复为有效继续探测,一般来说可以根据权重进行均匀分配
优先将客户端请求调度到当前连接最少的服务器
每个请求访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题,但是ip_hash会造成负载不均,有的服务接受多,有的服务请求接受少,所以不建议采用ip_hash模式,session共享问题可用后端服务的sessin共享代替nginx的ip_hash
按后端服务器的响应时间来分配请求,响应时间端的优先分配
基于用户请求的url做hash,和ip_hash算法类似,是对每个请求按url的hash结果分配,使每个URL定向到同一个后端服务器,但是也会造成分配不均的问题,这种模式后端服务器为缓存时相对较好
Nginx配置反向代理的主要参数
upstream 服务池名 {}
配置后端服务器池,以提供响应数据
proxy_pass http://服务池名
配置将访问请求转发给后端服务器池的服务器池的服务器处理
动静分离原理
服务端接收来自客户端的请求中,既有静态资源也有动态资源,静态资源由Nginx提供服务,动态资源Nginx转发至后端
Nginx静态处理优势
Nginx处理静态页面的效率远高于Tomcat的处理能力
若Tomcat的请求量为1000次,则Nginx的请求量为6000次
Tomcat每秒的吞吐量为0.6M,Nginx的每秒吞吐量为3.6M
Nginx处理静态资源的能力时Tomcat处理的6倍
systemctl stop firewalld
setenforce 0
yum install -y gcc gcc-c++ make pcre-devel zlib-devel
cd nginx-1.20.2/
./configure \ #编译配置
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module
make && make install #编译配置
vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid #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
添加跳转的地址池
在http模块中添加这一段
upstream tomcat_server { 配置负载均衡地址池
35 server 192.168.50.128:8080 weight=1; weight为权重的意思
36 server 192.168.50.128:8081 weight=1;
37 server 192.168.50.168:8080 weight=1;
38 }
39
40 server {
41 listen 80;
42 server_name localhost;
43
44 charset utf-8;
设置动态跳转和本地静态图片请求
location ~ .*\.(gif|jpg|jpeg|png|bmp)$ {
48 root html/img/; 跳转到图片img目录
49 expires 5d; 缓存记录保持5天
50 }
51 location ~ .*\.jsp$ {
52 proxy_pass http://tomcat_server; 跳转到地址池的地址
53 proxy_set_header HOST $host;
54 proxy_set_header X-Real-IP $remote_addr; 把$remote_addr赋值给X-Real-IP,获取IP
55 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 让nginx记录访问的IP
56
57 }
创建一个img目录,放入图片.
在192.168.50.128服务器上部署两个tomcat服务,在上面的多实例部署中已进行过部署,以那台机器作为基础,进行配置
mkdir /usr/local/tomcat1/webapps/boss 创建第一个测试目录
vim /usr/local/tomcat1/webapps/boss/index.jsp 编写这个动态页面文件内容
?ge language="java" import="java.util.*" pageEncoding="UTF-8"%>
JSP test1 page
<% out.println("此为动态测试页面1 www.boss.com");%>
在这台机器的另一个tomcat2的动态页面内容编写
mkdir /usr/local/tomcat2/webapps/zxc
vim /usr/local/tomcat2/webapps/zxc/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
JSP test1 page
<% out.println("此为动态测试页面2 www.zxc.com");%>
本台tomcat1服务的主配置文件修改
vim /usr/local/tomcat1/conf/server.xml
本台tomcat1服务的主配置文件修改
/usr/local/tomcat1/bin/shutdown.sh
/usr/local/tomcat1/bin/startup.sh
/usr/local/tomcat2/bin/shutdown.sh
/usr/local/tomcat2/bin/startup.sh
在服务器192.168.50.168上安装一个tomcat服务
systemctl stop firewalld 关闭防火墙
setenforce 0
rpm -ivh jdk-8u201-linux-x64.rpm
vim /etc/profile.d/java.sh #新建文件
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$PATH
source /etc/profile.d/java.sh #刷新变量
java -version
Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
mkdir /usr/local/tomcat/webapps/test
vim /usr/local/tomcat/webapps/test/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
JSP test2 page
<% out.println("此为动态测试页面3 www.qwer.com");%>
重新启动服务
/usr/local/tomcat/shutdown.sh
/usr/local/tomcat/startup.sh
输入图片地址,图片自动跳转到/img目录下
输入192.168.50.158/index.jsp
显示动态页面
输入192.168.50.158/index.jsp
每次刷新页面,都是通过不同的tomcat服务显示,说明负载均衡配置成功;权重相同随机显示
通过上述两个示例,可以初步了解到Nginx和Tomcat组合使用实现负载均衡和动静分离的状态,在生产环境当中,也是经常需要使用的,可以充分发挥nginx和tomcat的优势,动静分离的使用大大减少了nginx和tomcat的工作时长,且负载均衡的使用更是减少了服务器的一个运行压力,应对高并发是很好的一个方法