部署Tomcat及其负载均衡Tomcat介绍Apache Tomcat简称 Tomcat是由 Apache 软件基金会开发和维护的一个开源、轻量级的 Web 应用服务器和 Servlet 容器。它主要用于部署和运行基于 Java 的 Web 应用程序是 Java Web 开发领域中最核心、最流行的组件之一。特点轻量级与高效相比于 WebLogic、WebSphere 等全功能的商业 Java EE 应用服务器Tomcat 更加轻量、启动速度快、资源占用少非常适合中小型项目或微服务架构。跨平台基于 Java 语言开发只要有 Java 运行环境JRE/JVM就可以在 Windows、Linux、macOS 等操作系统上无缝运行。开源免费采用 Apache 许可证发布完全免费且拥有庞大的开发者社区遇到问题极易找到解决方案。生态完善与 Spring、Spring Boot、MyBatis 等主流 Java 框架无缝集成。在微服务架构中Tomcat 常作为 Spring Boot 的默认内嵌容器。应用场景[三大web服务apacheNginx,Tomcat]1. Tomcat 的定位与特点Tomcat 是一款免费开源的轻量级 Web 应用服务器。它普遍应用于中小型系统、低并发场景是开发和调试 JSP 程序的首选。2. 核心功能与分工动态处理Tomcat 专门负责运行 JSP 页面和 Servlet。静态短板虽然 Tomcat 具备处理静态 HTML 的能力但性能不如 Apache 服务器。协作模式在实际应用中常由 Apache 负责处理静态 HTML 请求而 Tomcat 独立运行并处理动态请求。3. Java Servlet 的作用Java Servlet 是运行在服务器上的程序作为 Web 浏览器客户端与数据库或应用程序之间的中间层负责处理 HTTP 请求并生成动态响应。另外目前比较主流的 Java框架老的 SSM、新的 Spring 系列如SpringBoot SpringClou等Java企业级应用框架内置的一般来说都有Tomcat容器。一安装Tomcat环境准备主机环境采用 CentOS 7.9已配置阿里云 EPEL 的 yum 源curl-o/etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repocurl-o/etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo yum clean all yum makecache文件放在/usr/local/src/tomcat防火墙 firewalld 和 SELinux 均已禁用在测试环境中systemctl stop firewalld systemctl disable firewalld setenforce0sed-is/^SELINUXenforcing$/SELINUXdisabled//etc/selinux/config软件包版本文件名软件名称版本/规格用途说明apache-tomcat-9.0.48.tar.gzApache Tomcat9.0.48Web 服务器/容器。用于部署和运行 Java Web 应用程序如 .war 包。它是目前最流行的开源 Servlet 容器之一。jdk-8u261-linux-x64.tar.gzOracle JDK (Java Development Kit)8u261 (Linux 64位)Java 开发工具包。Tomcat 的运行依赖于 Java 环境JRE/JDK。这个包包含了编译和运行 Java 程序所需的核心库和虚拟机。二Tomcat架构二进制编译安装JDK创建文件并放入Tomcat的软件压缩包mkdir-pv/usr/local/src/tomcatcd/usr/local/src/tomcat安装JDK配置JAVA环境查看当前系统默认安装jdk版本java-version*如果有的话需要配置你的PATH环境变量确定使用哪个版本的JDK需要解决JDK优先级的问题比如系统中安装了多个JDK的版本JDK8JDK11,JDK20,如果你使用JDK20安装jdkcd/usr/local/src/tomcat/tar-zxvfjdk-8u261-linux-x64.tar.gzmvjdk1.8.0_261 /usr/local/java配置环境变量cat/etc/profileEOF export JAVA_HOME/usr/local/java export JRE_HOME${JAVA_HOME}/jre export CLASSPATH.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH${JAVA_HOME}/bin:$PATH EOF让修改后的环境变量配置立即生效source/etc/profile验证java-versionjavac-version注卸载系统默认jdk,卸载openjdk相关软件包即可三安装Tomcatcd/usr/local/src/tomcat/tar-zxvfapache-tomcat-9.0.48.tar.gzmvapache-tomcat-9.0.48 /usr/local/tomcatls/usr/local/tomcat/注在开启状态tomcat状态下可以查看是否安装成功cd /usr/local/tomcat/binpsaux|greptomcat jps-vjps-ljpsTomcat目录说明目录名称核心功能描述关键文件/子目录bin存放启动和关闭 Tomcat 的脚本程序。configtest.sh (检测配置)startup.sh (启动)shutdown.sh (关闭)conf存放 Tomcat 服务器的各种全局配置文件。server.xml (主配置含 Host 配置)web.xml (应用部署描述符)lib存放 Tomcat 服务器运行所需的各类 jar 包库文件。-logs存放 Tomcat 运行时产生的日志文件。-temp存放 Tomcat 运行时产生的临时文件。-webappsTomcat 默认存放应用程序Web App的目录。(类似 Apache 的 /var/www/html)docs: Tomcat 文档examples: 自带的示例程序host-manager: 主机管理应用manager: 管理应用ROOT: 应用的根目录直接访问 IP:Port 时展示的内容work用于存放 JSP 应用在部署或运行时编译后生成的 .class 文件。-启动测试开启tomcatcd/usr/local/tomcat/bin/ ./startup.sh1. 查看tomcat运行netstat-anpt|grep80802.测试ip地址8080端口号3.关闭tomcatcd/usr/local/tomcat/bin/ ./shutdown.sh注如果你的tomcat端口号和别的服务冲突了请修改端口号sudofind/-nameserver.xml找到server.xml这个文件进行编辑找到修改 Connector 进行修改修改 Connector 端口修改完之后进行重启./shutdown.sh ./startup.sh4创建服务脚本1. 创建服务脚本可使用service命令chkconfig命令对tomcat管理cat/etc/init.d/tomcatEOF #!/bin/bash #chkconfig: 35 86 89 #description: Apache Tomcat version 9.0 web applications and web services. TOMCATBIN/usr/local/tomcat/bin/catalina.sh export JAVA_HOME/usr/local/java start(){ $TOMCATBIN start } stop(){ $TOMCATBIN stop } restart(){ stop start } status(){ if \[ -f /var/run/tomcat.pid \];then echo tomcat is running else echo tomcat is not run fi } configtest(){ $TOMCATBIN configtest } case $1 in start) start;; stop) stop;; restart) restart;; status) status;; configtest) configtest;; \*) echo {start|stop|restart|configtest|status} esac EOF添加服务及管理chmod700 /etc/init.d/tomcatchkconfig--addtomcatchkconfigtomcat onservicetomcat start配置文件server.xml说明节点名称层级/数量核心作用关键属性/参数说明Server顶层 / 仅1个Tomcat 服务器的根元素。代表整个 Tomcat 实例。• port: 监听关闭请求的端口用于接收 shutdown 命令。• shutdown: 发送到上述端口的关闭指令字符串。ServiceServer 下 / 多个服务集合。包含一个 Engine 和多个 Connector负责处理客户端请求。可理解为开启多个线程监听不同端口。• name: 指定 Service 的名称。(启动停止)ConnectorService 下 / 多个连接器。负责建立客户端与服务端的连接监听特定端口。• port: 监听端口如 HTTP 默认 8080生产环境常用 80。• protocol: 传输协议如 HTTP/1.1。• connectionTimeout: 连接超时时间毫秒。• redirectPort: 收到 SSL 请求时重定向的端口如 8443。EngineService 下 / 仅1个请求处理引擎。处理来自 Connector 的请求并将其分发给对应的 Host。• name: 引擎名称。• defaultHost: 默认主机名必须匹配某个 Host 节点的 name当请求的主机名无法匹配时使用。HostEngine 下 / 多个虚拟主机。对应网络上的一个域名或 IP实现单 IP 多域名部署。• name: 虚拟主机名需 DNS 解析指向该 IP。• appBase: Web 应用程序的根目录如 webapps站点文件夹需放在此目录下。ContextHost 下 / 多个Web 应用上下文。定义具体的虚拟目录或默认站点。• path: 访问的虚拟路径URL 中的路径如 /aa。• docBase: 应用程序的实际物理路径。• reloadable: 若为 true自动检测 WEB-INF/lib 和 classes 变化并热加载无需重启。Logger全局或局部日志配置。控制 Tomcat 运行日志的记录方式。• className: 日志实现类需实现 Logger 接口。• prefix/suffix: 日志文件名的前缀和后缀。• timestamp: 是否在文件名中加入时间戳。Value(通常指 Valve)访问日志/过滤器。类似 Logger但更侧重于记录请求细节如 Access Log。• directory: 日志存放位置。• pattern: 记录格式。- common: 记录主机、用户、时间、请求行、状态码、字节数。- combined: 比 common 记录更多信息通常包含 Referer 和 User-Agent。四基于域名虚拟web主机1.配置域名vim/etc/hosts192.168.30.153[www.yxl.com](http://www.yxl.com)2.建立java web站点目录mkdir-pv/web/webapp3.编辑java网页cat/web/webapp/index.jsp‘EOF’% pagelanguage“java”import“java.util.*”pageEncoding“UTF-8”%htmlheadtitlejava web page/title/headbody% out.println(“welcom totestsite,tomcat”);%/body/htmlEOF五配置tomcat备份cp-av/usr/local/tomcat/conf/server.xml /opt/server.xml.ori#修改tomcat主配置文件server.xml文件vim/usr/local/tomcat/conf/server.xml.........#找到Host节点,修改主机名name为域名Hostnamewww.yxl.comappBasewebappsunpackWARstrueautoDeploytrue#添加下面内容ContextdocBase“/web/webapp”path“”reloadable“false”/Context注;xmllint --noout /usr/local/tomcat/conf/server.xml检查xml是否有错误重启tomcatservicetomcat restart /usr/local/tomcat/bin/shutdown.sh /usr/local/tomcat/bin/startup.sh测试在修改主机的hosts文件添加IP和域名打开 hosts 文件右击管理员记事本中点击 文件 - 打开。在地址栏输入以下路径并回车C:\\Windows\\System32\\drivers\\etc打开 hosts 文件在修改主机的hosts文件添加IP和域名www.yxl.com:8080在复制一份原来的就可以域名和IP都可以访问NginxTomcat负载均衡架构使用3台服务器主机IP地址主要软件Nginx服务器192.168.30.153nginx-1.16.1.tar.gzmysql-5.7.32-el7-x86_64php-7.3.9Tomcat服务器1192.168.30.154jdk-8u261-linux-x64.tar.gzapache-tomcat-9.0.48.tar.gzTomcat服务器2192.168.30.155jdk-8u261-linux-x64.tar.gzapache-tomcat-9.0.48.tar.gz源-阿里云和epel源关闭防火墙和selinux项目需求解决单实例服务扩展为多实例单实例单应用 一个tomcat一个web站点单实例多应用 一个tomcat多个web站点多实例单应用 多个tomcat同一个web站点Nginx负载均衡实现为了测试效果对两台tomcat的站点访问的内容进行差异化修改①tomcat服务器1-192.168.30.154配置域名vim/etc/hosts192.168.30.154[www.yxl2.com](http://www.yxl.com)#在前面配置好Tomcat和虚拟主机并无误的情况下#cat/web/webapp/test.jsp‘EOF’htmlheadtitleHello World/title% pagelanguage“java”contentType“text/html;charsetUTF-8”pageEncoding“UTF-8”%/headbodyHello 我是tomcat -yxl1br/% out.println(Your IP address is request.getRemoteAddr());%/body/htmlEOFcat/web/webapp/test.jsp②tomcat服务器2-192.168.30.155配置域名vim/etc/hosts192.168.30.155[www.yxl2.com](http://www.yxl.com)#在前面配置好Tomcat和虚拟主机并无误的情况下#cat/web/webapp/test.jsp‘EOF’htmlheadtitleHello World/title% pagelanguage“java”contentType“text/html;charsetUTF-8”pageEncoding“UTF-8”%/headbodyHello 我是tomcat -yxl2br/% out.println(Your IP address is request.getRemoteAddr());%/body/htmlEOFcat/web/webapp/test.jsp③LNMP服务器-192.168.30.153修改lnmp的配置文件vim/usr/local/nginx/conf/nginx.conf负载均衡效果测试upstream tomcat_server{server192.168.30.154:8080weight1;server192.168.30.155:8080weight1;}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;}使用lnmp的域名访问Tomcat的测试文件www.yxl.com/test.jspCtrlF5 强制刷新测试负载均衡