Ubuntu Tomcat集群部署最佳实践
在所有集群节点(Ubuntu服务器)上执行以下操作,确保环境一致性:
java -version
验证;/opt/tomcat
),避免版本差异导致的问题;sudo apt-get install ntp
,并编辑/etc/ntp.conf
添加公共NTP服务器)。修改每个Tomcat实例的conf/server.xml
文件,核心配置如下:
<Engine>
标签内添加<Cluster>
元素,配置通信组播地址、端口及接收器端口(如address="228.0.0.4"
、port="45564"
、port="4000"
);DeltaManager
管理会话(expireSessionsOnShutdown="false"
表示关闭时不清除会话,notifyListenersOnReplication="true"
表示复制时通知监听器);<Channel>
标签配置通信通道,添加TcpFailureDetector
(检测节点故障)、MessageDispatchInterceptor
(优化消息分发)等拦截器,提升集群稳定性。DeltaManager
实现会话同步,适用于节点数较少(<10台)的场景,配置<distributable/>
标签(在应用的web.xml
中)标记应用支持分布式;<Manager>
替换为PersistentManager
,并配置缓存连接(如Redis的JedisPool
),提升会话共享性能与扩展性。使用Nginx或HAProxy作为外部负载均衡器,避免单点故障:
http
块中定义upstream
(如upstream myapp { server 192.168.1.100:8080; server 192.168.1.101:8080; }
),在server
块中通过proxy_pass
将请求转发至upstream
;sticky_session
(如Nginx的ip_hash
指令或HAProxy的cookie
指令),确保同一用户请求始终转发至同一节点(避免会话丢失);配置健康检查(如Nginx的ngx_http_health_check_module
),自动剔除故障节点。rsync
同步webapps
、conf
目录),当主实例宕机时,备用实例立即接管服务。catalina.out
、localhost_access_log
及Nginx的访问日志,通过ELK(Elasticsearch+Logstash+Kibana)堆栈进行分析,快速定位问题;server.xml
中注释掉AJP协议(若无需使用),关闭Tomcat管理界面的默认访问(如修改conf/tomcat-users.xml
中的角色权限,仅允许管理员访问);ssl_certificate
与ssl_certificate_key
指令,避免数据泄露;ufw
或iptables
限制访问源IP,防止非法入侵。