东方通TongWeb企业级部署实战:从零搭建高可用Web应用平台

📅 发布时间:2026/7/3 13:21:41 👁️ 浏览次数:
东方通TongWeb企业级部署实战:从零搭建高可用Web应用平台
1. 为什么选择东方通TongWeb不只是“国产”那么简单很多朋友第一次听说东方通TongWeb第一反应可能是“哦国产的Web应用服务器”。我刚开始接触时也这么想但真正在企业里用起来尤其是在几个核心生产系统上跑过之后才发现它的价值远不止“国产替代”这个标签。我经历过从零开始搭建、配置、优化再到处理线上故障的全过程今天就想把这些实战经验掰开揉碎了分享给你让你在部署时少走弯路。简单来说TongWeb是一个对标WebLogic、WebSphere这类老牌产品的企业级Java EE应用服务器。但它的优势在于它更懂国内企业的“水土”。比如很多国企、金融机构的内部系统对加密算法、国密标准有硬性要求TongWeb从底层就提供了原生支持你不用再到处找插件、打补丁部署起来省心太多。再比如它的管理控制台是全中文的文档和错误提示也非常本地化这对于运维团队来说学习成本和排错效率的提升是实实在在的。我印象很深的一个项目是给一个中型电商平台做架构升级。原来的单体应用跑在Tomcat上平时还好一到促销就各种连接池耗尽、内存溢出。后来我们迁移到TongWeb充分利用了它的连接池管理和内存动态回收机制。同样是那台物理机并发处理能力提升了将近40%而且后台的管理界面能非常直观地看到线程、连接、缓存的使用情况问题定位快多了。所以如果你正在为Tomcat难以应对复杂企业级场景而头疼或者觉得WebLogic这类产品过于笨重且授权费用高昂那么TongWeb是一个非常值得深入考察的“实力派”选手。2. 部署前的“战前准备”环境与资源规划兵马未动粮草先行。部署TongWeb之前把环境理清楚能避免后面一大堆莫名其妙的坑。这里我结合自己踩过的雷给你列一份详细的清单。2.1 硬件与操作系统选择官方文档会列出支持的操作系统列表比如主流Linux发行版CentOS、RedHat、Ubuntu和Windows Server。我的强烈建议是选择Linux尤其是CentOS 7.x或RHEL 8.x这类企业级常用的稳定版本。在Linux上TongWeb的性能表现更稳定也更方便做脚本化运维和自动化部署。硬件配置没有固定公式取决于你的应用。我提供一个经验性的参考对于一个用户量在几千级别的内部管理系统4核CPU、8GB内存、100GB SSD磁盘的虚拟机起步是足够的。但如果你的应用涉及大量计算、高并发或频繁的磁盘IO那就得加码。内存是关键Java应用服务器都是“内存大户”。除了给JVM堆内存比如-Xmx4g还要为系统本身、线程栈、直接内存等留出余量。我一般会预留总内存的20%给操作系统和其他进程。这里有个细节检查服务器的最大文件打开数ulimit -n。默认的1024对于Web服务器来说太低了并发一上来就会报“Too many open files”错误。我通常在部署前就会把它调到65535或更高。# 编辑limits.conf文件 vim /etc/security/limits.conf # 在文件末尾添加 * soft nofile 65535 * hard nofile 65535 # 重启会话后生效2.2 软件依赖与权限检查TongWeb需要Java环境。注意不是随便一个JDK版本都行。一定要根据你下载的TongWeb版本确认其官方支持的JDK版本。比如TongWeb 7.0可能要求JDK 1.8而更新的版本可能支持JDK 11或17。我推荐使用Oracle JDK或者OpenJDK的稳定发行版并通过JAVA_HOME环境变量配置好。接下来是用户权限。绝对不要用root用户直接运行TongWeb这既是安全规范也能避免一些因权限过高导致的诡异问题。你应该创建一个专门的系统用户例如tongweb用来运行和管理TongWeb进程。# 创建用户组和用户 groupadd tongweb useradd -g tongweb tongweb # 将TongWeb安装目录的所有权赋予该用户 chown -R tongweb:tongweb /opt/TongWeb最后确保服务器的防火墙如firewalld或iptables已经放行了TongWeb需要使用的端口。默认的HTTP端口是8080管理控制台端口是9060HTTPS端口是8443。如果你打算用集群还要预留出节点间通信的端口。3. 从安装到第一个“Hello World”手把手实战安装包到手我们开始实操。整个过程其实不复杂但有几个关键选择会影响后续的管理。3.1 安装模式图形化还是静默安装如果你在Windows服务器上或者Linux服务器配备了桌面环境图形化安装向导是最简单的点点鼠标下一步就行。但在真实的服务器环境我们99%的情况是通过SSH远程操作没有图形界面。所以掌握静默安装是必备技能。静默安装需要一个响应文件response file这个文件其实记录了图形化安装过程中你所有选择的参数。TongWeb安装包通常自带一个模板比如responsefile.txt。你需要编辑它指定安装路径、JDK路径、端口号等。# 假设安装包和响应文件都在当前目录 # 给予安装脚本执行权限 chmod x TongWebInstall.bin # 执行静默安装 ./TongWebInstall.bin -f responsefile.txt -i silent安装完成后主要目录结构是这样的bin/启动、停止脚本startserver.sh,stopserver.sh就在这里。conf/这是核心目录所有服务器配置像server.xml、web.xml都在这里。logs/所有运行日志、访问日志、应用日志的存放地出了问题第一个要来的地方。webapps/默认的应用部署目录你把WAR包丢进去就行。3.2 首次启动与验证安装完别急着欢呼先启动看看。切换到bin目录用之前创建的tongweb用户来启动。su - tongweb cd /opt/TongWeb/bin ./startserver.sh启动成功后别只用ps看看进程是否存在就完事了。一定要做双重验证检查启动日志立刻去logs目录下查看server.log或stdout.log搜索“Server startup in”或“TongWeb started successfully”这样的关键字确保没有ERROR级别的报错。实际访问测试用另一台机器的浏览器访问http://你的服务器IP:8080。如果能看到TongWeb的默认欢迎页面那才算是真正安装成功。这里有个小技巧启动脚本startserver.sh默认是在前台运行的会占用你的终端。对于生产环境我们需要它后台运行。可以加-d参数或者直接用nohup命令。./startserver.sh -d # 以后台守护进程方式启动 # 或者 nohup ./startserver.sh ../logs/startup.out 21 4. 打造坚固堡垒基础安全与关键配置服务器跑起来了但默认配置就像毛坯房没法直接住人。接下来这几步配置是保证系统稳定和安全的基础一定要做。4.1 改掉默认端口和禁用管理控制台用默认的8080和9060端口相当于告诉潜在的攻击者“我这里有个Web服务器快来试试”。修改默认端口是安全加固的第一步。编辑conf/server.xml文件找到Connector标签。!-- 修改HTTP连接器端口比如从8080改为18080 -- Connector port18080 protocolHTTP/1.1 ... / !-- 修改AJP连接器端口如果用的话 -- Connector port8009 protocolAJP/1.3 ... /更激进一点的安全策略是在生产环境直接禁用通过外网访问管理控制台。你可以在conf/server.xml里将管理控制台的Connector的address属性绑定到本地回环地址。Connector port9060 protocolHTTP/1.1 address127.0.0.1 ... /这样管理控制台只能从服务器本机访问你需要先SSH到服务器再使用本地端口转发或浏览器访问127.0.0.1:9060安全性大大提升。4.2 配置应用部署目录和日志轮转我不喜欢把应用直接扔到webapps目录下因为和TongWeb自身的文件混在一起不好管理。我习惯在TongWeb目录外单独建立一个/data/apps目录然后在server.xml里配置一个独立的Host和Context。Host namemyapp.yourcompany.com appBase/data/apps unpackWARstrue autoDeploytrue Context path docBasemy-application reloadablefalse/ /Host这样你的应用代码和TongWeb运行时彻底分离升级、备份、回滚都清晰明了。日志管理是运维的生命线。TongWeb默认的日志不会自动切割时间长了会生成一个巨大的文件既占磁盘又难以查看。一定要配置日志轮转Log Rotation。你可以使用Linux自带的logrotate工具为logs目录下的*.log文件配置策略比如按天切割、保留30天。# /etc/logrotate.d/tongweb /opt/TongWeb/logs/*.log { daily rotate 30 compress delaycompress missingok notifempty create 644 tongweb tongweb postrotate # 如果需要可以发送信号给TongWeb重新打开日志文件 # kill -USR1 cat /opt/TongWeb/bin/pidfile endscript }5. 从单点走向集群高可用架构实战单机部署只能应对小场景企业级应用的核心诉求就是高可用和可扩展。用TongWeb搭建集群是实现这个目标的标准路径。5.1 集群架构选型Session如何同步TongWeb支持多种集群架构最常见的是“负载均衡器 多个TongWeb实例”的模式。这里的关键在于Session会话保持。用户第一次访问被分到服务器A他的登录状态Session存在A上下次请求如果被分到服务器BB不认识他用户体验就断了。有几种解决方案Session复制TongWeb节点间通过组播Multicast或TCP直连自动将Session变更同步到所有其他节点。配置简单但网络开销大节点越多性能下降越明显适合小规模集群比如2-4个节点。集中式Session存储把Session存到外部的集中缓存里比如Redis。所有TongWeb节点都从这个缓存读写Session。这是目前最主流、扩展性最好的方案集群节点可以轻松水平扩展。粘性Session会话保持在负载均衡器如Nginx、F5上配置让同一个用户的请求始终转发到同一个后端TongWeb节点。这种方式简单但节点故障时该节点上所有用户的Session都会丢失。我个人的选择是对于新项目直接用Redis存储Session。虽然引入了一个外部组件但换来的是架构的清晰和极强的扩展性。TongWeb可以通过配置context.xml集成标准的Tomcat Redis Session Manager来实现。5.2 一步步搭建一个双节点集群假设我们有两台服务器server1 (192.168.1.101)和server2 (192.168.1.102)。第一步基础安装与配置在两台服务器上按照前面的步骤完全独立地安装好TongWeb确保它们都能单独启动并访问。安装路径和配置可以保持一致减少管理复杂度。第二步配置集群通信编辑每台服务器的conf/server.xml在Engine或Host层级下添加Cluster配置。这里以使用简单的组播复制为例Cluster classNameorg.apache.catalina.ha.tcp.SimpleTcpCluster Manager classNameorg.apache.catalina.ha.session.DeltaManager expireSessionsOnShutdownfalse notifyListenersOnReplicationtrue/ Channel classNameorg.apache.catalina.tribes.group.GroupChannel Membership classNameorg.apache.catalina.tribes.membership.McastService address228.0.0.4 port45564 frequency500 dropTime3000/ Receiver classNameorg.apache.catalina.tribes.transport.nio.NioReceiver addressauto port4000 !-- 确保此端口防火墙已开放 -- autoBind100 selectorTimeout5000 maxThreads6/ Sender classNameorg.apache.catalina.tribes.transport.ReplicationTransmitter Transport classNameorg.apache.catalina.tribes.transport.nio.PooledParallelSender/ /Sender Interceptor classNameorg.apache.catalina.ha.tcp.ReplicationValve/ Interceptor classNameorg.apache.catalina.ha.tcp.MessageDispatch15Interceptor/ /Channel Valve classNameorg.apache.catalina.ha.tcp.ReplicationValve filter/ ClusterListener classNameorg.apache.catalina.ha.session.JvmRouteSessionIDBinderListener/ /Cluster关键点address是组播地址同一个集群内的节点必须相同port是接收器端口确保防火墙允许节点间这个端口的通信。第三步配置负载均衡器以Nginx为例一个简单的配置如下upstream tongweb_cluster { # 配置会话保持这里使用ip_hash同一IP的客户端固定访问一个后端 ip_hash; server 192.168.1.101:18080 weight3; server 192.168.1.102:18080 weight2; } server { listen 80; server_name yourdomain.com; location / { proxy_pass http://tongweb_cluster; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }这里用了ip_hash做简单的会话保持。更优的做法是使用Nginx的sticky模块或者搭配Redis Session方案。第四步部署应用与测试将你的Web应用WAR包同时部署到两个节点的相同路径下比如webapps目录。然后通过Nginx的地址yourdomain.com访问应用。你可以尝试登录系统然后关闭其中一个TongWeb节点观察用户会话是否还能保持如果配置了Session复制或集中存储或者刷新页面是否会被切换到另一个节点如果负载均衡器处理得当。6. 性能调优让TongWeb“飞”起来默认配置是通用的但未必最适合你的业务。调优就是“量体裁衣”的过程。6.1 JVM内存与垃圾回收优化这是性能影响最大的一块。不要拍脑袋设置-Xmx最大堆内存。我建议先用默认配置跑一段时间通过jstat或TongWeb的管理控制台监控GC垃圾回收情况。# 查看进程PID jps -l # 监控GC情况每2秒输出一次共输出10次 jstat -gcutil pid 2000 10关注FGCFull GC次数和FGCTFull GC时间。如果FGC频繁发生且每次时间很长说明堆内存设置太小或者存在内存泄漏。一个针对Web应用的中等规模配置参考# 在bin目录下的setenv.sh如果没有就创建中设置 JAVA_OPTS$JAVA_OPTS -server -Xms4g -Xmx8g # 初始堆和最大堆 JAVA_OPTS$JAVA_OPTS -XX:MetaspaceSize256m -XX:MaxMetaspaceSize512m # 元空间 JAVA_OPTS$JAVA_OPTS -XX:UseG1GC # 使用G1垃圾回收器对多核大内存机器友好 JAVA_OPTS$JAVA_OPTS -XX:MaxGCPauseMillis200 # 目标最大GC停顿时间 JAVA_OPTS$JAVA_OPTS -XX:PrintGCDetails -XX:PrintGCDateStamps -Xloggc:/opt/TongWeb/logs/gc.log # 输出GC日志切记-Xms和-Xmx设置成相同值可以避免堆内存动态调整带来的性能波动。6.2 连接器与线程池调优TongWeb处理HTTP请求的Connector其底层是线程池。编辑conf/server.xml找到HTTP的Connector配置Connector port18080 protocolHTTP/1.1 connectionTimeout20000 maxThreads500 !-- 最大工作线程数根据CPU核心数和业务IO等待时间调整 -- minSpareThreads50 !-- 最小空闲线程数 -- acceptCount100 !-- 等待队列长度当所有线程忙时新请求在此排队 -- maxConnections10000 !-- 最大连接数 -- compressionon compressionMinSize1024 compressableMimeTypetext/html,text/xml,text/css,application/json,application/javascript redirectPort8443 /maxThreads不是越大越好。设置过高会导致线程上下文切换开销剧增。一个参考公式是CPU核心数 * (1 平均IO等待时间/平均CPU计算时间)。对于典型的Web应用200-500是一个常见范围。acceptCount等待队列。当线程池满了新请求在这里排队。设置太小会导致连接被立即拒绝设置太大排队请求等待时间过长用户体验差。compression开启GZIP压缩对文本类响应HTML, JS, CSS, JSON效果显著能大幅减少网络传输量。7. 监控与日常维护让运维心中有数系统上线只是开始持续的监控和维护才是保障。7.1 利用内置管理控制台TongWeb的管理控制台默认localhost:9060是个宝库。登录后重点关注“状态”或“监控”页面JVM内存使用情况实时图表看堆内存、非堆内存的使用趋势。线程池状态当前活动线程数、繁忙线程数判断maxThreads设置是否合理。数据源连接池如果配置了数据库连接池这里可以看到活跃连接、空闲连接数帮助发现连接泄漏。请求统计请求量、错误率、平均响应时间是应用健康度的直接体现。我习惯每天上班第一件事和下班前都快速浏览一下这些面板对系统的状态有个基本把握。7.2 日志分析与告警配置日志不是出问题了才看。要建立日志分析的例行机制。访问日志(logs/access_log*.txt)分析流量来源、高峰时段、慢请求可以配置记录响应时间。应用日志你自己的应用打的日志这是排查业务逻辑问题的关键。服务器日志(logs/server.log)关注WARN和ERROR级别信息。对于生产环境一定要配置日志告警。可以用ELKElasticsearch, Logstash, Kibana或Graylog搭建日志中心然后设置规则比如当server.log中5分钟内出现超过10个ERROR或者当某个URL的平均响应时间超过3秒就自动发送告警通知邮件、钉钉、企业微信。7.3 备份与升级策略备份三要素配置文件、应用代码、数据。配置文件conf目录整个备份。每次修改配置前先复制一份。应用代码你的WAR包或部署目录。数据如果Session存在Redis备份Redis如果有文件上传备份上传目录。我推荐一个简单的备份脚本结合crontab定期执行#!/bin/bash BACKUP_DIR/backup/tongweb DATE$(date %Y%m%d_%H%M%S) # 1. 备份配置 tar -czf $BACKUP_DIR/conf_$DATE.tar.gz /opt/TongWeb/conf # 2. 备份应用假设应用在webapps下 tar -czf $BACKUP_DIR/apps_$DATE.tar.gz /opt/TongWeb/webapps/your-app # 3. 备份启动脚本等 tar -czf $BACKUP_DIR/bin_$DATE.tar.gz /opt/TongWeb/bin/*.sh # 4. 保留最近7天的备份 find $BACKUP_DIR -name *.tar.gz -mtime 7 -delete升级TongWeb版本这是一个需要谨慎对待的操作。务必先在测试环境完整验证。升级步骤通常是1) 完整备份现有环境2) 停止服务3) 解压新版本到新目录4) 将旧版本的conf目录、webapps目录或你的应用目录、以及bin目录下的自定义脚本如setenv.sh复制到新目录5) 启动新版本服务并进行全面测试。