WebSphere教程FG009-WebSphere集群配置与负载均衡实战
本文档风哥主要介绍WebSphere Application Server 9.0.5的集群配置与负载均衡,包括集群概述、集群类型、集群架构、负载均衡机制、集群创建、集群配置、会话复制、集群管理等内容,风哥教程参考WebSphere官方文档集群管理章节,适合WebSphere管理员在学习和测试中使用,如果要应用于生产环境则需要自行确认。更多视频教程www.fgedu.net.cn
Part01-基础概念与理论知识
1.1 WebSphere集群概述
WebSphere集群是一组协同工作的应用服务器,提供高可用性、可扩展性和负载均衡能力。WebSphere ND版本支持集群功能,是企业级应用部署的核心架构。学习交流加群风哥微信: itpux-com
- 高可用性:故障自动转移,服务持续可用
- 可扩展性:动态添加节点,水平扩展能力
- 负载均衡:请求分发,提高处理能力
- 集中管理:统一配置和管理,简化运维
1.1.1 集群核心概念
Cell(单元):
– 管理域的基本单位
– 包含多个Node
– 由Deployment Manager管理
Node(节点):
– 物理或逻辑服务器
– 包含多个Server
– 由Node Agent管理
Cluster(集群):
– 一组应用服务器
– 运行相同的应用
– 提供负载均衡和高可用
Server(服务器):
– 应用服务器实例
– 运行Java应用
– 集群成员
# 集群架构示意
┌─────────────────────────────────────────────────────────┐
│ Cell(fgeduCell01) │
│ ┌───────────────────────────────────────────────────┐ │
│ │ Deployment Manager │ │
│ └───────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Node1 │ │ Node2 │ │ Node3 │ │
│ │ ┌─────────┐ │ │ ┌─────────┐ │ │ ┌─────────┐ │ │
│ │ │Server1 │ │ │ │Server2 │ │ │ │Server3 │ │ │
│ │ └─────────┘ │ │ └─────────┘ │ │ └─────────┘ │ │
│ │ Node Agent │ │ Node Agent │ │ Node Agent │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │ │ │ │
│ └────────────────┼────────────────┘ │
│ │ │
│ ┌───────────┴───────────┐ │
│ │ fgeduCluster │ │
│ │ (集群成员: 3个) │ │
│ └───────────────────────┘ │
└─────────────────────────────────────────────────────────┘
1.2 WebSphere集群类型
WebSphere支持两种集群类型:
1.2.1 静态集群
特点:
– 预定义的集群成员
– 成员数量固定
– 手动添加/删除成员
– 适合稳定负载
创建方式:
– 通过管理控制台创建
– 通过wsadmin脚本创建
# 静态集群配置示例
集群名称:fgeduCluster
集群成员:
– server1 (Node1)
– server2 (Node2)
– server3 (Node3)
# 静态集群优缺点
优点:
– 配置简单
– 资源可控
– 适合稳定负载
缺点:
– 手动扩展
– 不够灵活
– 需要人工干预
1.2.2 动态集群
特点:
– 自动创建集群成员
– 基于策略动态扩展
– 自动负载均衡
– 适合弹性需求
创建方式:
– 定义节点组
– 配置动态集群策略
– 自动创建成员
# 动态集群配置示例
集群名称:fgeduDynamicCluster
节点组:fgeduNodeGroup
最小成员数:2
最大成员数:10
扩展策略:
– CPU使用率 > 70%:增加成员
– CPU使用率 < 30%:减少成员
# 动态集群优缺点
优点:
- 自动扩展
- 弹性伸缩
- 资源优化
缺点:
- 配置复杂
- 需要监控支持
- 资源需求不确定
1.3 WebSphere集群架构
WebSphere集群架构组件:
1.3.1 架构组件
1. Deployment Manager(DMgr)
– 管理整个Cell
– 集中配置管理
– 集群协调
– 同步配置到节点
2. Node Agent
– 节点代理进程
– 与DMgr通信
– 同步配置
– 监控节点状态
3. Application Server
– 应用服务器实例
– 运行应用
– 集群成员
4. Web Server
– HTTP服务器
– 请求分发
– 负载均衡
– 静态资源服务
5. Plugin
– Web服务器插件
– 路由请求
– 故障检测
– 会话亲和
# 组件通信流程
客户端 -> Web Server -> Plugin -> Application Server
↓
负载均衡决策
↓
选择合适的集群成员
↓
处理请求
1.4 WebSphere负载均衡机制
WebSphere负载均衡机制:
1.4.1 负载均衡策略
1. 轮询(Round Robin)
– 按顺序分发请求
– 默认策略
– 简单高效
2. 加权轮询(Weighted Round Robin)
– 根据权重分发
– 适合异构服务器
– 权重可配置
3. 最少连接(Least Connections)
– 分发到连接最少的服务器
– 适合长连接场景
– 动态调整
4. 基于内容(Content Based)
– 根据请求内容分发
– 适合特定业务场景
– 配置复杂
# 负载均衡配置
Web Server Plugin配置:
plugin-cfg.xml:
# 会话亲和(Session Affinity)
– 同一会话请求分发到同一服务器
– 基于Cookie或URL重写
– 提高缓存效率
Part02-生产环境规划与建议
2.1 WebSphere集群规划
WebSphere集群规划需要考虑多个因素:
2.1.1 集群规模规划
1. 成员数量规划
– 最小:2个(高可用最低要求)
– 推荐:3-5个(平衡成本和可用性)
– 大型:5个以上(高负载场景)
2. 节点分布规划
– 单机房:所有节点在同一机房
– 双机房:节点分布在两个机房
– 多机房:节点分布在多个机房
3. 资源配置规划
– CPU:每成员4-16核
– 内存:每成员16-64GB
– 网络:千兆或万兆
# 不同规模集群规划
小型集群(2-3成员):
– 适用:中小型应用
– 可用性:99.9%
– 故障容忍:1个节点
中型集群(4-6成员):
– 适用:中型应用
– 可用性:99.99%
– 故障容忍:2个节点
大型集群(7+成员):
– 适用:大型应用
– 可用性:99.999%
– 故障容忍:3个节点
# 集群规划模板
集群名称:fgeduCluster
集群类型:静态集群
成员数量:3
节点分布:fgedu01, fgedu02, fgedu03
会话复制:启用
负载均衡:轮询
2.2 WebSphere高可用设计
WebSphere集群高可用设计:
2.2.1 高可用架构
1. DMgr高可用
– DMgr主备部署
– 使用共享存储
– 自动故障转移
2. 应用服务器高可用
– 多集群成员
– 故障自动转移
– 会话复制
3. Web Server高可用
– 多Web Server
– 负载均衡器
– 健康检查
4. 数据库高可用
– 数据库集群
– 主从复制
– 故障转移
# 高可用架构示意
┌─────────────────────────────────────────────────────────┐
│ 负载均衡器 │
│ (F5/Nginx/HAProxy) │
└─────────────────────────────────────────────────────────┘
│
┌───────────────┼───────────────┐
│ │ │
┌─────┴─────┐ ┌─────┴─────┐ ┌─────┴─────┐
│ WebServer │ │ WebServer │ │ WebServer │
│ (1) │ │ (2) │ │ (3) │
└─────┬─────┘ └─────┬─────┘ └─────┬─────┘
│ │ │
└───────────────┼───────────────┘
│
┌───────────┴───────────┐
│ WebSphere集群 │
│ ┌───┐ ┌───┐ ┌───┐ │
│ │S1 │ │S2 │ │S3 │ │
│ └───┘ └───┘ └───┘ │
└───────────────────────┘
│
┌───────────┴───────────┐
│ 数据库集群 │
│ ┌───┐ ┌───┐ ┌───┐ │
│ │M │ │S1 │ │S2 │ │
│ └───┘ └───┘ └───┘ │
└───────────────────────┘
2.3 WebSphere会话复制规划
WebSphere会话复制规划:
2.3.1 会话复制类型
1. 内存到内存复制
– 会话数据复制到其他服务器内存
– 低延迟
– 需要足够内存
2. 数据库持久化
– 会话数据存储到数据库
– 高可靠性
– 性能较低
3. 文件持久化
– 会话数据存储到文件
– 简单配置
– 性能较低
# 内存复制模式
1. 单点复制
– 复制到一个备份服务器
– 资源消耗低
– 备份服务器故障会丢失会话
2. 双点复制
– 复制到两个备份服务器
– 高可靠性
– 资源消耗中等
3. 全复制
– 复制到所有服务器
– 最高可靠性
– 资源消耗高
# 会话复制配置建议
场景 复制模式 备份数量
──────────────────────────────────────────
小型应用 单点复制 1
中型应用 双点复制 2
大型/关键应用 全复制 全部
2.4 WebSphere集群监控规划
WebSphere集群监控规划:
2.4.1 监控指标
1. 集群状态
– 集群运行状态
– 成员数量
– 健康状态
2. 成员状态
– 成员运行状态
– CPU使用率
– 内存使用率
– 请求处理量
3. 会话状态
– 会话数量
– 会话复制状态
– 会话大小
4. 负载均衡
– 请求分发情况
– 响应时间
– 错误率
# 监控工具
1. WebSphere PMI
– 内置监控
– 性能监控基础设施
– 实时监控
2. IBM Tivoli
– 企业级监控
– 告警管理
– 报表分析
3. 第三方工具
– Prometheus + Grafana
– Zabbix
– Nagios
# 监控脚本示例
#!/bin/bash
# cluster_monitor.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
echo “=== 集群监控 ===”
# 集群状态
echo “1. 集群状态:”
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123 \
-c “print AdminClusterManagement.getClusterState(‘fgeduCluster’)” 2>/dev/null
# 集群成员
echo “2. 集群成员:”
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123 \
-c “print AdminClusterManagement.listClusterMembers(‘fgeduCluster’)” 2>/dev/null
# 成员状态
echo “3. 成员状态:”
for member in server1 server2 server3; do
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123 \
-c “print AdminControl.getAttribute(AdminControl.queryNames(‘type=ClusterMember,name=$member,*’), ‘state’)” 2>/dev/null
done
echo “=== 监控完成 ===”
Part03-生产环境项目实施方案
3.1 WebSphere集群创建实战
WebSphere集群创建操作:
3.1.1 通过管理控制台创建
步骤:
1. 登录管理控制台
https://fgedu-dmgr.net.cn:9043/ibm/console
2. 导航到集群管理
服务器 > 集群 > WebSphere应用程序服务器集群
3. 点击”新建”
– 集群名称:fgeduCluster
– 点击”下一步”
4. 配置第一个成员
– 成员名称:server1
– 选择节点:fgeduNode01
– 点击”应用”
5. 添加其他成员
– 点击”添加成员”
– 成员名称:server2,节点:fgeduNode02
– 成员名称:server3,节点:fgeduNode03
6. 完成创建
– 检查配置摘要
– 点击”完成”
7. 保存配置
– 点击”保存”
8. 启动集群
– 选择集群
– 点击”启动”
3.1.2 通过wsadmin创建
# 连接wsadmin
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123
# 创建集群
AdminClusterManagement.createCluster(‘[-clusterName fgeduCluster]’)
# 添加集群成员
AdminClusterManagement.createClusterMember(‘[-clusterName fgeduCluster -memberNode fgeduNode01 -memberName server1]’)
AdminClusterManagement.createClusterMember(‘[-clusterName fgeduCluster -memberNode fgeduNode02 -memberName server2]’)
AdminClusterManagement.createClusterMember(‘[-clusterName fgeduCluster -memberNode fgeduNode03 -memberName server3]’)
# 保存配置
AdminConfig.save()
# 同步节点
AdminNodeManagement.syncActiveNodes()
# 启动集群
AdminClusterManagement.startCluster(‘fgeduCluster’)
# 验证集群状态
print AdminClusterManagement.getClusterState(‘fgeduCluster’)
websphere.cluster.running
# 查看集群成员
print AdminClusterManagement.listClusterMembers(‘fgeduCluster’)
server1
server2
server3
# 完整创建脚本
#!/bin/bash
# create_cluster.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
CLUSTER_NAME=fgeduCluster
NODES=”fgeduNode01 fgeduNode02 fgeduNode03″
echo “创建集群: $CLUSTER_NAME”
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123 << EOF
# 创建集群
print "创建集群..."
AdminClusterManagement.createCluster('[-clusterName $CLUSTER_NAME]')
# 添加成员
i = 1
for node in "$NODES".split():
memberName = "server" + str(i)
print "添加成员: " + memberName + " 到节点: " + node
AdminClusterManagement.createClusterMember('[-clusterName $CLUSTER_NAME -memberNode ' + node + ' -memberName ' + memberName + ']')
i = i + 1
# 保存配置
print "保存配置..."
AdminConfig.save()
# 同步节点
print "同步节点..."
AdminNodeManagement.syncActiveNodes()
# 启动集群
print "启动集群..."
AdminClusterManagement.startCluster('$CLUSTER_NAME')
# 验证状态
print "集群状态:"
print AdminClusterManagement.getClusterState('$CLUSTER_NAME')
EOF
echo "集群创建完成"
3.2 WebSphere集群配置实战
WebSphere集群配置操作:
3.2.1 会话复制配置
1. 创建复制域
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123
# 创建复制域
AdminConfig.create(‘ReplicationDomain’, AdminConfig.getid(‘/Cell:fgeduCell01/’),
‘[[name fgeduReplicationDomain] [replicatorEntry []]]’)
# 保存配置
AdminConfig.save()
2. 配置集群会话复制
# 获取集群配置
cluster = AdminConfig.getid(‘/ServerCluster:fgeduCluster/’)
# 启用会话复制
AdminConfig.modify(cluster, ‘[[enableHA true]]’)
# 配置复制域
stateMgr = AdminConfig.list(‘StateManagerProvider’, cluster)
AdminConfig.modify(stateMgr, ‘[[replicationDomain fgeduReplicationDomain]]’)
# 保存配置
AdminConfig.save()
3. 配置Web模块会话复制
# 获取Web容器配置
webContainer = AdminConfig.list(‘WebContainer’, AdminConfig.getid(‘/ServerCluster:fgeduCluster/’))
# 配置会话管理
sessionMgr = AdminConfig.list(‘SessionManager’, webContainer)
AdminConfig.modify(sessionMgr, ‘[[enable true] [sessionTimeout 30]]’)
# 配置复制
tuningParams = AdminConfig.list(‘TuningParams’, sessionMgr)
AdminConfig.modify(tuningParams, ‘[[maxInMemorySessionCount 1000] [allowOverflow true]]’)
# 保存配置
AdminConfig.save()
# 同步并重启
AdminNodeManagement.syncActiveNodes()
AdminClusterManagement.restartCluster(‘fgeduCluster’)
# 验证会话复制
print AdminConfig.showAttribute(sessionMgr, ‘enable’)
true
3.2.2 集群权重配置
权重说明:
– 权重范围:1-20
– 默认权重:2
– 权重越高,分配的请求越多
# 配置成员权重
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123
# 获取集群成员
members = AdminConfig.list(‘ClusterMember’, AdminConfig.getid(‘/ServerCluster:fgeduCluster/’)).split(‘\n’)
# 设置权重
for member in members:
name = AdminConfig.showAttribute(member, ‘memberName’)
if name == ‘server1’:
AdminConfig.modify(member, ‘[[weight 5]]’)
elif name == ‘server2’:
AdminConfig.modify(member, ‘[[weight 3]]’)
elif name == ‘server3’:
AdminConfig.modify(member, ‘[[weight 2]]’)
# 保存配置
AdminConfig.save()
# 同步节点
AdminNodeManagement.syncActiveNodes()
# 验证权重
for member in members:
name = AdminConfig.showAttribute(member, ‘memberName’)
weight = AdminConfig.showAttribute(member, ‘weight’)
print name + “: weight=” + weight
server1: weight=5
server2: weight=3
server3: weight=2
# 权重配置场景
场景 权重配置
──────────────────────────────────────────
同构服务器 相同权重(默认)
异构服务器 按性能配置权重
新服务器测试 低权重(1-2)
高配服务器 高权重(5-10)
3.3 WebSphere负载均衡配置实战
WebSphere负载均衡配置:
3.3.1 Web Server Plugin配置
1. 生成Plugin配置
# 通过管理控制台
服务器 > 服务器类型 > Web服务器
> 选择Web服务器 > 生成插件
# 通过wsadmin
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123 \
-c “AdminConfig.generatePluginCfg(AdminConfig.getid(‘/WebServer:fgeduweb/’))”
2. Plugin配置文件位置
/IBM/HTTPServer/Plugins/config/webserver1/plugin-cfg.xml
3. Plugin配置示例
4. 复制Plugin配置到Web服务器
scp /IBM/HTTPServer/Plugins/config/webserver1/plugin-cfg.xml \
fgeduweb:/IBM/HTTPServer/Plugins/config/webserver1/
5. 重启Web服务器
/IBM/HTTPServer/bin/apachectl restart
3.3.2 负载均衡策略配置
1. 轮询策略(默认)
2. 加权轮询策略
3. 最少连接策略
# 会话亲和配置
1. 基于Cookie
2. 基于URL重写
# 故障转移配置
# 健康检查配置
3.4 WebSphere集群管理实战
WebSphere集群管理操作:
3.4.1 集群启动停止
1. 启动集群
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123 \
-c “AdminClusterManagement.startCluster(‘fgeduCluster’)”
启动集群成员: server1
启动集群成员: server2
启动集群成员: server3
2. 停止集群
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123 \
-c “AdminClusterManagement.stopCluster(‘fgeduCluster’)”
停止集群成员: server1
停止集群成员: server2
停止集群成员: server3
3. 重启集群
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123 \
-c “AdminClusterManagement.restartCluster(‘fgeduCluster’)”
4. 滚动重启
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123 \
-c “AdminClusterManagement.rollingRestart(‘fgeduCluster’)”
# 集群状态查看
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123 \
-c “print AdminClusterManagement.getClusterState(‘fgeduCluster’)”
websphere.cluster.running
# 集群成员状态
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123 << EOF
members = AdminClusterManagement.listClusterMembers('fgeduCluster').split('\n')
for member in members:
state = AdminControl.getAttribute(AdminControl.queryNames('type=ClusterMember,name=' + member + ',*'), 'state')
print member + ': ' + state
EOF
server1: STARTED
server2: STARTED
server3: STARTED
3.4.2 集群成员管理
1. 添加集群成员
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123 \
-c “AdminClusterManagement.createClusterMember(‘[-clusterName fgeduCluster -memberNode fgeduNode04 -memberName server4]’)”
2. 删除集群成员
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123 \
-c “AdminClusterManagement.deleteClusterMember(‘[-clusterName fgeduCluster -memberName server4]’)”
3. 查看集群成员
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123 \
-c “print AdminClusterManagement.listClusterMembers(‘fgeduCluster’)”
4. 成员权重调整
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123 << EOF
member = AdminConfig.getid('/ServerCluster:fgeduCluster/ClusterMember:server1/')
AdminConfig.modify(member, '[[weight 5]]')
AdminConfig.save()
EOF
# 集群管理脚本
#!/bin/bash
# cluster_manage.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
CLUSTER=fgeduCluster
ACTION=$1
case $ACTION in
start)
echo "启动集群: $CLUSTER"
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123 \
-c "AdminClusterManagement.startCluster('$CLUSTER')"
;;
stop)
echo "停止集群: $CLUSTER"
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123 \
-c "AdminClusterManagement.stopCluster('$CLUSTER')"
;;
restart)
echo "重启集群: $CLUSTER"
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123 \
-c "AdminClusterManagement.restartCluster('$CLUSTER')"
;;
status)
echo "集群状态: $CLUSTER"
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123 \
-c "print AdminClusterManagement.getClusterState('$CLUSTER')"
;;
*)
echo "用法: $0 {start|stop|restart|status}"
;;
esac
Part04-生产案例与实战讲解
4.1 WebSphere集群部署案例
某企业WebSphere集群部署案例:
4.1.1 案例背景
企业背景:
– 应用类型:电商系统
– 用户规模:100万+
– 并发用户:5000
– 可用性要求:99.99%
集群规划:
– 集群名称:fgeduShopCluster
– 集群成员:6个
– 节点分布:2个数据中心
– 会话复制:启用
# 架构设计
数据中心A:
– DMgr主节点
– 集群成员:server1, server2, server3
– Web服务器:web1
数据中心B:
– DMgr备节点
– 集群成员:server4, server5, server6
– Web服务器:web2
负载均衡:
– F5 BIG-IP
– 健康检查
– 会话保持
4.1.2 部署实施
1. 创建集群
#!/bin/bash
# deploy_cluster.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
CLUSTER=fgeduShopCluster
echo “创建集群: $CLUSTER”
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123 << 'EOF'
# 创建集群
AdminClusterManagement.createCluster('[-clusterName fgeduShopCluster]')
# 添加数据中心A成员
AdminClusterManagement.createClusterMember('[-clusterName fgeduShopCluster -memberNode fgeduNode01A -memberName server1]')
AdminClusterManagement.createClusterMember('[-clusterName fgeduShopCluster -memberNode fgeduNode02A -memberName server2]')
AdminClusterManagement.createClusterMember('[-clusterName fgeduShopCluster -memberNode fgeduNode03A -memberName server3]')
# 添加数据中心B成员
AdminClusterManagement.createClusterMember('[-clusterName fgeduShopCluster -memberNode fgeduNode01B -memberName server4]')
AdminClusterManagement.createClusterMember('[-clusterName fgeduShopCluster -memberNode fgeduNode02B -memberName server5]')
AdminClusterManagement.createClusterMember('[-clusterName fgeduShopCluster -memberNode fgeduNode03B -memberName server6]')
# 创建复制域
AdminConfig.create('ReplicationDomain', AdminConfig.getid('/Cell:fgeduCell01/'),
'[[name fgeduReplicationDomain] [replicatorEntry []]]')
# 配置会话复制
cluster = AdminConfig.getid('/ServerCluster:fgeduShopCluster/')
AdminConfig.modify(cluster, '[[enableHA true]]')
stateMgr = AdminConfig.list('StateManagerProvider', cluster)
AdminConfig.modify(stateMgr, '[[replicationDomain fgeduReplicationDomain]]')
# 保存配置
AdminConfig.save()
# 同步节点
AdminNodeManagement.syncActiveNodes()
# 启动集群
AdminClusterManagement.startCluster('fgeduShopCluster')
# 验证
print AdminClusterManagement.getClusterState('fgeduShopCluster')
EOF
echo "集群部署完成"
2. 配置负载均衡
# F5配置
# 创建Pool
# 添加成员:server1-6的9080端口
# 配置健康检查:HTTP /health
# 配置会话保持:Source IP
3. 验证集群
# 检查集群状态
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-c "print AdminClusterManagement.getClusterState('fgeduShopCluster')"
websphere.cluster.running
# 检查成员状态
for i in 1 2 3 4 5 6; do
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-c "print AdminControl.getAttribute(AdminControl.queryNames('type=ClusterMember,name=server$i,*'), 'state')"
done
STARTED
STARTED
STARTED
STARTED
STARTED
STARTED
4.2 WebSphere负载均衡配置案例
WebSphere负载均衡配置案例:
4.2.1 案例背景
企业背景:
– 应用:电商系统
– Web服务器:IBM HTTP Server
– 集群:6个成员
– 需求:智能负载均衡
配置目标:
– 加权轮询负载均衡
– 会话亲和
– 故障自动转移
– 健康检查
4.2.2 配置实施
1. 配置集群成员权重
# 高配服务器权重更高
server1, server4: weight=5 (16核64GB)
server2, server5: weight=3 (8核32GB)
server3, server6: weight=2 (4核16GB)
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123 << 'EOF'
cluster = AdminConfig.getid('/ServerCluster:fgeduShopCluster/')
members = AdminConfig.list('ClusterMember', cluster).split('\n')
for member in members:
name = AdminConfig.showAttribute(member, 'memberName')
if name in ['server1', 'server4']:
AdminConfig.modify(member, '[[weight 5]]')
elif name in ['server2', 'server5']:
AdminConfig.modify(member, '[[weight 3]]')
else:
AdminConfig.modify(member, '[[weight 2]]')
AdminConfig.save()
EOF
2. 生成Plugin配置
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123 \
-c "AdminConfig.generatePluginCfg(AdminConfig.getid('/WebServer:fgeduweb/'))"
3. 自定义Plugin配置
vi /IBM/HTTPServer/Plugins/config/webserver1/plugin-cfg.xml
# 添加加权轮询
4. 重启Web服务器
/IBM/HTTPServer/bin/apachectl restart
5. 验证负载均衡
# 查看请求分发
tail -f /IBM/HTTPServer/logs/access_log
# 测试请求分发
for i in {1..100}; do
curl -s http://localhost/shop/health > /dev/null
done
# 查看分发统计
grep “health” /IBM/HTTPServer/logs/access_log | awk ‘{print $1}’ | sort | uniq -c
4.3 WebSphere集群故障处理案例
WebSphere集群故障处理案例:
4.3.1 集群成员故障案例
故障现象:
集群成员server2无法启动
故障诊断:
1. 检查日志
tail -100 /WebSphere/app/profiles/AppSrv02/logs/server2/SystemOut.log
错误信息:
[4/10/26 10:00:00:000 CST] 00000001 SystemErr R ADMU3027E: 服务器无法启动。端口 9080 已在使用中。
2. 检查端口占用
netstat -tlnp | grep 9080
tcp6 0 0 :::9080 :::* LISTEN 12345/java
3. 分析原因
– 端口被其他进程占用
– 可能是之前的进程未正常退出
解决方案:
1. 停止占用端口的进程
kill 12345
2. 清理临时文件
rm -rf /WebSphere/app/profiles/AppSrv02/temp/*
3. 重启成员
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-c “AdminControl.invoke(AdminControl.queryNames(‘type=ClusterMember,name=server2,*’), ‘start’)”
4. 验证
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-c “print AdminControl.getAttribute(AdminControl.queryNames(‘type=ClusterMember,name=server2,*’), ‘state’)”
STARTED
# 故障处理结果
问题原因:端口被占用
解决方案:停止占用进程,重启成员
处理时间:5分钟
4.3.2 会话复制失败案例
故障现象:
用户登录后,刷新页面需要重新登录
故障诊断:
1. 检查会话复制配置
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-c “print AdminConfig.showAttribute(AdminConfig.getid(‘/ServerCluster:fgeduCluster/’), ‘enableHA’)”
true
2. 检查复制域
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-c “print AdminConfig.list(‘ReplicationDomain’)”
(fgeduCell01/fgeduReplicationDomain)
3. 检查日志
grep -i “replication” /WebSphere/app/profiles/AppSrv01/logs/server1/SystemOut.log
[4/10/26 10:00:00:000 CST] 00000001 DRSImpl E DRS0001E: 无法建立复制连接
4. 分析原因
– 防火墙阻止复制端口
– 复制端口默认:9352
解决方案:
1. 检查防火墙
iptables -L -n | grep 9352
2. 开放复制端口
iptables -I INPUT -p tcp –dport 9352 -j ACCEPT
service iptables save
3. 重启集群
AdminClusterManagement.restartCluster(‘fgeduCluster’)
4. 验证会话复制
# 登录应用
# 刷新页面
# 检查是否保持登录状态
# 故障处理结果
问题原因:防火墙阻止复制端口
解决方案:开放端口
处理时间:10分钟
Part05-风哥经验总结与分享
5.1 WebSphere集群运维检查清单
WebSphere集群运维检查清单:
每日检查:
□ 集群运行状态
□ 成员运行状态
□ 会话复制状态
□ 负载均衡状态
□ 错误日志检查
每周检查:
□ 集群性能分析
□ 会话统计
□ 负载分布
□ 资源使用
□ 配置同步状态
每月检查:
□ 集群容量评估
□ 高可用测试
□ 故障转移测试
□ 配置审计
□ 文档更新
# 集群健康检查脚本
#!/bin/bash
# cluster_health.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
CLUSTER=fgeduCluster
echo “=== 集群健康检查 ===”
# 集群状态
echo “1. 集群状态:”
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123 \
-c “print AdminClusterManagement.getClusterState(‘$CLUSTER’)” 2>/dev/null
# 成员状态
echo “2. 成员状态:”
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123 << 'EOF' 2>/dev/null
members = AdminClusterManagement.listClusterMembers(‘fgeduCluster’).split(‘\n’)
for member in members:
if member:
state = AdminControl.getAttribute(AdminControl.queryNames(‘type=ClusterMember,name=’ + member + ‘,*’), ‘state’)
print member + ‘: ‘ + state
EOF
# 会话复制
echo “3. 会话复制状态:”
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123 \
-c “print AdminConfig.showAttribute(AdminConfig.getid(‘/ServerCluster:$CLUSTER/’), ‘enableHA’)” 2>/dev/null
# 应用状态
echo “4. 应用状态:”
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123 \
-c “print AdminApp.list()” 2>/dev/null
echo “=== 检查完成 ===”
5.2 WebSphere集群常见问题
WebSphere集群常见问题及解决方案:
5.2.1 常见问题汇总
问题1:集群成员无法启动
原因:端口冲突、资源不足、配置错误
解决:检查端口、检查资源、检查配置
问题2:会话复制失败
原因:网络问题、防火墙、配置错误
解决:检查网络、开放端口、检查配置
问题3:负载不均衡
原因:权重配置、Plugin配置、会话亲和
解决:调整权重、检查Plugin、检查会话配置
问题4:集群同步失败
原因:网络问题、DMgr故障、配置冲突
解决:检查网络、检查DMgr、检查配置
问题5:故障转移失败
原因:会话复制未启用、健康检查失败
解决:启用会话复制、检查健康检查
问题6:性能下降
原因:资源不足、配置不当、应用问题
解决:增加资源、优化配置、优化应用
5.3 WebSphere集群最佳实践
基于多年WebSphere运维经验,总结集群最佳实践:
5.3.1 集群设计原则
- 高可用优先:至少3个成员,启用会话复制
- 负载均衡:合理配置权重,使用健康检查
- 容灾设计:多机房部署,数据备份
- 监控完善:实时监控,及时告警
5.3.2 集群运维建议
- 自动化运维:使用脚本管理集群
- 滚动更新:避免全量重启
- 定期演练:故障转移演练
- 文档完善:记录配置和变更
本文档详细介绍了WebSphere 9.0.5的集群配置与负载均衡,包括集群概述、集群类型、集群架构、负载均衡机制、集群创建、集群配置、会话复制、集群管理等内容。通过学习本文档,读者可以掌握WebSphere集群配置和管理的方法和最佳实践。更多视频教程www.fgedu.net.cn
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
