IBM WebSphere高可用环境下使用wsadmin实现更新滚动部署
实现WebSphere集群应用滚动更新(wsadmin版)
核心思路
放弃一次性全集群批量更新,改为逐个遍历集群成员服务器,依次完成「停止目标服务器上的应用→更新应用到该服务器→重启应用→验证可用性」的流程,确保集群始终有其他节点对外提供服务,避免停机。
具体操作步骤
1. 连接到wsadmin命令行
先启动wsadmin并连接到部署管理器:
wsadmin.sh -lang jython -user admin -password yourAdminPass -host dmgr-host-ip -port 8879
2. 定义基础配置变量
替换为你的实际应用、集群和安装包路径:
appName = "YourBusinessApp" clusterName = "YourCluster" updatedAppPath = "/opt/was/apps/updated-app.ear"
3. 获取集群内所有成员服务器
# 获取集群ID clusterId = AdminConfig.getid("/ServerCluster:" + clusterName + "/") # 提取集群下所有成员服务器 clusterMembers = AdminConfig.list("ServerClusterMember", clusterId).splitlines() # 整理服务器名称列表 serverList = [] for member in clusterMembers: serverList.append(AdminConfig.showAttribute(member, "memberName"))
4. 逐服务器执行滚动更新
遍历每个服务器,依次完成更新流程:
for server in serverList: print(f"开始更新服务器 {server}...") # 1. 停止当前服务器上的应用实例 appManager = AdminControl.completeObjectName(f"type=ApplicationManager,process={server},*") AdminControl.invoke(appManager, "stopApplication", appName) # 2. 将更新后的应用部署到该服务器 AdminApp.update(appName, 'app', f'[ -operation update -contents {updatedAppPath} -target {server} ]') AdminConfig.save() # 3. 启动该服务器上的应用实例 AdminControl.invoke(appManager, "startApplication", appName) # 4. 验证应用运行状态(可选) appStatus = AdminControl.invoke(appManager, "isApplicationRunning", appName) print(f"服务器 {server} 更新完成,应用状态: {appStatus}") # 可选:添加等待间隔,确保应用完全启动就绪 import time time.sleep(30)
关键注意事项
- 禁止批量更新:绝对不要直接用
AdminApp.update指定整个集群后执行AdminConfig.save,这会触发所有服务器同步更新,直接导致集群停机。 - 状态验证必做:每个服务器更新后必须检查应用状态,避免故障节点上线影响业务。
- 负载均衡配合(可选):如果前端有负载均衡器,可在更新前将目标服务器从负载池中移除,更新完成后再重新加入,进一步降低用户侧的感知影响。
- 脚本自动化:可将上述代码保存为
rollout_update.py,直接通过wsadmin批量执行:wsadmin.sh -lang jython -f rollout_update.py
内容的提问来源于stack exchange,提问作者Ahmed Omair
相关产品推荐
相关产品推荐

