一、中间件集群概述
中间件集群是将多个中间件服务器实例组合在一起,通过负载均衡和故障转移机制,提供高可用性和可扩展性的应用服务。在企业IT环境中,中间件集群是保障业务连续性的重要基础设施。
中间件集群的核心优势包括:高可用性、负载均衡、可扩展性、故障转移、会话复制等。通过合理的集群配置,可以确保应用服务在单点故障情况下仍能正常运行,同时能够根据业务负载动态调整资源。
学习交流加群风哥微信: itpux-com,在FGedu企业的中间件架构中,我们主要使用WebLogic、WebSphere和Tomcat三种中间件,每种中间件都有其特定的集群配置方式。
二、集群架构设计
2.1 集群拓扑规划
合理的集群拓扑设计是确保系统稳定运行的基础,需要考虑网络架构、服务器分布、数据同步等多个方面。
集群名称:FGedu-App-Cluster
集群类型:混合集群(WebLogic + WebSphere + Tomcat)
网络规划:
– 管理网络:10.0.0.0/24
– 应用网络:10.0.1.0/24
– 数据网络:10.0.2.0/24
服务器规划:
– WebLogic集群(3节点)
– wls-node1: 10.0.1.11 (Admin Server + Managed Server)
– wls-node2: 10.0.1.12 (Managed Server)
– wls-node3: 10.0.1.13 (Managed Server)
– WebSphere集群(3节点)
– was-node1: 10.0.1.21 (Deployment Manager + App Server)
– was-node2: 10.0.1.22 (App Server)
– was-node3: 10.0.1.23 (App Server)
– Tomcat集群(4节点)
– tomcat-node1: 10.0.1.31
– tomcat-node2: 10.0.1.32
– tomcat-node3: 10.0.1.33
– tomcat-node4: 10.0.1.34
负载均衡:
– 前端负载均衡器:F5 Big-IP / HAProxy
– 后端负载均衡:WebLogic Proxy / WebSphere IHS
2.2 集群通信配置
集群节点之间的通信配置是确保集群正常工作的关键,需要配置组播地址、心跳检测、数据同步等参数。
组播配置:
– 组播地址:239.192.0.0
– 组播端口:7001
– TTL:32
心跳检测:
– 心跳间隔:5000ms
– 心跳超时:30000ms
– 故障检测次数:3次
会话复制:
– 复制模式:同步复制
– 复制触发:SET_AND_NON_PRIMITIVE_ATTRIBTUE
– 备份节点数:2
# 防火墙配置示例
$ firewall-cmd –permanent –add-rich-rule=’rule family=”ipv4″ source address=”10.0.1.0/24″ port protocol=”tcp” port=”7001-7010″ accept’
$ firewall-cmd –permanent –add-rich-rule=’rule family=”ipv4″ source address=”10.0.1.0/24″ port protocol=”udp” port=”7001″ accept’
$ firewall-cmd –reload
success
# 检查端口监听
$ netstat -tlnp | grep java
tcp 0 0 0.0.0.0:7001 0.0.0.0:* LISTEN 12345/java
tcp 0 0 0.0.0.0:8001 0.0.0.0:* LISTEN 12345/java
三、WebLogic集群配置
3.1 创建WebLogic集群
WebLogic集群由Admin Server和多个Managed Server组成,通过Admin Server统一管理集群配置。
# 使用Configuration Wizard创建域
# 命令行方式创建集群
$ cd /oracle/app/oracle/middleware/oracle_common/common/bin
$ ./wlst.sh
# 连接到Admin Server
wls:/offline> connect(‘weblogic’, ‘Fgedu@Wls123’, ‘t3://10.0.1.11:7001’)
Connecting to t3://10.0.1.11:7001 with userid weblogic …
Successfully connected to Admin Server “AdminServer” that belongs to domain “fgedu_domain”.
# 创建集群
wls:/fgedu_domain/serverConfig> create(‘FGeduCluster’, ‘Cluster’)
Cluster ‘FGeduCluster’ created successfully.
# 配置集群参数
wls:/fgedu_domain/serverConfig> cd(‘Clusters/FGeduCluster’)
wls:/fgedu_domain/serverConfig/Clusters/FGeduCluster> set(‘ClusterMessagingMode’, ‘unicast’)
wls:/fgedu_domain/serverConfig/Clusters/FGeduCluster> set(‘ClusterBroadcastChannel’, ‘ClusterBroadcast’)
# 创建Managed Server
wls:/fgedu_domain/serverConfig> create(‘ManagedServer1’, ‘Server’)
Server ‘ManagedServer1’ created successfully.
wls:/fgedu_domain/serverConfig> cd(‘Servers/ManagedServer1’)
wls:/fgedu_domain/serverConfig/Servers/ManagedServer1> set(‘ListenAddress’, ‘10.0.1.11’)
wls:/fgedu_domain/serverConfig/Servers/ManagedServer1> set(‘ListenPort’, 8001)
wls:/fgedu_domain/serverConfig/Servers/ManagedServer1> set(‘Cluster’, ‘FGeduCluster’)
# 创建更多Managed Server
wls:/fgedu_domain/serverConfig> create(‘ManagedServer2’, ‘Server’)
wls:/fgedu_domain/serverConfig> cd(‘Servers/ManagedServer2’)
wls:/fgedu_domain/serverConfig/Servers/ManagedServer2> set(‘ListenAddress’, ‘10.0.1.12’)
wls:/fgedu_domain/serverConfig/Servers/ManagedServer2> set(‘ListenPort’, 8001)
wls:/fgedu_domain/serverConfig/Servers/ManagedServer2> set(‘Cluster’, ‘FGeduCluster’)
# 保存配置
wls:/fgedu_domain/serverConfig> save()
Saving all your changes …
Saved all your changes successfully.
wls:/fgedu_domain/serverConfig> activate()
Activating all your changes, this may take a while …
The edit lock associated with this edit session is released
Activation completed
3.2 配置会话复制
WebLogic集群的会话复制确保用户会话在节点故障时不会丢失,提供无缝的用户体验。
# 配置集群会话复制参数
wls:/fgedu_domain/serverConfig> cd(‘Clusters/FGeduCluster’)
wls:/fgedu_domain/serverConfig/Clusters/FGeduCluster> set(‘ReplicationType’, ‘async’)
wls:/fgedu_domain/serverConfig/Clusters/FGeduCluster> set(‘MemberWarmupTimeoutSeconds’, 0)
wls:/fgedu_domain/serverConfig/Clusters/FGeduCluster> set(‘NumberOfServersInClusterAddress’, 3)
# 配置持久化存储(用于会话持久化)
wls:/fgedu_domain/serverConfig> cd(‘Servers/ManagedServer1’)
wls:/fgedu_domain/serverConfig/Servers/ManagedServer1> create(‘FGeduJDBCStore’, ‘JDBCStore’)
wls:/fgedu_domain/serverConfig/Servers/ManagedServer1/JDBCStore/FGeduJDBCStore> set(‘DataSource’, ‘FGeduDataSource’)
wls:/fgedu_domain/serverConfig/Servers/ManagedServer1/JDBCStore/FGeduJDBCStore> set(‘PrefixName’, ‘FGedu_’)
# 查看集群状态
$ curl -s -u weblogic:Fgedu@Wls123 http://10.0.1.11:7001/management/weblogic/latest/domainRuntime/clusterRuntimes/FGeduCluster
{
“name”: “FGeduCluster”,
“state”: “running”,
“servers”: [
{“name”: “ManagedServer1”, “state”: “RUNNING”, “health”: “HEALTH_OK”},
{“name”: “ManagedServer2”, “state”: “RUNNING”, “health”: “HEALTH_OK”},
{“name”: “ManagedServer3”, “state”: “RUNNING”, “health”: “HEALTH_OK”}
]
}
3.3 配置负载均衡代理
WebLogic提供了多种负载均衡方式,包括代理插件、硬件负载均衡器等。
# 安装mod_wl_ohs模块
$ cp /oracle/app/oracle/middleware/wlserver/server/plugin/linux/x86_64/mod_wl_ohs.so /etc/httpd/modules/
# 配置httpd.conf
LoadModule weblogic_module modules/mod_wl_ohs.so
WebLogicCluster 10.0.1.11:8001,10.0.1.12:8001,10.0.1.13:8001
MatchExpression *.jsp
MatchExpression *.do
MatchExpression /webapp/*
# 负载均衡算法
WebLogicCluster 10.0.1.11:8001,10.0.1.12:8001,10.0.1.13:8001
DynamicServerList ON
Debug ALL
DebugConfigInfo ON
WLLogFile /var/log/httpd/weblogic_proxy.log
WLTempDir /tmp
KeepAliveEnabled ON
KeepAliveSecs 20
ConnectTimeoutSecs 10
ConnectRetrySecs 2
# 重启Apache
$ systemctl restart httpd
$ systemctl status httpd
● httpd.service – The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled)
Active: active (running) since Fri 2026-04-03 10:00:00 CST; 5s ago
# 测试负载均衡
$ curl -I http://10.0.1.100/webapp/index.jsp
HTTP/1.1 200 OK
Date: Fri, 03 Apr 2026 02:00:00 GMT
Server: Apache/2.4.6
X-WebLogic-Cluster-Name: FGeduCluster
X-WebLogic-Cluster-Hash: 1234567890
四、WebSphere集群配置
4.1 创建WebSphere集群
WebSphere集群使用Deployment Manager进行集中管理,通过节点代理(Node Agent)管理各节点服务器。
$ cd /opt/IBM/WebSphere/AppServer/bin
$ ./wsadmin.sh -lang jython -user wasadmin -password Fgedu@Was123
# 连接到Deployment Manager
wsadmin> AdminConfig.getid(‘/Cell:fgeduCell/’)
‘fgeduCell(cells/fgeduCell|cell.xml#Cell_1)’
# 创建集群
wsadmin> clusterName = ‘FGeduWASCluster’
wsadmin> AdminConfig.create(‘ServerCluster’, AdminConfig.getid(‘/Cell:fgeduCell/’), ‘[[name ‘ + clusterName + ‘]]’)
‘FGeduWASCluster(cells/fgeduCell/clusters/FGeduWASCluster|cluster.xml#ServerCluster_1)’
# 添加集群成员
wsadmin> node1 = AdminConfig.getid(‘/Node:fgeduNode01/’)
wsadmin> node2 = AdminConfig.getid(‘/Node:fgeduNode02/’)
wsadmin> node3 = AdminConfig.getid(‘/Node:fgeduNode03/’)
wsadmin> AdminConfig.create(‘ClusterMember’, AdminConfig.getid(‘/ServerCluster:FGeduWASCluster/’), ‘[[memberName FGeduServer1] [node ‘ + node1 + ‘]]’)
wsadmin> AdminConfig.create(‘ClusterMember’, AdminConfig.getid(‘/ServerCluster:FGeduWASCluster/’), ‘[[memberName FGeduServer2] [node ‘ + node2 + ‘]]’)
wsadmin> AdminConfig.create(‘ClusterMember’, AdminConfig.getid(‘/ServerCluster:FGeduWASCluster/’), ‘[[memberName FGeduServer3] [node ‘ + node3 + ‘]]’)
# 保存配置
wsadmin> AdminConfig.save()
# 同步节点
wsadmin> AdminNodeManagement.syncActiveNodes()
# 启动集群
wsadmin> AdminClusterManagement.startSingleCluster(‘FGeduWASCluster’)
Starting cluster FGeduWASCluster …
Cluster FGeduWASCluster started successfully.
# 查看集群状态
$ /opt/IBM/WebSphere/AppServer/bin/serverStatus.sh -all
Server: FGeduServer1 Status: STARTED
Server: FGeduServer2 Status: STARTED
Server: FGeduServer3 Status: STARTED
4.2 配置动态集群
WebSphere动态集群可以根据负载自动调整服务器实例数量,实现弹性伸缩。
wsadmin> AdminConfig.create(‘DynamicCluster’, AdminConfig.getid(‘/Cell:fgeduCell/’),
‘[[name FGeduDynamicCluster] [minNumOfServers 2] [maxNumOfServers 10] [numOfVerticalInstances 1]]’)
# 配置自动伸缩策略
wsadmin> cluster = AdminConfig.getid(‘/DynamicCluster:FGeduDynamicCluster/’)
wsadmin> AdminConfig.create(‘AutoScalingPolicy’, cluster,
‘[[name FGeduScalingPolicy] [metricName CPU] [lowerThreshold 30] [upperThreshold 80] [coolDownPeriod 300]]’)
# 配置节点组
wsadmin> AdminConfig.create(‘NodeGroup’, AdminConfig.getid(‘/Cell:fgeduCell/’),
‘[[name FGeduNodeGroup] [description “FGedu Application Node Group”]]’)
# 添加节点到节点组
wsadmin> nodeGroup = AdminConfig.getid(‘/NodeGroup:FGeduNodeGroup/’)
wsadmin> AdminConfig.create(‘NodeGroupMember’, nodeGroup, ‘[[nodeName fgeduNode01]]’)
wsadmin> AdminConfig.create(‘NodeGroupMember’, nodeGroup, ‘[[nodeName fgeduNode02]]’)
wsadmin> AdminConfig.create(‘NodeGroupMember’, nodeGroup, ‘[[nodeName fgeduNode03]]’)
wsadmin> AdminConfig.save()
# 查看动态集群状态
$ curl -s -u wasadmin:Fgedu@Was123 http://10.0.1.21:9060/ibm/console/clusterStatus.do?cluster=FGeduDynamicCluster
Cluster Name: FGeduDynamicCluster
Current Size: 3
Min Size: 2
Max Size: 10
Status: Running
五、Tomcat集群配置
5.1 配置Tomcat集群会话复制
Tomcat集群通过DeltaManager或BackupManager实现会话复制,确保会话一致性。
# 在
# 配置web.xml – 启用会话复制
# 启动Tomcat集群节点
$ cd /opt/tomcat-node1/bin
$ ./startup.sh
Using CATALINA_BASE: /opt/tomcat-node1
Using CATALINA_HOME: /opt/tomcat
Using CATALINA_TMPDIR: /opt/tomcat-node1/temp
Using JRE_HOME: /usr/lib/jvm/java-11
Server startup in 3542 ms
# 查看集群日志
$ tail -f /opt/tomcat-node1/logs/catalina.out
INFO [Membership] org.apache.catalina.tribes.membership.McastService – Membership listener added.
INFO [Cluster] org.apache.catalina.ha.tcp.SimpleTcpCluster – Cluster is configured and started.
INFO [Cluster] org.apache.catalina.ha.session.DeltaManager – Starting clustering manager at /webapp
INFO [Cluster] org.apache.catalina.ha.session.DeltaManager – Manager [/webapp], skipping state transfer.
5.2 配置Nginx负载均衡
使用Nginx作为Tomcat集群的前端负载均衡器,实现请求分发和故障转移。
upstream fgedu_tomcat_cluster {
# 负载均衡算法:轮询(默认)
server 10.0.1.31:8080 weight=3;
server 10.0.1.32:8080 weight=2;
server 10.0.1.33:8080 weight=2;
server 10.0.1.34:8080 weight=1;
# 健康检查
keepalive 32;
}
server {
listen 80;
server_name app.fgedu.net.cn;
location / {
proxy_pass http://fgedu_tomcat_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;
proxy_set_header X-Forwarded-Proto $scheme;
# 会话粘性(可选)
proxy_cookie_path / /;
# 超时设置
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
# 健康检查端点
location /health {
access_log off;
return 200 “OK\n”;
}
}
# 高级负载均衡配置
upstream fgedu_tomcat_advanced {
# IP Hash会话粘性
ip_hash;
server 10.0.1.31:8080;
server 10.0.1.32:8080;
server 10.0.1.33:8080 backup;
# 最少连接算法
least_conn;
# 一致性哈希
hash $request_uri consistent;
}
# 测试Nginx配置
$ nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
# 重载Nginx配置
$ nginx -s reload
# 查看Nginx状态
$ systemctl status nginx
● nginx.service – nginx – high performance web server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled)
Active: active (running) since Fri 2026-04-03 10:00:00 CST; 1min ago
六、负载均衡配置
6.1 HAProxy负载均衡配置
HAProxy是高性能的负载均衡器,支持TCP和HTTP两种模式,适用于中间件集群的负载均衡。
global
log /dev/log local0
log /dev/log local1 notice
maxconn 4096
daemon
user haproxy
group haproxy
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
retries 3
# WebLogic集群前端
frontend weblogic_frontend
bind *:80
mode http
acl url_weblogic path_beg /webapp
use_backend weblogic_cluster if url_weblogic
default_backend weblogic_cluster
backend weblogic_cluster
balance roundrobin
option httpchk GET /webapp/health
http-check expect status 200
option http-server-close
option forwardfor
server wls1 10.0.1.11:8001 check inter 3000 rise 2 fall 3 weight 3
server wls2 10.0.1.12:8001 check inter 3000 rise 2 fall 3 weight 2
server wls3 10.0.1.13:8001 check inter 3000 rise 2 fall 3 weight 1
# WebSphere集群前端
frontend websphere_frontend
bind *:81
mode http
default_backend websphere_cluster
backend websphere_cluster
balance leastconn
option httpchk GET /health
cookie SERVERID insert indirect nocache
server was1 10.0.1.21:9080 check cookie was1
server was2 10.0.1.22:9080 check cookie was2
server was3 10.0.1.23:9080 check cookie was3
# Tomcat集群前端
frontend tomcat_frontend
bind *:82
mode http
default_backend tomcat_cluster
backend tomcat_cluster
balance source
hash-type consistent
option httpchk GET /health
server tc1 10.0.1.31:8080 check
server tc2 10.0.1.32:8080 check
server tc3 10.0.1.33:8080 check
server tc4 10.0.1.34:8080 check
# 统计页面
listen stats
bind *:8404
stats enable
stats uri /stats
stats refresh 10s
stats auth admin:Fgedu@Haproxy123
# 启动HAProxy
$ systemctl start haproxy
$ systemctl enable haproxy
# 查看HAProxy状态
$ systemctl status haproxy
● haproxy.service – HAProxy Load Balancer
Loaded: loaded (/usr/lib/systemd/system/haproxy.service; enabled)
Active: active (running) since Fri 2026-04-03 10:00:00 CST; 10s ago
# 访问统计页面
$ curl -s http://admin:Fgedu@Haproxy123@fgedudb:8404/stats | grep “weblogic_cluster”
weblogic_cluster BACKEND 0 0 0 3 6 3000 0 0
6.2 集群健康检查
定期对集群进行健康检查,及时发现和处理故障节点。
#!/bin/bash
# 文件名: cluster_health_check.sh
# WebLogic集群检查
check_weblogic_cluster() {
echo “=== WebLogic Cluster Status ===”
for server in wls1 wls2 wls3; do
ip=$(grep $server /etc/hosts | awk ‘{print $1}’)
status=$(curl -s -o /dev/null -w “%{http_code}” http://$ip:8001/webapp/health)
if [ “$status” == “200” ]; then
echo “$server ($ip): HEALTHY”
else
echo “$server ($ip): UNHEALTHY (HTTP $status)”
# 发送告警
echo “WebLogic server $server is unhealthy” | mail -s “WLS Alert” admin@fgedu.net.cn
fi
done
}
# WebSphere集群检查
check_websphere_cluster() {
echo “=== WebSphere Cluster Status ===”
/opt/IBM/WebSphere/AppServer/bin/serverStatus.sh -all | grep -E “Server:|Status:”
}
# Tomcat集群检查
check_tomcat_cluster() {
echo “=== Tomcat Cluster Status ===”
for port in 8080 8081 8082 8083; do
status=$(curl -s -o /dev/null -w “%{http_code}” http://fgedudb:$port/health)
if [ “$status” == “200” ]; then
echo “Tomcat port $port: HEALTHY”
else
echo “Tomcat port $port: UNHEALTHY”
fi
done
}
# HAProxy检查
check_haproxy() {
echo “=== HAProxy Status ===”
haproxy_stats=$(curl -s http://admin:Fgedu@Haproxy123@fgedudb:8404/stats;csv)
echo “$haproxy_stats” | grep -E “weblogic|websphere|tomcat” | awk -F’,’ ‘{print $1, $2, $18}’
}
# 执行检查
check_weblogic_cluster
echo “”
check_websphere_cluster
echo “”
check_tomcat_cluster
echo “”
check_haproxy
# 执行健康检查
$ chmod +x cluster_health_check.sh
$ ./cluster_health_check.sh
=== WebLogic Cluster Status ===
wls1 (10.0.1.11): HEALTHY
wls2 (10.0.1.12): HEALTHY
wls3 (10.0.1.13): HEALTHY
=== WebSphere Cluster Status ===
Server: FGeduServer1 Status: STARTED
Server: FGeduServer2 Status: STARTED
Server: FGeduServer3 Status: STARTED
=== Tomcat Cluster Status ===
Tomcat port 8080: HEALTHY
Tomcat port 8081: HEALTHY
Tomcat port 8082: HEALTHY
Tomcat port 8083: HEALTHY
总结
中间件集群配置是企业IT基础设施的核心内容,通过合理的集群架构设计和配置,可以实现应用服务的高可用性和可扩展性。本教程详细介绍了WebLogic、WebSphere和Tomcat三种主流中间件的集群配置方法,以及负载均衡器的配置和集群健康检查机制。
更多学习教程www.fgedu.net.cn,在实际运维过程中,需要根据业务需求选择合适的集群方案,建立完善的监控和告警体系,确保中间件集群的稳定运行。
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
