WebSphere教程FG008-WebSphere应用部署与配置实战
本文档风哥主要介绍WebSphere Application Server 9.0.5的应用部署与配置,包括应用部署概述、应用类型说明、应用结构、生命周期管理、部署操作、配置管理、更新发布等内容,风哥教程参考WebSphere官方文档应用管理章节,适合WebSphere管理员在学习和测试中使用,如果要应用于生产环境则需要自行确认。更多视频教程www.fgedu.net.cn
Part01-基础概念与理论知识
1.1 WebSphere应用部署概述
WebSphere应用部署是将企业应用部署到WebSphere应用服务器运行的过程。WebSphere支持多种应用格式和部署方式,满足不同场景的需求。学习交流加群风哥微信: itpux-com
- 企业应用(EAR):包含多个模块的企业级应用
- Web应用(WAR):Web模块应用
- EJB模块(JAR):企业级Java Bean模块
- 部署描述符:应用配置文件
1.1.1 部署方式
1. 管理控制台部署
– 图形界面操作
– 适合新手和简单部署
– 步骤清晰直观
2. wsadmin脚本部署
– 命令行工具
– 适合自动化部署
– 可编写部署脚本
3. 命令行工具部署
– 使用AdminApp命令
– 适合批处理部署
– 可集成到CI/CD
4. 热部署
– 监控目录自动部署
– 适合开发环境
– 不推荐生产环境
# 部署方式对比
方式 易用性 自动化 适用场景
─────────────────────────────────────────
管理控制台 高 低 手动部署
wsadmin 中 高 自动化部署
命令行 低 高 CI/CD集成
热部署 高 高 开发环境
1.2 WebSphere应用类型说明
WebSphere支持多种应用类型:
1.2.1 应用类型
1. EAR(Enterprise Archive)
– 企业级应用包
– 包含多个模块
– 文件扩展名:.ear
– 结构:
app.ear
├── META-INF/
│ └── application.xml
├── webapp.war
├── ejb.jar
└── lib/
2. WAR(Web Application Archive)
– Web应用包
– 包含Servlet、JSP等
– 文件扩展名:.war
– 结构:
webapp.war
├── WEB-INF/
│ ├── web.xml
│ └── lib/
├── jsp/
└── html/
3. JAR(Java Archive)
– Java类库包
– 包含EJB或工具类
– 文件扩展名:.jar
– 结构:
ejb.jar
├── META-INF/
│ └── ejb-jar.xml
└── com/
4. RAR(Resource Archive)
– 资源适配器包
– 用于JCA连接
– 文件扩展名:.rar
# 应用类型选择指南
应用类型 适用场景
──────────────────────────────────────
EAR 企业级应用,多模块
WAR Web应用,单一模块
JAR EJB模块或工具库
RAR 外部系统集成
1.3 WebSphere应用结构
WebSphere应用部署后的结构:
1.3.1 部署后目录结构
应用目录:
/WebSphere/app/profiles/AppSrv01/installedApps/fgeduCell01/
应用结构:
fgeduapp.ear/
├── META-INF/
│ ├── application.xml # 应用描述符
│ ├── ibm-application-ext.xml # IBM扩展配置
│ └── MANIFEST.MF # 清单文件
├── fgeduweb.war/
│ ├── WEB-INF/
│ │ ├── web.xml # Web描述符
│ │ ├── ibm-web-ext.xml # IBM扩展配置
│ │ ├── ibm-web-bnd.xml # 绑定配置
│ │ ├── classes/ # 编译后的类
│ │ └── lib/ # 依赖库
│ ├── jsp/ # JSP文件
│ ├── html/ # HTML文件
│ └── images/ # 静态资源
└── fgeduejb.jar/
├── META-INF/
│ ├── ejb-jar.xml # EJB描述符
│ └── ibm-ejb-jar-bnd.xml # 绑定配置
└── com/ # EJB类
# 配置文件说明
application.xml:
– 定义应用模块
– 配置安全角色
– 配置上下文根
web.xml:
– 定义Servlet
– 配置过滤器
– 配置监听器
– 配置欢迎页面
ibm-web-ext.xml:
– 配置类加载器
– 配置JSP参数
– 配置会话管理
1.4 WebSphere应用生命周期
WebSphere应用的生命周期管理:
1.4.1 应用状态
应用状态:
– 已安装(Installed):应用已部署但未启动
– 已启动(Started):应用正在运行
– 已停止(Stopped):应用已停止
– 部分启动(Partially Started):集群部分成员启动
状态转换:
安装 -> 已安装 -> 启动 -> 已启动 -> 停止 -> 已停止 -> 卸载
# 应用生命周期操作
1. 安装(Install)
– 将应用包部署到服务器
– 解析部署描述符
– 配置应用参数
2. 启动(Start)
– 加载应用类
– 初始化资源
– 开始接收请求
3. 停止(Stop)
– 停止接收请求
– 释放资源
– 卸载类
4. 更新(Update)
– 更新应用文件
– 更新配置
– 可选择是否重启
5. 卸载(Uninstall)
– 删除应用文件
– 清理配置
– 释放资源
# 查看应用状态
/WebSphere/app/profiles/AppSrv01/bin/wsadmin.sh -lang jython \
-c “print AdminApp.list()”
fgeduapp
/WebSphere/app/profiles/AppSrv01/bin/wsadmin.sh -lang jython \
-c “print AdminControl.getAttribute(AdminControl.queryNames(‘type=Application,name=fgeduapp,*’), ‘state’)”
STARTED
Part02-生产环境规划与建议
2.1 WebSphere应用部署规划
WebSphere应用部署需要规划多个方面:
2.1.1 部署规划要素
1. 应用结构规划
– 模块划分
– 依赖关系
– 资源配置
2. 部署目标规划
– 部署到哪些服务器
– 部署到哪些集群
– 部署顺序
3. 资源配置规划
– 数据源
– JMS资源
– 邮件会话
– URL资源
4. 安全配置规划
– 安全角色
– 用户映射
– SSL配置
5. 性能配置规划
– 类加载策略
– 会话管理
– 缓存配置
# 部署规划模板
应用名称:fgeduapp
应用类型:EAR
部署目标:fgeduCluster
上下文根:/fgeduapp
类加载器:PARENT_LAST
数据源:jdbc/fgedudb
安全角色:fgeduRole
会话超时:30分钟
2.2 WebSphere应用配置规划
WebSphere应用配置规划:
2.2.1 配置规划要点
1. 类加载器配置
– 类加载器顺序
PARENT_FIRST:先加载父类(默认)
PARENT_LAST:先加载应用类
– 类加载器策略
SINGLE:单类加载器
MULTIPLE:多类加载器
2. Web容器配置
– 上下文根
– 虚拟主机
– 类加载器
3. EJB容器配置
– 事务类型
– 安全角色
– 资源引用
4. 会话管理配置
– 会话超时
– 会话复制
– 会话持久化
5. 资源引用配置
– 数据源引用
– JMS引用
– 邮件会话引用
# 配置建议
场景 配置建议
──────────────────────────────────────────
使用新版本库 PARENT_LAST
多个Web模块 MULTIPLE类加载器
高可用需求 启用会话复制
数据库访问 配置数据源引用
2.3 WebSphere应用安全配置
WebSphere应用安全配置:
2.3.1 安全配置要点
1. 安全角色映射
– 定义安全角色
– 映射到用户/组
– 配置访问权限
2. 认证配置
– 基本认证
– 表单认证
– 客户端证书认证
3. 授权配置
– URL授权
– 方法授权
– 角色授权
4. SSL配置
– 启用HTTPS
– 配置证书
– 强制SSL
# 安全配置示例
application.xml:
ibm-application-bnd.xml:
# 通过wsadmin配置安全角色
/WebSphere/app/profiles/AppSrv01/bin/wsadmin.sh -lang jython \
-c “AdminApp.edit(‘fgeduapp’, ‘[-MapRolesToUsers [[\”fgeduAdmin\” \”fgeduAdminGroup\” \”\” \”\” \”\” \”\”]]]]’)”
2.4 WebSphere应用版本管理
WebSphere应用版本管理策略:
2.4.1 版本管理策略
1. 版本命名规范
– 应用名-版本号.ear
– 例如:fgeduapp-1.0.0.ear
2. 版本发布策略
– 蓝绿部署
– 滚动更新
– 金丝雀发布
3. 版本回滚策略
– 保留旧版本
– 快速回滚
– 验证回滚
# 版本管理流程
1. 开发版本
开发 -> 测试 -> 预发布
2. 测试版本
功能测试 -> 性能测试 -> 安全测试
3. 生产版本
灰度发布 -> 全量发布 -> 监控验证
# 版本发布脚本
#!/bin/bash
# deploy_app.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
APP_NAME=fgeduapp
APP_VERSION=$1
EAR_FILE=/WebSphere/apps/${APP_NAME}-${APP_VERSION}.ear
echo “部署应用: ${APP_NAME}-${APP_VERSION}”
# 停止应用
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123 \
-c “AdminControl.invoke(AdminControl.queryNames(‘type=Application,name=${APP_NAME},*’), ‘stop’)”
# 更新应用
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123 \
-c “AdminApp.update(‘${APP_NAME}’, ‘app’, ‘[-operation update -contents ${EAR_FILE}]’)”
# 保存配置
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123 \
-c “AdminConfig.save()”
# 同步节点
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123 \
-c “AdminNodeManagement.syncActiveNodes()”
# 启动应用
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123 \
-c “AdminControl.invoke(AdminControl.queryNames(‘type=Application,name=${APP_NAME},*’), ‘start’)”
echo “部署完成”
Part03-生产环境项目实施方案
3.1 WebSphere应用部署实战
WebSphere应用部署操作:
3.1.1 通过管理控制台部署
步骤:
1. 登录管理控制台
https://fgedu-dmgr.net.cn:9043/ibm/console
2. 导航到应用部署
应用程序 > 应用程序类型 > WebSphere企业应用程序
3. 点击”安装”
– 选择应用文件:/WebSphere/apps/fgeduapp.ear
– 点击”下一步”
4. 选择安装选项
– 如何安装应用程序?选择”详细”
– 点击”下一步”
5. 指定绑定信息
– 接受默认绑定
– 点击”下一步”
6. 映射模块到服务器
– 选择部署目标:fgeduCluster
– 点击”下一步”
7. 映射虚拟主机
– 选择虚拟主机:default_host
– 点击”下一步”
8. 映射安全角色
– 配置角色映射
– 点击”下一步”
9. 完成安装
– 检查摘要信息
– 点击”完成”
10. 保存配置
– 点击”保存”
– 同步到节点
11. 启动应用
– 选择应用
– 点击”启动”
3.1.2 通过wsadmin部署
# 连接wsadmin
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123
# 部署应用
AdminApp.install(‘/WebSphere/apps/fgeduapp.ear’, ‘[-appname fgeduapp -contextroot /fgeduapp -MapModulesToServers [[.* .* fgeduCluster]] -MapWebModToVH [[.* .* default_host]]]’)
ADMA5016I: 应用程序安装成功。
# 保存配置
AdminConfig.save()
# 同步节点
AdminNodeManagement.syncActiveNodes()
# 启动应用
appManager = AdminControl.queryNames(‘type=ApplicationManager,process=server1,*’)
AdminControl.invoke(appManager, ‘startApplication’, ‘fgeduapp’)
# 验证应用状态
print AdminControl.getAttribute(AdminControl.queryNames(‘type=Application,name=fgeduapp,*’), ‘state’)
STARTED
# 退出
exit
# 完整部署脚本
#!/bin/bash
# deploy_ear.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
EAR_FILE=/WebSphere/apps/fgeduapp.ear
APP_NAME=fgeduapp
CLUSTER=fgeduCluster
echo “开始部署应用: $APP_NAME”
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123 << EOF
# 安装应用
print "安装应用..."
AdminApp.install('${EAR_FILE}', '[-appname ${APP_NAME} -contextroot /${APP_NAME} -MapModulesToServers [[.* .* ${CLUSTER}]] -MapWebModToVH [[.* .* default_host]]]')
# 保存配置
print "保存配置..."
AdminConfig.save()
# 同步节点
print "同步节点..."
AdminNodeManagement.syncActiveNodes()
# 启动应用
print "启动应用..."
appManager = AdminControl.queryNames('type=ApplicationManager,process=server1,*')
AdminControl.invoke(appManager, 'startApplication', '${APP_NAME}')
# 验证状态
print "验证状态..."
print AdminControl.getAttribute(AdminControl.queryNames('type=Application,name=${APP_NAME},*'), 'state')
EOF
echo "部署完成"
3.2 WebSphere应用配置实战
WebSphere应用配置操作:
3.2.1 类加载器配置
1. 通过管理控制台配置
应用程序 > 应用程序类型 > WebSphere企业应用程序
> fgeduapp > 类加载和更新检测
类加载器顺序:类已加载,最先使用本地类加载器(父类最后)
类加载器策略:单类加载器
2. 通过wsadmin配置
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123
# 获取应用部署配置
dep = AdminConfig.getid(‘/Deployment:fgeduapp/’)
target = AdminConfig.showAttribute(dep, ‘targetMappings’).split(‘[‘)[1].split(‘]’)[0]
# 设置类加载器顺序
AdminConfig.modify(target, ‘[[classloaderMode PARENT_LAST]]’)
# 保存配置
AdminConfig.save()
# 同步并重启应用
AdminNodeManagement.syncActiveNodes()
# 验证配置
print AdminConfig.showAttribute(target, ‘classloaderMode’)
PARENT_LAST
# 类加载器顺序说明
PARENT_FIRST:
– 先加载父类加载器的类
– 适用于使用WebSphere提供的库
PARENT_LAST:
– 先加载应用自己的类
– 适用于使用应用自带的库版本
3.2.2 会话管理配置
1. 通过管理控制台配置
应用程序 > 应用程序类型 > WebSphere企业应用程序
> fgeduapp > 会话管理
启用会话:是
会话超时:30分钟
启用会话复制:是(集群环境)
2. 通过wsadmin配置
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123
# 获取Web模块配置
webMod = AdminConfig.getid(‘/WebModule:.*fgeduapp.*/’)
# 配置会话管理
sessionMgr = AdminConfig.list(‘SessionManager’, webMod)
AdminConfig.modify(sessionMgr, ‘[[sessionTimeout 30] [enable true]]’)
# 启用会话复制(集群环境)
tuningParams = AdminConfig.list(‘TuningParams’, sessionMgr)
AdminConfig.modify(tuningParams, ‘[[maxInMemorySessionCount 1000] [allowOverflow true]]’)
# 保存配置
AdminConfig.save()
# 会话复制配置(ND集群)
replicationDomain = AdminConfig.getid(‘/ReplicationDomain:fgeduReplicationDomain/’)
if not replicationDomain:
AdminConfig.create(‘ReplicationDomain’, AdminConfig.getid(‘/Cell:fgeduCell01/’), ‘[[name fgeduReplicationDomain] [replicatorEntry []]]’)
# 保存配置
AdminConfig.save()
3.3 WebSphere应用更新实战
WebSphere应用更新操作:
3.3.1 应用更新方式
1. 全量更新
– 替换整个应用
– 需要重启应用
– 适合大版本更新
2. 增量更新
– 只更新部分文件
– 可选择是否重启
– 适合小版本更新
3. 热更新
– 不重启应用
– 更新类文件
– 适合紧急修复
# 全量更新示例
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123
# 停止应用
appMbean = AdminControl.queryNames(‘type=Application,name=fgeduapp,*’)
if appMbean:
AdminControl.invoke(appMbean, ‘stop’)
# 更新应用
AdminApp.update(‘fgeduapp’, ‘app’, ‘[-operation update -contents /WebSphere/apps/fgeduapp-1.1.0.ear]’)
ADMA5017I: 应用程序更新成功。
# 保存配置
AdminConfig.save()
# 同步节点
AdminNodeManagement.syncActiveNodes()
# 启动应用
appManager = AdminControl.queryNames(‘type=ApplicationManager,process=server1,*’)
AdminControl.invoke(appManager, ‘startApplication’, ‘fgeduapp’)
# 验证状态
print AdminControl.getAttribute(AdminControl.queryNames(‘type=Application,name=fgeduapp,*’), ‘state’)
STARTED
3.3.2 滚动更新(集群)
滚动更新流程:
1. 更新第一个节点
2. 验证第一个节点
3. 更新第二个节点
4. 验证第二个节点
5. 继续更新其他节点
# 滚动更新脚本
#!/bin/bash
# rolling_update.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
APP_NAME=fgeduapp
CLUSTER=fgeduCluster
EAR_FILE=/WebSphere/apps/fgeduapp-1.1.0.ear
echo “开始滚动更新应用: $APP_NAME”
# 获取集群成员
MEMBERS=$(/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123 \
-c “print AdminClusterManagement.listClusterMembers(‘$CLUSTER’)” 2>/dev/null)
echo “集群成员: $MEMBERS”
# 更新应用(不重启)
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123 << EOF
AdminApp.update('$APP_NAME', 'app', '[-operation update -contents $EAR_FILE]')
AdminConfig.save()
EOF
# 滚动重启集群成员
for member in $MEMBERS; do
echo "重启成员: $member"
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123 << EOF
# 停止成员
AdminControl.invoke(AdminControl.queryNames('type=ClusterMember,name=$member,*'), 'stop')
# 等待停止完成
import time
time.sleep(10)
# 启动成员
AdminControl.invoke(AdminControl.queryNames('type=ClusterMember,name=$member,*'), 'start')
EOF
echo "成员 $member 更新完成"
# 等待服务恢复
sleep 30
done
echo "滚动更新完成"
3.4 WebSphere应用故障处理
WebSphere应用故障处理:
3.4.1 应用启动失败
1. 检查日志
tail -100 /WebSphere/app/profiles/AppSrv01/logs/server1/SystemOut.log
# 常见错误:
# – 类找不到
# – 数据源连接失败
# – 端口冲突
# – 配置错误
2. 检查应用状态
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-c “print AdminControl.getAttribute(AdminControl.queryNames(‘type=Application,name=fgeduapp,*’), ‘state’)”
3. 检查类加载问题
# 查看类加载器日志
grep -i “ClassNotFoundException” /WebSphere/app/profiles/AppSrv01/logs/server1/SystemOut.log
4. 检查数据源连接
# 测试数据源连接
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-c “print AdminControl.testConnection(AdminConfig.getid(‘/DataSource:fgedudb/’))”
5. 解决方案
# 类找不到:检查类路径、类加载器配置
# 数据源连接失败:检查数据源配置、数据库状态
# 端口冲突:修改端口配置
# 配置错误:检查部署描述符
# 重新部署应用
AdminApp.uninstall(‘fgeduapp’)
AdminConfig.save()
AdminApp.install(‘/WebSphere/apps/fgeduapp.ear’, ‘[-appname fgeduapp]’)
AdminConfig.save()
3.4.2 应用运行异常
1. 内存溢出
# 检查JVM内存使用
jmap -heap $(pgrep -f “server1”)
# 分析堆转储
jmap -dump:format=b,file=/WebSphere/logs/heap.hprof $(pgrep -f “server1”)
# 解决方案:增加堆内存、修复内存泄漏
2. 响应慢
# 检查线程状态
jstack $(pgrep -f “server1”) > /WebSphere/logs/thread_dump.txt
# 检查数据库连接
# 检查GC情况
# 解决方案:优化代码、调整JVM、优化数据库
3. 频繁重启
# 检查崩溃日志
ls -la /WebSphere/app/profiles/AppSrv01/logs/server1/
# 检查FFDC日志
ls -la /WebSphere/app/profiles/AppSrv01/logs/server1/ffdc/
# 解决方案:分析崩溃原因、修复问题
# 应用健康检查脚本
#!/bin/bash
# app_health_check.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
APP_NAME=fgeduapp
APP_URL=http://localhost:9080/fgeduapp/health
echo “=== 应用健康检查 ===”
# 检查应用状态
echo “1. 应用状态:”
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123 \
-c “print AdminControl.getAttribute(AdminControl.queryNames(‘type=Application,name=$APP_NAME,*’), ‘state’)” 2>/dev/null
# 检查应用URL
echo “2. 应用URL检查:”
curl -s -o /dev/null -w “%{http_code}” $APP_URL
# 检查最近错误
echo “3. 最近错误:”
grep -i error /WebSphere/app/profiles/AppSrv01/logs/server1/SystemOut.log | tail -5
echo “=== 检查完成 ===”
Part04-生产案例与实战讲解
4.1 WebSphere企业应用部署案例
某企业WebSphere应用部署案例:
4.1.1 案例背景
企业背景:
– 应用类型:企业门户系统
– 应用结构:EAR(Web模块 + EJB模块)
– 部署目标:3节点集群
– 特殊需求:使用自定义库版本
应用信息:
– 应用名称:fgeduportal
– 上下文根:/portal
– 数据源:jdbc/fgedudb
– 安全角色:admin, user
# 部署规划
1. 准备应用包
2. 配置数据源
3. 部署应用
4. 配置安全角色
5. 启动应用
6. 验证功能
4.1.2 部署实施
1. 准备应用包
ls -la /WebSphere/apps/
-rw-r–r– 1 websphere websphere 50M Apr 10 10:00 fgeduportal.ear
2. 配置数据源
# 参考数据源配置章节
3. 部署应用
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123 << 'EOF'
# 安装应用
AdminApp.install('/WebSphere/apps/fgeduportal.ear', [
'-appname', 'fgeduportal',
'-contextroot', '/portal',
'-MapModulesToServers', [[['.*', '.*', 'fgeduCluster']]],
'-MapWebModToVH', [[['.*', '.*', 'default_host']]],
'-ClassLoaderMode', 'PARENT_LAST'
])
ADMA5016I: 应用程序安装成功。
# 保存配置
AdminConfig.save()
# 同步节点
AdminNodeManagement.syncActiveNodes()
# 启动应用
appManager = AdminControl.queryNames('type=ApplicationManager,process=server1,*')
AdminControl.invoke(appManager, 'startApplication', 'fgeduportal')
# 验证状态
print AdminControl.getAttribute(AdminControl.queryNames('type=Application,name=fgeduportal,*'), 'state')
STARTED
EOF
4. 配置安全角色
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123 \
-c "AdminApp.edit('fgeduportal', '[-MapRolesToUsers [[\"admin\" \"fgeduAdminGroup\" \"\" \"\" \"\" \"\"] [\"user\" \"fgeduUserGroup\" \"\" \"\" \"\" \"\"]]]]')"
5. 验证功能
curl -I http://localhost:9080/portal/
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1234
# 部署结果
应用名称:fgeduportal
状态:STARTED
上下文根:/portal
集群:fgeduCluster
4.2 WebSphere应用更新案例
WebSphere应用更新案例:
4.2.1 案例背景
企业背景:
– 应用:fgeduportal
– 当前版本:1.0.0
– 目标版本:1.1.0
– 更新内容:功能增强、Bug修复
更新要求:
– 零停机更新
– 滚动更新集群成员
– 保留回滚能力
# 更新计划
1. 备份当前版本
2. 准备新版本
3. 执行滚动更新
4. 验证更新结果
5. 监控运行状态
4.2.2 更新实施
1. 备份当前版本
cp /WebSphere/apps/fgeduportal.ear /WebSphere/backup/fgeduportal-1.0.0.ear
2. 准备新版本
cp /WebSphere/releases/fgeduportal-1.1.0.ear /WebSphere/apps/fgeduportal.ear
3. 执行滚动更新
#!/bin/bash
# rolling_deploy.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
APP_NAME=fgeduportal
CLUSTER=fgeduCluster
EAR_FILE=/WebSphere/apps/fgeduportal.ear
echo “开始滚动更新…”
# 更新应用
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123 << EOF
AdminApp.update('$APP_NAME', 'app', '[-operation update -contents $EAR_FILE]')
AdminConfig.save()
EOF
# 获取集群成员并滚动重启
for node in fgedu01 fgedu02 fgedu03; do
echo "重启节点: $node"
# 停止节点上的服务器
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123 \
-c "AdminControl.invoke(AdminControl.queryNames('type=ClusterMember,process=server1,node=${node}Node,*'), 'stop')"
sleep 10
# 启动节点上的服务器
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123 \
-c "AdminControl.invoke(AdminControl.queryNames('type=ClusterMember,process=server1,node=${node}Node,*'), 'start')"
# 等待服务恢复
sleep 30
# 验证节点状态
curl -s http://${node}:9080/portal/health | grep -q "OK" && echo "节点 $node 更新成功" || echo "节点 $node 更新失败"
done
echo "滚动更新完成"
4. 验证更新结果
# 检查应用版本
curl -s http://localhost:9080/portal/version
{"version": "1.1.0", "buildTime": "2026-04-10 10:00:00"}
# 检查应用状态
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-c "print AdminControl.getAttribute(AdminControl.queryNames('type=Application,name=fgeduportal,*'), 'state')"
STARTED
# 更新结果
更新前版本:1.0.0
更新后版本:1.1.0
停机时间:0秒
更新状态:成功
4.3 WebSphere应用故障处理案例
WebSphere应用故障处理案例:
4.3.1 应用启动失败案例
故障现象:
应用启动失败,日志显示:
[4/10/26 10:00:00:000 CST] 00000001 SystemErr R java.lang.ClassNotFoundException: com.fgedu.service.FgeduService
故障诊断:
1. 检查类加载器配置
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-c “print AdminConfig.showAttribute(AdminConfig.getid(‘/Deployment:fgeduapp/’), ‘classloaderMode’)”
PARENT_FIRST
2. 检查应用包结构
jar -tf /WebSphere/apps/fgeduapp.ear | grep FgeduService
fgeduejb.jar/com/fgedu/service/FgeduService.class
3. 分析原因
– 应用使用自定义版本的库
– 类加载器配置为PARENT_FIRST
– WebSphere优先加载父类加载器的类
解决方案:
1. 修改类加载器配置为PARENT_LAST
AdminApp.edit(‘fgeduapp’, ‘[-ClassLoaderMode PARENT_LAST]’)
AdminConfig.save()
2. 重启应用
AdminControl.invoke(AdminControl.queryNames(‘type=Application,name=fgeduapp,*’), ‘stop’)
AdminControl.invoke(AdminControl.queryNames(‘type=ApplicationManager,*’), ‘startApplication’, ‘fgeduapp’)
3. 验证结果
print AdminControl.getAttribute(AdminControl.queryNames(‘type=Application,name=fgeduapp,*’), ‘state’)
STARTED
# 故障处理结果
问题原因:类加载器配置错误
解决方案:修改为PARENT_LAST
处理时间:10分钟
4.3.2 应用内存溢出案例
故障现象:
应用频繁崩溃,日志显示:
java.lang.OutOfMemoryError: Java heap space
故障诊断:
1. 检查JVM内存配置
ps -ef | grep java | grep server1
-Xms4096m -Xmx4096m
2. 分析堆转储
jmap -dump:format=b,file=/WebSphere/logs/heap.hprof $(pgrep -f “server1”)
# 使用MAT分析堆转储
# 发现大对象:com.fgedu.cache.DataCache
# 占用内存:2GB
3. 分析代码
# 发现缓存没有设置过期时间
# 数据持续增长直到OOM
解决方案:
1. 增加堆内存
AdminConfig.modify(jvm, ‘[[initialHeapSize 8192] [maximumHeapSize 16384]]’)
2. 修复代码
# 添加缓存过期策略
cache.expire(3600); // 1小时过期
cache.maxSize(10000); // 最大10000条
3. 启用OOM时堆转储
AdminConfig.modify(jvm, ‘[[genericJvmArguments “-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/WebSphere/logs/”]]’)
4. 重启应用
AdminConfig.save()
AdminNodeManagement.syncActiveNodes()
# 故障处理结果
问题原因:缓存无过期策略导致内存泄漏
解决方案:增加堆内存 + 修复代码
处理时间:2小时
Part05-风哥经验总结与分享
5.1 WebSphere应用部署检查清单
WebSphere应用部署检查清单:
部署前检查:
□ 应用包准备完成
□ 部署描述符正确
□ 资源配置完成(数据源等)
□ 部署目标确定
□ 备份当前版本
部署中检查:
□ 安装过程无错误
□ 配置参数正确
□ 资源映射正确
□ 安全角色配置
部署后检查:
□ 应用启动成功
□ 功能测试通过
□ 性能测试通过
□ 监控配置完成
□ 文档更新完成
# 部署验证脚本
#!/bin/bash
# deploy_verify.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
APP_NAME=fgeduapp
APP_URL=http://localhost:9080/fgeduapp
echo “=== 部署验证 ===”
# 应用状态
echo “1. 应用状态:”
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123 \
-c “print AdminControl.getAttribute(AdminControl.queryNames(‘type=Application,name=$APP_NAME,*’), ‘state’)” 2>/dev/null
# URL访问
echo “2. URL访问:”
curl -I $APP_URL 2>/dev/null | head -1
# 健康检查
echo “3. 健康检查:”
curl -s $APP_URL/health
# 日志检查
echo “4. 日志错误:”
grep -i error /WebSphere/app/profiles/AppSrv01/logs/server1/SystemOut.log | tail -3
echo “=== 验证完成 ===”
5.2 WebSphere应用常见问题
WebSphere应用常见问题及解决方案:
5.2.1 常见问题汇总
问题1:应用启动失败
原因:类找不到、配置错误、资源不足
解决:检查日志、修复配置、增加资源
问题2:应用响应慢
原因:代码问题、数据库慢、内存不足
解决:优化代码、优化数据库、调整JVM
问题3:应用崩溃
原因:内存溢出、线程死锁、系统资源不足
解决:分析堆转储、修复代码、增加资源
问题4:更新失败
原因:应用包损坏、配置冲突、资源锁定
解决:检查应用包、修复配置、重启服务器
问题5:会话丢失
原因:会话超时、会话复制失败
解决:调整超时、检查会话复制配置
问题6:安全认证失败
原因:角色映射错误、用户不存在
解决:检查角色映射、验证用户配置
5.3 WebSphere应用部署最佳实践
基于多年WebSphere运维经验,总结应用部署最佳实践:
5.3.1 部署原则
- 版本管理:使用版本号管理应用包
- 自动化部署:使用脚本实现自动化部署
- 灰度发布:先小范围验证再全量发布
- 回滚准备:保留旧版本便于快速回滚
5.3.2 部署建议
- 测试先行:生产部署前充分测试
- 监控完善:建立完善的监控体系
- 文档齐全:记录部署过程和配置
- 应急预案:准备回滚和应急方案
本文档详细介绍了WebSphere 9.0.5的应用部署与配置,包括应用部署概述、应用类型说明、应用结构、生命周期管理、部署操作、配置管理、更新发布等内容。通过学习本文档,读者可以掌握WebSphere应用部署的方法和最佳实践。更多视频教程www.fgedu.net.cn
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
