1. 首页 > WebSphere教程 > 正文

WebSphere教程FG013-WebSphere ND集群高可用配置与故障切换实战

本文档风哥主要介绍WebSphere Application Server ND 9.0.5的集群高可用配置与故障切换,包括高可用概述、高可用架构、故障切换机制、会话复制、故障切换测试等内容,风哥教程参考WebSphere官方文档高可用配置章节,适合WebSphere管理员在学习和测试中使用,如果要应用于生产环境则需要自行确认。更多视频教程www.fgedu.net.cn

Part01-基础概念与理论知识

1.1 WebSphere高可用概述

WebSphere高可用是确保应用持续可用的关键能力,通过冗余和故障切换机制实现。学习交流加群风哥微信: itpux-com

WebSphere高可用核心目标:

  • 消除单点故障:关键组件冗余部署
  • 快速故障切换:故障时自动切换
  • 数据一致性:会话数据不丢失
  • 服务连续性:用户无感知切换

1.1.1 高可用指标

# WebSphere高可用指标

可用性等级:

等级 可用性 年停机时间 描述
──────────────────────────────────────────────────────
2个9 99% 87.6小时 基本可用
3个9 99.9% 8.76小时 较高可用
4个9 99.99% 52.6分钟 高可用
5个9 99.999% 5.26分钟 极高可用
6个9 99.9999% 31.5秒 容错系统

# 高可用计算公式

可用性 = (总时间 – 停机时间) / 总时间 × 100%

示例:
年总时间:365 × 24 × 60 = 525600分钟
允许停机:52.6分钟
可用性 = (525600 – 52.6) / 525600 = 99.99%

# WebSphere高可用组件

1. Deployment Manager高可用
– 主备DMgr
– 共享配置存储
– 自动故障切换

2. 应用服务器高可用
– 集群部署
– 会话复制
– 负载均衡

3. Web服务器高可用
– 多Web服务器
– 负载均衡器
– 健康检查

4. 数据库高可用
– 数据库集群
– 主从复制
– 故障切换

1.2 WebSphere高可用架构

WebSphere高可用架构:

1.2.1 架构设计

# WebSphere高可用架构

┌─────────────────────────────────────────────────────────┐
│ 外部负载均衡器 │
│ (F5/Nginx/HAProxy) │
└─────────────────────────────────────────────────────────┘

┌───────────────┼───────────────┐
│ │ │
┌─────┴─────┐ ┌─────┴─────┐ ┌─────┴─────┐
│ WebServer │ │ WebServer │ │ WebServer │
│ (主) │ │ (备) │ │ (备) │
└─────┬─────┘ └─────┬─────┘ └─────┬─────┘
│ │ │
└───────────────┼───────────────┘

┌─────────────────────┴─────────────────────┐
│ WebSphere Cell │
│ ┌─────────────────────────────────────┐ │
│ │ DMgr (主) DMgr (备) │ │
│ │ 共享配置存储 │ │
│ └─────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────┐ │
│ │ 应用服务器集群 │ │
│ │ ┌───┐ ┌───┐ ┌───┐ ┌───┐ ┌───┐ │ │
│ │ │S1 │ │S2 │ │S3 │ │S4 │ │S5 │ │ │
│ │ └───┘ └───┘ └───┘ └───┘ └───┘ │ │
│ │ 会话复制 (内存到内存) │ │
│ └─────────────────────────────────────┘ │
└─────────────────────────────────────────────┘

┌─────────────────────┴─────────────────────┐
│ 数据库集群 │
│ ┌───┐ ┌───┐ ┌───┐ │
│ │主 │ │从1│ │从2│ │
│ └───┘ └───┘ └───┘ │
└─────────────────────────────────────────────┘

# 架构层次

层次1:外部负载均衡
– 流量分发
– 健康检查
– 故障切换

层次2:Web服务器层
– 静态资源服务
– 请求路由
– Plugin负载均衡

层次3:应用服务器层
– 应用运行
– 会话管理
– 业务处理

层次4:数据层
– 数据存储
– 数据复制
– 数据备份

1.3 WebSphere高可用组件

WebSphere高可用组件:

1.3.1 核心组件

# WebSphere高可用核心组件

1. 集群(Cluster)
– 多个应用服务器实例
– 运行相同应用
– 提供负载均衡和高可用

2. 会话复制(Session Replication)
– 会话数据同步
– 内存到内存复制
– 故障时恢复会话

3. 复制域(Replication Domain)
– 定义复制范围
– 配置复制策略
– 管理复制成员

4. 健康策略(Health Policy)
– 监控服务器健康
– 自动故障检测
– 自动恢复动作

# 会话复制模式

1. 内存到内存复制
– 实时会话同步
– 低延迟
– 需要足够内存

复制模式:
– 单点复制:复制到一个备份
– 双点复制:复制到两个备份
– 全复制:复制到所有成员

2. 数据库持久化
– 会话存储到数据库
– 高可靠性
– 性能较低

3. 文件持久化
– 会话存储到文件
– 简单配置
– 性能较低

# 健康策略配置

健康条件:
– 内存使用率过高
– CPU使用率过高
– 响应时间过长
– 连接池耗尽

恢复动作:
– 重启服务器
– 联系支持
– 发送通知
– 无动作

1.4 WebSphere故障切换机制

WebSphere故障切换机制:

1.4.1 故障切换流程

# WebSphere故障切换流程

1. 应用服务器故障切换

故障检测:
– Plugin检测服务器不可达
– 健康检查失败
– 心跳超时

切换过程:
1. Plugin标记服务器为不可用
2. 请求路由到其他服务器
3. 从会话复制获取会话数据
4. 继续处理请求

恢复时间:
– 检测时间:5-10秒
– 切换时间:1-2秒
– 总恢复时间:约10秒

2. DMgr故障切换

故障检测:
– 主DMgr心跳检测
– 网络不可达
– 进程不存在

切换过程:
1. 备DMgr检测主DMgr故障
2. 备DMgr接管管理职责
3. 更新DNS或VIP
4. 继续管理Cell

恢复时间:
– 检测时间:10-30秒
– 切换时间:5-10秒
– 总恢复时间:约30秒

3. Web服务器故障切换

故障检测:
– 负载均衡器健康检查
– HTTP请求失败
– TCP连接失败

切换过程:
1. 负载均衡器标记服务器为不可用
2. 流量路由到其他Web服务器
3. Plugin更新服务器状态
4. 继续处理请求

恢复时间:
– 检测时间:3-5秒
– 切换时间:立即
– 总恢复时间:约5秒

# 故障切换配置

Plugin配置:





健康检查配置:
– 检查间隔:5秒
– 失败阈值:3次
– 恢复阈值:2次

风哥提示:高可用配置需要考虑所有组件的冗余,包括DMgr、应用服务器、Web服务器和数据库。建议定期进行故障切换演练,验证高可用配置的有效性。

Part02-生产环境规划与建议

2.1 WebSphere高可用规划

WebSphere高可用规划需要考虑多个因素:

2.1.1 高可用规划要素

# WebSphere高可用规划要素

1. 可用性目标
– 99.9%:基本高可用
– 99.99%:标准高可用
– 99.999%:极高可用

2. 故障容忍
– 单点故障:至少2个实例
– 双点故障:至少3个实例
– 多点故障:5个以上实例

3. 数据中心
– 单机房:机架冗余
– 双机房:机房冗余
– 多机房:地域冗余

4. 恢复时间目标
– RTO(恢复时间目标):服务恢复时间
– RPO(恢复点目标):数据丢失量

# 高可用规划模板

可用性目标:99.99%
集群成员:5个
数据中心:2个(主备)
RTO:5分钟
RPO:0(会话复制)
故障容忍:2个节点

# 不同规模高可用配置

小型(99.9%):
– 集群成员:2个
– 数据中心:1个
– 会话复制:单点
– Web服务器:2个

中型(99.99%):
– 集群成员:3-5个
– 数据中心:2个
– 会话复制:双点
– Web服务器:3个

大型(99.999%):
– 集群成员:5个以上
– 数据中心:3个
– 会话复制:全复制
– Web服务器:5个以上

2.2 WebSphere DMgr高可用规划

WebSphere DMgr高可用规划:

2.2.1 DMgr高可用方案

# WebSphere DMgr高可用方案

方案1:共享存储方案
– 主备DMgr共享配置目录
– 使用共享文件系统(NFS/GPFS)
– 主DMgr故障时备DMgr接管

架构:
┌─────────────────────────────────────────┐
│ 共享存储(NFS/GPFS) │
│ /shared/was/config │
└─────────────────────────────────────────┘
↑ ↑
│ │
┌─────┴─────┐ ┌─────┴─────┐
│ DMgr(主) │ │ DMgr(备) │
│ Active │ │ Standby │
└───────────┘ └───────────┘

方案2:数据库方案
– 配置存储在数据库
– 主备DMgr共享数据库
– 自动故障切换

方案3:虚拟IP方案
– 主DMgr绑定VIP
– 故障时VIP漂移到备DMgr
– 客户端无感知切换

# DMgr高可用配置

1. 准备共享存储
# 创建共享目录
mkdir -p /shared/was/config
chown -R websphere:websphere /shared/was

# NFS挂载
mount -t nfs nas.fgedu.net.cn:/was_share /shared/was

2. 配置主DMgr
# 使用共享目录创建Profile
/WebSphere/app/bin/manageprofiles.sh -create \
-templatePath /WebSphere/app/profileTemplates/management \
-profileName Dmgr01 \
-profilePath /WebSphere/app/profiles/Dmgr01 \
-cellName fgeduCell01 \
-nodeName fgeduCellManager01 \
-dmgrProfileRoot /shared/was/config

3. 配置备DMgr
# 在备节点创建相同配置
# 使用相同的共享目录

4. 配置自动切换
# 使用Pacemaker/Keepalived
# 监控DMgr进程
# 自动启动备DMgr

2.3 WebSphere集群高可用规划

WebSphere集群高可用规划:

2.3.1 集群高可用配置

# WebSphere集群高可用配置

1. 集群成员分布
– 不同物理服务器
– 不同机架
– 不同机房

2. 会话复制配置
– 启用内存到内存复制
– 配置复制域
– 设置备份数量

3. 健康策略配置
– 内存监控
– CPU监控
– 响应时间监控
– 自动重启

# 集群成员分布示例

集群:fgeduCluster(5成员)

机房A(主):
– server1:物理服务器1
– server2:物理服务器2
– server3:物理服务器3

机房B(备):
– server4:物理服务器4
– server5:物理服务器5

# 会话复制配置

复制域:fgeduReplicationDomain
复制模式:双点复制
备份数量:2

成员配置:
– server1 -> 复制到 server2, server4
– server2 -> 复制到 server3, server5
– server3 -> 复制到 server1, server4
– server4 -> 复制到 server5, server1
– server5 -> 复制到 server4, server2

# 健康策略配置

策略名称:fgeduHealthPolicy

条件:
– 内存使用率 > 90%
– CPU使用率 > 95%
– 响应时间 > 5000ms

动作:
– 重启服务器
– 发送告警通知

2.4 WebSphere容灾规划

WebSphere容灾规划:

2.4.1 容灾方案

# WebSphere容灾方案

1. 同城双活
– 两个数据中心同时运行
– 数据实时同步
– 负载分担

架构:
┌─────────────────────────────────────────────────────────┐
│ 全局负载均衡 │
└─────────────────────────────────────────────────────────┘
│ │
┌────┴────┐ ┌────┴────┐
│ 数据中心A│ │ 数据中心B│
│ (主) │ │ (备) │
│ 50%流量 │ │ 50%流量 │
└─────────┘ └─────────┘

2. 异地容灾
– 主数据中心运行
– 备数据中心待命
– 故障时切换

架构:
┌─────────────────────────────────────────────────────────┐
│ DNS切换/全局负载均衡 │
└─────────────────────────────────────────────────────────┘
│ │
┌────┴────┐ ┌────┴────┐
│ 北京机房 │ │ 上海机房 │
│ (主) │ │ (备) │
│ 100%流量│ │ 待命 │
└─────────┘ └─────────┘

3. 两地三中心
– 生产中心 + 本地灾备 + 异地灾备
– 最高级别容灾

架构:
┌─────────────────────────────────────────────────────────┐
│ 全局负载均衡 │
└─────────────────────────────────────────────────────────┘
│ │ │
┌────┴────┐ ┌────┴────┐ ┌────┴────┐
│ 生产中心 │ │ 本地灾备 │ │ 异地灾备 │
│ 北京 │ │ 北京 │ │ 上海 │
│ 100%流量│ │ 同步复制 │ │ 异步复制 │
└─────────┘ └─────────┘ └─────────┘

# 容灾切换流程

1. 检测故障
2. 确认需要切换
3. 启动备中心服务
4. 更新DNS/负载均衡
5. 验证服务可用
6. 通知相关人员

# 容灾演练

演练频率:每季度一次
演练内容:
– 模拟主中心故障
– 执行切换流程
– 验证服务恢复
– 记录演练结果
– 改进容灾方案

Part03-生产环境项目实施方案

3.1 WebSphere高可用配置实战

WebSphere高可用配置操作:

3.1.1 创建高可用集群

# WebSphere创建高可用集群

1. 创建集群
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123

# 创建集群
AdminClusterManagement.createCluster(‘[-clusterName fgeduHACluster]’)

# 添加成员(分布在多个节点)
AdminClusterManagement.createClusterMember(‘[-clusterName fgeduHACluster -memberNode fgeduNode01 -memberName server1]’)
AdminClusterManagement.createClusterMember(‘[-clusterName fgeduHACluster -memberNode fgeduNode02 -memberName server2]’)
AdminClusterManagement.createClusterMember(‘[-clusterName fgeduHACluster -memberNode fgeduNode03 -memberName server3]’)

# 保存配置
AdminConfig.save()

2. 创建复制域
# 创建复制域
AdminConfig.create(‘ReplicationDomain’, AdminConfig.getid(‘/Cell:fgeduCell01/’),
‘[[name fgeduHAReplicationDomain] [replicatorEntry []]]’)

# 配置复制域属性
domain = AdminConfig.getid(‘/ReplicationDomain:fgeduHAReplicationDomain/’)
AdminConfig.modify(domain, ‘[[numberOfReplicas 2]]’)

# 保存配置
AdminConfig.save()

3. 启用集群高可用
# 获取集群配置
cluster = AdminConfig.getid(‘/ServerCluster:fgeduHACluster/’)

# 启用高可用
AdminConfig.modify(cluster, ‘[[enableHA true]]’)

# 配置复制域
stateMgr = AdminConfig.list(‘StateManagerProvider’, cluster)
AdminConfig.modify(stateMgr, ‘[[replicationDomain fgeduHAReplicationDomain]]’)

# 保存配置
AdminConfig.save()

# 同步节点
AdminNodeManagement.syncActiveNodes()

# 启动集群
AdminClusterManagement.startCluster(‘fgeduHACluster’)

# 验证配置
print AdminConfig.showAttribute(cluster, ‘enableHA’)

true

# 完整配置脚本
#!/bin/bash
# create_ha_cluster.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn

echo “创建高可用集群…”

/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123 << 'EOF' # 创建集群 print "1. 创建集群..." AdminClusterManagement.createCluster('[-clusterName fgeduHACluster]') # 添加成员 print "2. 添加集群成员..." AdminClusterManagement.createClusterMember('[-clusterName fgeduHACluster -memberNode fgeduNode01 -memberName server1]') AdminClusterManagement.createClusterMember('[-clusterName fgeduHACluster -memberNode fgeduNode02 -memberName server2]') AdminClusterManagement.createClusterMember('[-clusterName fgeduHACluster -memberNode fgeduNode03 -memberName server3]') # 创建复制域 print "3. 创建复制域..." AdminConfig.create('ReplicationDomain', AdminConfig.getid('/Cell:fgeduCell01/'), '[[name fgeduHAReplicationDomain] [replicatorEntry []]]') # 启用高可用 print "4. 启用高可用..." cluster = AdminConfig.getid('/ServerCluster:fgeduHACluster/') AdminConfig.modify(cluster, '[[enableHA true]]') stateMgr = AdminConfig.list('StateManagerProvider', cluster) AdminConfig.modify(stateMgr, '[[replicationDomain fgeduHAReplicationDomain]]') # 保存配置 print "5. 保存配置..." AdminConfig.save() # 同步节点 print "6. 同步节点..." AdminNodeManagement.syncActiveNodes() # 启动集群 print "7. 启动集群..." AdminClusterManagement.startCluster('fgeduHACluster') print "高可用集群创建完成" EOF echo "完成"

3.2 WebSphere会话复制配置实战

WebSphere会话复制配置:

3.2.1 会话复制配置

# WebSphere会话复制配置

1. 配置Web容器会话管理
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123

# 获取集群Web容器配置
cluster = AdminConfig.getid(‘/ServerCluster:fgeduHACluster/’)
webContainer = AdminConfig.list(‘WebContainer’, cluster)

# 配置会话管理
sessionMgr = AdminConfig.list(‘SessionManager’, webContainer)
AdminConfig.modify(sessionMgr, ”’
[[enable true]
[sessionTimeout 30]
[enableUrlRewriting false]
[enableCookies true]
[cookieName JSESSIONID]
[cookieSecure true]]
”’)

# 配置会话复制
tuningParams = AdminConfig.list(‘TuningParams’, sessionMgr)
AdminConfig.modify(tuningParams, ”’
[[maxInMemorySessionCount 1000]
[allowOverflow true]
[scheduleInvalidation false]]
”’)

# 配置复制设置
replication = AdminConfig.list(‘SessionDatabasePersistence’, sessionMgr)
AdminConfig.modify(replication, ”’
[[enable true]
[usePersistence false]]
”’)

# 保存配置
AdminConfig.save()

2. 配置会话复制属性
# 设置复制属性
sessionProps = AdminConfig.list(‘SessionManager’, webContainer)

# 配置内存到内存复制
AdminConfig.create(‘MemoryToMemorySessionReplication’, sessionProps, ”’
[[replicationType BOTH]]
”’)

# 保存配置
AdminConfig.save()

# 同步节点
AdminNodeManagement.syncActiveNodes()

# 重启集群
AdminClusterManagement.restartCluster(‘fgeduHACluster’)

3. 验证会话复制
# 创建测试应用
cat > /tmp/test_session.jsp << 'EOF' <%@ page import="java.util.*" %>
<% String sessionId = session.getId(); Integer count = (Integer) session.getAttribute("count"); if (count == null) count = 0; count++; session.setAttribute("count", count); %>
Session ID: <%= sessionId %>
Count: <%= count %>
Server: <%= java.net.InetAddress.getLocalHost().getHostName() %>
EOF

# 部署测试应用
# 访问测试页面
# 停止一个服务器
# 再次访问,验证会话保持

# 会话复制验证脚本
#!/bin/bash
# test_session_replication.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn

echo “测试会话复制…”

# 获取会话ID
SESSION_ID=$(curl -s -c /tmp/cookie.txt http://localhost:9080/fgeduapp/test_session.jsp | grep “Session ID” | awk ‘{print $3}’)

echo “会话ID: $SESSION_ID”

# 多次请求
for i in {1..5}; do
echo “请求 $i:”
curl -s -b /tmp/cookie.txt http://localhost:9080/fgeduapp/test_session.jsp
echo “”
sleep 1
done

# 停止一个服务器
echo “停止server1…”
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-c “AdminControl.invoke(AdminControl.queryNames(‘type=Server,name=server1,*’), ‘stop’)”

# 再次请求
echo “故障切换后请求:”
curl -s -b /tmp/cookie.txt http://localhost:9080/fgeduapp/test_session.jsp

echo “测试完成”

3.3 WebSphere故障切换测试实战

WebSphere故障切换测试:

3.3.1 故障切换测试

# WebSphere故障切换测试

1. 测试应用服务器故障切换
# 查看当前集群状态
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123 \
-c “print AdminClusterManagement.getClusterState(‘fgeduHACluster’)”

websphere.cluster.running

# 查看成员状态
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123 << 'EOF' members = AdminClusterManagement.listClusterMembers('fgeduHACluster').split('\n') for member in members: if member: state = AdminControl.getAttribute(AdminControl.queryNames('type=ClusterMember,name=' + member + ',*'), 'state') print member + ': ' + state EOF server1: STARTED server2: STARTED server3: STARTED # 模拟服务器故障 # 停止server1 kill -9 $(ps -ef | grep server1 | grep java | awk '{print $2}') # 等待故障检测 sleep 10 # 检查集群状态 /WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \ -username fgeduadmin -password fgedu123 << 'EOF' members = AdminClusterManagement.listClusterMembers('fgeduHACluster').split('\n') for member in members: if member: try: state = AdminControl.getAttribute(AdminControl.queryNames('type=ClusterMember,name=' + member + ',*'), 'state') print member + ': ' + state except: print member + ': STOPPED' EOF server1: STOPPED server2: STARTED server3: STARTED # 测试应用访问 curl -s http://localhost:9080/fgeduapp/test.jsp # 应该正常返回 # 恢复server1 /WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \ -c "AdminControl.invoke(AdminControl.queryNames('type=Server,name=server1,*'), 'start')" 2. 测试会话故障切换 # 创建测试会话 curl -s -c /tmp/session.txt http://localhost:9080/fgeduapp/test_session.jsp Session ID: abc123 Count: 1 Server: server1 # 停止server1 /WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \ -c "AdminControl.invoke(AdminControl.queryNames('type=Server,name=server1,*'), 'stop')" # 使用相同会话访问 curl -s -b /tmp/session.txt http://localhost:9080/fgeduapp/test_session.jsp Session ID: abc123 Count: 2 Server: server2 # 会话保持,计数增加 3. 故障切换测试脚本 #!/bin/bash # failover_test.sh # from:www.itpux.com.qq113257174.wx:itpux-com # web: http://www.fgedu.net.cn CLUSTER=fgeduHACluster APP_URL=http://localhost:9080/fgeduapp/test.jsp echo "=== 故障切换测试 ===" # 初始状态 echo "1. 初始状态:" /WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \ -c "print AdminClusterManagement.getClusterState('$CLUSTER')" 2>/dev/null

# 测试应用访问
echo “”
echo “2. 测试应用访问:”
curl -s $APP_URL

# 模拟故障
echo “”
echo “3. 模拟server1故障…”
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-c “AdminControl.invoke(AdminControl.queryNames(‘type=Server,name=server1,*’), ‘stop’)” 2>/dev/null

sleep 5

# 检查状态
echo “”
echo “4. 故障后状态:”
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-c “print AdminClusterManagement.getClusterState(‘$CLUSTER’)” 2>/dev/null

# 测试应用访问
echo “”
echo “5. 故障后应用访问:”
curl -s $APP_URL

# 恢复
echo “”
echo “6. 恢复server1…”
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-c “AdminControl.invoke(AdminControl.queryNames(‘type=Server,name=server1,*’), ‘start’)” 2>/dev/null

sleep 10

# 最终状态
echo “”
echo “7. 最终状态:”
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-c “print AdminClusterManagement.getClusterState(‘$CLUSTER’)” 2>/dev/null

echo “”
echo “=== 测试完成 ===”

3.4 WebSphere高可用监控实战

WebSphere高可用监控:

3.4.1 高可用监控配置

# WebSphere高可用监控

1. 配置健康策略
# 通过管理控制台
故障诊断 > 健康策略 > 新建

策略名称:fgeduMemoryPolicy
条件:内存使用率 > 90%
动作:重启服务器

策略名称:fgeduCPUPolicy
条件:CPU使用率 > 95%
动作:重启服务器

# 通过wsadmin配置
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123

# 创建健康策略
healthPolicy = AdminConfig.create(‘HealthPolicy’, AdminConfig.getid(‘/Cell:fgeduCell01/’),
‘[[name fgeduMemoryPolicy] [description “Memory usage policy”]’)

# 添加条件
AdminConfig.create(‘HealthCondition’, healthPolicy,
‘[[conditionType memory] [threshold 90]]’)

# 添加动作
AdminConfig.create(‘HealthAction’, healthPolicy,
‘[[actionType RESTART_SERVER]]’)

# 保存配置
AdminConfig.save()

2. 监控脚本
#!/bin/bash
# ha_monitor.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn

CLUSTER=fgeduHACluster
ALERT_EMAIL=admin@fgedu.net.cn

echo “=== 高可用监控 ===”

# 集群状态
CLUSTER_STATE=$(/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-c “print AdminClusterManagement.getClusterState(‘$CLUSTER’)” 2>/dev/null)

echo “集群状态: $CLUSTER_STATE”

# 成员状态
echo “”
echo “成员状态:”
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123 << 'EOF' 2>/dev/null

members = AdminClusterManagement.listClusterMembers(‘fgeduHACluster’).split(‘\n’)
active_count = 0
for member in members:
if member:
try:
state = AdminControl.getAttribute(AdminControl.queryNames(‘type=ClusterMember,name=’ + member + ‘,*’), ‘state’)
print member + ‘: ‘ + state
if state == ‘STARTED’:
active_count += 1
except:
print member + ‘: STOPPED’

print “活动成员数: ” + str(active_count)

EOF

# 会话复制状态
echo “”
echo “会话复制状态:”
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-c “print AdminConfig.showAttribute(AdminConfig.getid(‘/ServerCluster:fgeduHACluster/’), ‘enableHA’)” 2>/dev/null

echo “=== 监控完成 ===”

3. 告警配置
# 配置SNMP告警
# 配置邮件告警
# 配置短信告警

# 告警脚本
#!/bin/bash
# send_alert.sh

SUBJECT=$1
MESSAGE=$2

echo “$MESSAGE” | mail -s “$SUBJECT” $ALERT_EMAIL

echo “告警已发送: $SUBJECT”

风哥提示:高可用配置需要持续监控和定期演练。建议建立完善的监控告警体系,并定期进行故障切换演练,验证高可用配置的有效性。学习交流加群风哥QQ113257174

Part04-生产案例与实战讲解

4.1 多机房高可用部署案例

多机房高可用部署案例:

4.1.1 案例背景

# 多机房高可用部署案例

企业背景:
– 应用:电商系统
– 可用性要求:99.99%
– 数据中心:北京(主)+ 上海(备)
– 集群成员:6个(北京3个 + 上海3个)

架构设计:
– 全局负载均衡:F5 GTM
– 本地负载均衡:F5 LTM
– 会话复制:跨机房内存复制
– 数据同步:Oracle ADG

4.1.2 部署实施

# 多机房高可用部署实施

1. 北京机房配置
# 创建集群成员
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123

# 添加北京成员
AdminClusterManagement.createClusterMember(‘[-clusterName fgeduCluster -memberNode BJNode01 -memberName BJServer1]’)
AdminClusterManagement.createClusterMember(‘[-clusterName fgeduCluster -memberNode BJNode02 -memberName BJServer2]’)
AdminClusterManagement.createClusterMember(‘[-clusterName fgeduCluster -memberNode BJNode03 -memberName BJServer3]’)

2. 上海机房配置
# 添加上海成员
AdminClusterManagement.createClusterMember(‘[-clusterName fgeduCluster -memberNode SHNode01 -memberName SHServer1]’)
AdminClusterManagement.createClusterMember(‘[-clusterName fgeduCluster -memberNode SHNode02 -memberName SHServer2]’)
AdminClusterManagement.createClusterMember(‘[-clusterName fgeduCluster -memberNode SHNode03 -memberName SHServer3]’)

3. 配置跨机房会话复制
# 创建复制域
AdminConfig.create(‘ReplicationDomain’, AdminConfig.getid(‘/Cell:fgeduCell01/’),
‘[[name fgeduCrossDCReplicationDomain] [replicatorEntry []]]’)

# 配置双点复制
domain = AdminConfig.getid(‘/ReplicationDomain:fgeduCrossDCReplicationDomain/’)
AdminConfig.modify(domain, ‘[[numberOfReplicas 2]]’)

# 启用高可用
cluster = AdminConfig.getid(‘/ServerCluster:fgeduCluster/’)
AdminConfig.modify(cluster, ‘[[enableHA true]]’)

stateMgr = AdminConfig.list(‘StateManagerProvider’, cluster)
AdminConfig.modify(stateMgr, ‘[[replicationDomain fgeduCrossDCReplicationDomain]]’)

# 保存配置
AdminConfig.save()

4. 配置F5负载均衡
# GTM配置
# 宽带DNS解析
# 健康检查

# LTM配置
# Pool配置
# Monitor配置
# 会话保持

5. 验证部署
# 检查集群状态
AdminClusterManagement.getClusterState(‘fgeduCluster’)

websphere.cluster.running

# 检查成员分布
AdminClusterManagement.listClusterMembers(‘fgeduCluster’)

BJServer1
BJServer2
BJServer3
SHServer1
SHServer2
SHServer3

# 测试跨机房切换
# 停止北京机房所有服务器
# 验证上海机房接管

4.2 故障切换演练案例

故障切换演练案例:

4.2.1 演练计划

# 故障切换演练案例

演练目标:
– 验证高可用配置有效性
– 测试故障切换时间
– 验证会话数据不丢失
– 检验运维响应流程

演练场景:
1. 单服务器故障
2. 多服务器故障
3. 机房故障
4. 数据库故障

# 演练脚本
#!/bin/bash
# ha_drill.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn

CLUSTER=fgeduHACluster
LOG_FILE=/var/log/ha_drill.log

log() {
echo “[$(date ‘+%Y-%m-%d %H:%M:%S’)] $1” | tee -a $LOG_FILE
}

log “=== 高可用演练开始 ===”

# 场景1:单服务器故障
log “场景1:单服务器故障”
log “停止server1…”

START_TIME=$(date +%s)

/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-c “AdminControl.invoke(AdminControl.queryNames(‘type=Server,name=server1,*’), ‘stop’)” 2>/dev/null

# 等待故障检测
sleep 10

# 测试应用访问
log “测试应用访问…”
RESPONSE=$(curl -s -o /dev/null -w “%{http_code}” http://localhost:9080/fgeduapp/test.jsp)

END_TIME=$(date +%s)
RECOVERY_TIME=$((END_TIME – START_TIME))

log “响应码: $RESPONSE”
log “恢复时间: ${RECOVERY_TIME}秒”

# 恢复server1
log “恢复server1…”
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-c “AdminControl.invoke(AdminControl.queryNames(‘type=Server,name=server1,*’), ‘start’)” 2>/dev/null

# 场景2:会话保持测试
log “”
log “场景2:会话保持测试”

# 创建会话
log “创建会话…”
SESSION_ID=$(curl -s -c /tmp/drill_session.txt http://localhost:9080/fgeduapp/test_session.jsp | grep “Session ID” | awk ‘{print $3}’)
log “会话ID: $SESSION_ID”

# 停止处理会话的服务器
log “停止server2…”
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-c “AdminControl.invoke(AdminControl.queryNames(‘type=Server,name=server2,*’), ‘stop’)” 2>/dev/null

sleep 5

# 验证会话
log “验证会话…”
NEW_SESSION=$(curl -s -b /tmp/drill_session.txt http://localhost:9080/fgeduapp/test_session.jsp | grep “Session ID” | awk ‘{print $3}’)
log “新会话ID: $NEW_SESSION”

if [ “$SESSION_ID” == “$NEW_SESSION” ]; then
log “会话保持成功”
else
log “会话保持失败”
fi

# 恢复server2
log “恢复server2…”
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-c “AdminControl.invoke(AdminControl.queryNames(‘type=Server,name=server2,*’), ‘start’)” 2>/dev/null

log “=== 演练完成 ===”

# 生成报告
log “”
log “=== 演练报告 ===”
log “单服务器故障恢复时间: ${RECOVERY_TIME}秒”
log “会话保持测试: $([ “$SESSION_ID” == “$NEW_SESSION” ] && echo “成功” || echo “失败”)”

4.3 高可用故障处理案例

高可用故障处理案例:

4.3.1 会话复制失败案例

# 会话复制失败案例

故障现象:
用户登录后刷新页面需要重新登录

故障诊断:
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分钟

# 预防措施
1. 部署前检查防火墙配置
2. 监控复制状态
3. 定期演练故障切换

Part05-风哥经验总结与分享

5.1 WebSphere高可用检查清单

WebSphere高可用检查清单:

# WebSphere高可用检查清单

配置检查:
□ 集群已创建
□ 成员数量足够(>=3)
□ 会话复制已启用
□ 复制域已配置
□ 健康策略已配置

网络检查:
□ 复制端口已开放
□ 负载均衡已配置
□ 健康检查已配置
□ DNS解析正确

监控检查:
□ 集群状态监控
□ 成员状态监控
□ 会话复制监控
□ 告警配置完成

演练检查:
□ 故障切换演练完成
□ 会话保持验证通过
□ 恢复时间达标
□ 演练报告完成

# 高可用检查脚本
#!/bin/bash
# ha_check.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn

echo “=== WebSphere高可用检查 ===”

# 集群状态
echo “1. 集群状态:”
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-c “print AdminClusterManagement.getClusterState(‘fgeduHACluster’)” 2>/dev/null

# 高可用配置
echo “”
echo “2. 高可用配置:”
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-c “print AdminConfig.showAttribute(AdminConfig.getid(‘/ServerCluster:fgeduHACluster/’), ‘enableHA’)” 2>/dev/null

# 成员状态
echo “”
echo “3. 成员状态:”
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-c “print AdminClusterManagement.listClusterMembers(‘fgeduHACluster’)” 2>/dev/null

# 复制域
echo “”
echo “4. 复制域:”
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-c “print AdminConfig.list(‘ReplicationDomain’)” 2>/dev/null

echo “”
echo “=== 检查完成 ===”

5.2 WebSphere高可用常见问题

WebSphere高可用常见问题及解决方案:

5.2.1 常见问题汇总

# WebSphere高可用常见问题

问题1:会话复制失败
原因:网络问题、防火墙、配置错误
解决:检查网络、开放端口、检查配置

问题2:故障切换慢
原因:检测时间长、会话复制慢
解决:优化检测时间、优化会话复制

问题3:会话丢失
原因:会话复制未启用、备份数不足
解决:启用会话复制、增加备份数

问题4:脑裂问题
原因:网络分区、心跳失败
解决:配置仲裁机制、监控网络

问题5:性能下降
原因:会话复制开销大
解决:优化复制策略、增加资源

5.3 WebSphere高可用最佳实践

基于多年WebSphere运维经验,总结高可用最佳实践:

5.3.1 高可用设计原则

  • 消除单点故障:所有关键组件冗余部署
  • 快速故障检测:配置合理的健康检查
  • 自动故障切换:减少人工干预
  • 数据一致性:启用会话复制

5.3.2 高可用运维建议

  • 定期演练:验证高可用配置有效性
  • 持续监控:监控集群和成员状态
  • 及时告警:配置完善的告警机制
  • 文档完善:记录配置和演练结果
生产环境建议:高可用是生产环境的基本要求,需要精心设计和持续维护。建议定期进行故障切换演练,验证高可用配置的有效性,并持续优化配置。from WebSphere视频:www.itpux.com

本文档详细介绍了WebSphere ND 9.0.5的集群高可用配置与故障切换,包括高可用概述、高可用架构、故障切换机制、会话复制、故障切换测试等内容。通过学习本文档,读者可以掌握WebSphere高可用配置的方法和最佳实践。更多视频教程www.fgedu.net.cn

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息