HACMP 5.x 完全手册,第 4 部分:脚本设计和经验共享.docx_第1页
HACMP 5.x 完全手册,第 4 部分:脚本设计和经验共享.docx_第2页
HACMP 5.x 完全手册,第 4 部分:脚本设计和经验共享.docx_第3页
HACMP 5.x 完全手册,第 4 部分:脚本设计和经验共享.docx_第4页
HACMP 5.x 完全手册,第 4 部分:脚本设计和经验共享.docx_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

脚本部分HACMP 的作用在于关键时刻能根据发生的情况自动通过预先制定好的策略进行相应的操作,如切换。使得用户经过短暂的中断即可继续使用服务。而对于用户来说,“服务可用”才是 HACMP 切换成功的标志,而这一点不光是 HACMP 配置本身,还大大倚赖于启停脚本的可用性。自 IBM 的 HACMP5205 以后,趋于稳定,BUG 很少。这使得 HACMP 切换不成功的主要原因集中在启停脚本的问题上。而很多时候,脚本的问题是非常隐蔽和难以测试的,所以在编写启停脚本时需要考虑周全,系统上线后要仔细维护。通过多年的实践,我们形成了自己的一套脚本编制方式,共享出来,供大家参考。回页首脚本规划启停方式对于启动脚本,完全放在后台,不影响 HACMP 的切换。对于停止脚本,通过后台启动,前台检查的方式进行,并使用清理 VG 的进程,确保停止成功。由于启停是由启停各个部件启动组成的,如 host1 的启停就是启停 tuxedo 和 xom 软件组成,host2 的启停就是有启动 DB 和 listener 组成。我们把主机的启动分割为多个部分,这样综合写出共性的公用脚本程序,这样虽然第一次编写测试这些公用程序会花费大量的时间和精力,但最终将大大减轻管理员的重复工作,简化了脚本的编写,保证了脚本的质量。文件存放目录表目录用途举例/usr/sbin/cluster/app存放 HA 启停脚本/usr/sbin/cluster/app/log存放启停应用的详细 log/home/scripts/hostname存放应用启停脚本/home/scripts/host1/tmp存放启停应用的 log/tmp/ha_app.out文件命名表:以主机名为特征进行命名,这样比较方便使用和区分。脚本命名规则举例HA 启动脚本start_hostnamestart_host1应用启动脚本start_hostname_appstart_host1_appHA 停止脚本stop_hostnamestop_host2应用停止脚本stop_hostname_appstop_host2_app启停应用 log/tmp/ha_app.out启动应用详细 logstart_hostname_appyyyymmddHHMMlogstart_host1_app200712241722.log停止应用详细 logstop_hostname_appyyyymmddHHMMlogstop_host1_app200712241722.log启停跟踪为了便于跟踪和阅读,应用的启停 log 不写入 /tmp/hacmp.out,而是另行输出到单独的 log。一般情况下,管理员只需跟踪 /tmp/ha_app.out 即可,一直等不到结束,再查看 /usr/sbin/cluster/app/log 下详细 log。host2root/tail -f /tmp/ha_app.out!Starting- host2 at Tue Dec 18 11:17:51 BEIST 2007Waiting- DB testdb - start,Press any key to cancel.DB testdb is started!Waiting- listener testdb - start,Press any key to cancel. testdb - LISTENER is started!Waiting- listener testdb port 1521- start,Press any key to cancel.LISTENER testdb port 1521 is listening!start eai1d1 successful! at Tue Dec 18 11:20:43 BEIST 2007!host2root/cd /usr/sbin/cluster/apphost2root/more start_host2_app200712181117.log!Starting- eai1d1 at Mon Dec 24 16:06:35 BEIST 2007Mon Dec 24 16:06:35 BEIST 2007Waiting- DB eaiz1dev - start,Press any key to cancel.SQL*Plus: Release 10.2.0.2.0 - Production on Mon Dec 24 16:06:35 2007Copyright (c) 1982, 2005, Oracle. All Rights Reserved.Connected to an idle instance.SQL ORACLE instance started.Total System Global Area 1543503872 bytesFixed Size 2071488 bytesVariable Size 369099840 bytesDatabase Buffers 1157627904 bytesRedo Buffers 14704640 bytes.Database mounted.Database opened.SQL Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.2.0 - 64bit Production编写注意事项:值得注意的是,经过测试和实际使用发现,由 HA 启动脚本时,如有嵌套,相对目录执行程序将不能生效,必须写成绝对路径。如下面的情况将导致错误:start_host1: nohup /home/scripts/host1/start_host1_app &start_host1_app: /home/scripts/comm/start_db.sh orarun testdb 1521start_db.sh: cd /home/scripts/commcheck_db_main.sh testdbcheck_db_main.sh not found需要改写为start_db.sh: /home/scripts/comm/check_db_main.sh testdb回页首启动脚本由于 HACMP 的启动和应用的启动可以分开,为避免应用脚本的启动不正常导致 HACMP 的报错,建议将 HACMP 的启动脚本简化,将启动应用的部分放在另一个应用启动脚本里。基于规划,start_host2_app 的启动脚本使用了公用程序 start_db.sh 和 wait_db_start.sh,源代码如下,供大家参考:start_db.sh代码:#start_db.sh oracle_sid listener_nameORACLE_SID=$1sqlplus / as sysdba $SCRIPTS_PATH/$HA_LOGnohup /home/scripts/comm/tail_log.sh start_app $SCRIPTS_PATH/$HA_LOG !|started!|Waiting-|listening!|starting-|successful! successful! /tmp/ha_app.out &sleep 1nohup /home/scripts/$MACHINE/start_$MACHINE_app ha $HA_LOG &exit 0回页首停止脚本由于必须保证应用正常停止,才切换过去,所以停止脚本的正常结束才是 HACMP 停止应用服务器成功的标志。停止脚本需要设定一个等待时间的阀值,超过这个阀值,将进行异常中止脚本的运行。此外,为了防止停止时出现停不下来的现象,导致 HACMP 超时报 too long 广播,需要注意以下停止脚本的编写:1. 停止数据库脚本停止数据库之前,必须记得先清理掉远程连接的用户,这样才能保证数据库能在可预测的时间内正常停止。如 oracle 数据库停止之前,建议增加以下代码:ps -ef|grep ora|grep $ORACLE_SID|grep LOCAL=NO|awk print kill -9 $2|sh如果数据库超过一段时间仍停不下来,必须启动异常停止脚本。2. 最后加上清理文件系统的脚本这一点很容易被忽略,因为有时即使应用正常停止,以下原因都可能导致导致 HACMP 不能 umount 这个文件系统 :o 有用户登录在该文件系统下;o 有其他程序使用了该文件系统下的库文件;o 该文件系统与应用无关,但正在被使用。结果均会最终导致 HACMP 停止不了该节点,切换失败。基于这个原因,我们编写了 kill_vg_user.sh, 使用起来非常方便有效,都放在 /home/scripts/comm 下。现提供源代码,供大家使用和指正。kill_vg_user.sh代码 :#kill_vg_user.sh vg_name#kill_vg_user.sh erpapp_vgif $# -le 0 ;then echo no para, example:kill_vg_user.sh erpapp_vg exitfi#mainSCRIPTS_PATH=dirname $0df -k|awk print $7 |grep -v Mounted /tmp/fs_mounted.txtfor i in lsvg -l $1 |grep -vE N/A|vg|MOUNT|awk print $7do if grep -c $i /tmp/fs_mounted.txt -ge 1 ; then echo kill_fs_user.sh $i $SCRIPTS_PATH/kill_fs_user.sh $ifi done调用的kill_fs_user.sh代码 :#kill_fs.sh fs_name#kill_fs.sh /oracleif df -k|grep $1|grep -v grep|awk print $7|grep -v 0-9a-zA-Z$1|grep -v $10-9a-zA-Z_-|wc -l -eq 1 ;then fuser -kcux $1fi实际使用stop_host1代码:MACHINE=host1VGNAME=host1vgHA_LOG=log/stop_$MACHINE_appdate +%C%y%m%d%H%M.logSCRIPTS_PATH=dirname $0if $SCRIPTS_PATH = . ;then SCRIPTS_PATH=pwdficd $SCRIPTS_PATH$HA_LOG /home/scripts/comm/tail_log.sh stop_app $SCRIPTS_PATH/$HA_LOG !|stopped!|Waiting-|stopping-|successful! successful! /tmp/ha_app.out &sleep 1/home/scripts/$MACHINE/stop_$MACHINE_app ha $HA_LOG 2 &1#stop_host1/home/scripts/comm/kill_vg_user.sh $VGNAMEexit 0回页首同步 HA 的脚本由于 HA 切换后,切换的时间有可能超过一天,而切换时很可能另一台机器已无法开启,不能拿到最新的 crontab 和后台相关脚本,所以 crontab 和脚本最好能每天自动同步。编写 sync_HA.sh在 host1 上编写 sync_HA.sh的代码:OMACHINE=host2rsh $OMACHINE cd /home/scripts;tar -cvf $OMACHINE_scripts.tar $OMACHINErcp $OMACHINE:/home/scripts/$OMACHINE_scripts.tar /home/scriptscd /home/scriptsrm -rf $OMACHINEtar -xvf $OMACHINE_scripts.tarrcp $OMACHINE:/var/spool/cron/crontabs/root /home/scripts/$OMACHINE/crontab_$OMACHINE 修改 Crontab 生效#sync crontab 0 0 * * * /home/script/sync_HA.sh /tmp/sync_HA.log 2&1同样在 host2 上编写,但注意 OMACHINE 修改为 host1。回页首经验共享回页首异常情况的人工干预本文没有详细描述 HACMP 异常情况的处理,这是因为每个系统每次异常可能情况都不一样,而且一般来说,安装 HACMP 的系统都是核心系统,给你留的时间会非常短,快速处理的要求更严格。所以,我们试图找到一个办法,来应对 HACMP 本身异常 99% 的异常情况,而对于脚本和系统参数的不匹配,只能通过找出问题所在来处理。场景 1:host1 出现问题,但 HACMP 没有切换成功,处于僵死状态1. 快速强制停止 host1 机器运行host1:halt -q2. 确保应用服务继续在 host2 上使用手工启动 host1_RG,smitty hacmp-System Management (C-SPOC)- HACMP Resource Group and Application Management -Bring a Resource Group Online选择 host1_RG,host2 Bring a Resource Group OnlineType or select values in entry fields.Press Enter AFTER making all desired changes. Entry Fields Resource Group to Bring Online host1_RGNode on Which to Bring Resource Group Online host2即在 host2 上启动 host1 的资源组。3. 检查和确认应用已可以访问。如发现仍然不正常,请参考场景 2 的第 3 步。4. 检查和修正问题。o host2: 强制停止 HACMP;o 重新启动 host1,确认无硬件问题;o 检查 HACMP 的环境,阅读 /tmp/hacmp.out 等 log,看看能否找出问题所在;o 修正 HACMP 或其它部分o 确认无误申请短暂停机时间,重起 HACMP 回原。场景 2:host1 出现问题,HACMP 切换过来,但处于僵死状态由于此场景的起因有很多,3,4 点只能根据具体系统来细化,但还是强烈建议每个系统编制一份手工切换手册,详细列明 HACMP 不可用的情况下如何手工启动应用,以备紧急情况使用。1. 停止 host1 机器运行host1:halt -q2. host2 强制停止 HACMP3. 检查和修正目前状况HACMP 异常情况修正表序号目前状况目前状况修正备注1服务 IP 地址无smitty tcpip 手工添加2vg 状况未 varyonvaryonvg 手工执行如果锁住加 varyonvg -bu3fs 状况未 mountmount 手工执行如损坏,执行 fsck -y4应用程序状况执行异常强制停止,重起确认 1-3 ok 再做4. 手工修正目前状况5. 检查和修正问题a. 重新启动 host1,确认无硬件问题;b. 检查 HACMP 的环境,阅读 /tmp/hacmp.out 等 log,看看能否找出问题所在;c. 修正 HACMP 或其它部分;d. 确认无误申请短暂停机时间,重起 HACMP 回原。回页首其它有用的经验HACMP 自动启动的实现有的系统,希望开机就把 HACMP 自动启动,也就不需要人工干预就启动了应用,这需要 clstart 时指明 :host1root/smitty clstart Start Cluster Services* Start now, on system restart or both restart Start Cluster Services on these nodes host1 BROADCAST message at startup? true Startup Cluster Information Daemon? false Reacquire resources after forced down ? false这样,HACMP 会自动才 /etc/initab 里增加以下一行hacmp6000:2:wait:/usr/es/sbin/cluster/etc/rc.cluster -boot -b # Bring up ClusterStop Cluster Services这样就实现了自动启动 HACMP 和应用。如果希望取消这种设定,需要运行 clstop:host1root/smitty clstopStop Cluster Services* Stop now, on system restart or both restart Stop Cluster Services on these nodes bgbcb04 BROADCAST cluster shutdown? true* Shutdown mode graceful可以看到 /etc/initab 里这一行消失了。HACMP 的 too long 报警广播的修正在有些系统运行很长时间的情况下,有可能停止的时间会超出我们预期,如 oracle 数据库的某些资源被交换到 Pagespace 里。缺省如果超过 180s,就会广播报警,直至 HACMP 异常。这时你可以修正这个参数,以避免广播出现。smitty hacmp-Extended Configuration -Extended Event Configuration -Change/Show Time Until Warning Max. Event-only Duration (in seconds) 360 Max. Resource Group Processing Time (in seconds) 360 Total time to process a Resource Group event 12 minutes and 0 seconds before a warning is displayed NOTE: Changes made to this panel must be propagated to the other nodes by Verifying and Synchronizing the cluster同样,修改后需要 HACMP 同步。HACMP 的 DMS 问题的修正DMS(deadman switch) 是用来描述系统 kernel extension 用的,它可以在系统崩溃前关闭系统,并产生 dump 文件,以供日后检查使用。DMS 存在的目的是为了保护共享外置硬盘及数据,当系统挂起时间长过一定限制时间时,DMS 会自动关闭该系统,由 HACMP 的备份节点接管系统,以保护数据和业务的正常进行,避免潜在的问题,特别是外置磁盘阵列。errpt 确认 DMS 的发生:LABEL: KERNEL_PANICIDENTIFIER: 225E3B63Date/Time: Thu Apr 25 21:26:16 Sequence Number: 609 Machine Id: 0040613A4C00 Node Id: localhostClass: SType: TEMPResource Name: PANICDescrptionSOFTWARE PROGRAM ABNORMALLY TERMINATEDRecommended Actions PERFORM PROBLEM DETERMINATION PROCEDURES Detail DataASSERT STRING PANIC STRINGDMS 起作用的原因主要有以下几点: 某种应用程序的优先级大于 clstrmgr deamon , 导致 clstrmgr 无法正常重置 DMS 计数器; 在系统上存在大量 I/O 操作,导致 CPU 没有时间相应 clstrmgr deamon; 内存泄漏或溢出问题; 大量的系统错误日志活动。换句话说,当以上情况出现时,HACMP 认为系统崩溃,会自动切换到另一台节点机上去,这是我们想要的结果吗?一般情况下,原有的缺省设置无需更改。但由于系统运行了较长时间后,负荷可突破原有设计(平均小于 45%),而且某些情况下会持续 100%,我们就不希望发生切换。如果发生了 DMS 造成的切换,我们先延长 HACMP 的确认的时间,即调整心跳线的诊断频率:smitty hacmp-Extended Topology Configuration -Configure HACMP Network Modules - Change a Network Module using Predefined Values 选择r232* Network Module Name rs232 Description RS232 Serial Protocol Failure Detection Rate Slow NOTE: Changes made to this panel must be propagated to the other nodes by Verifying and Synchronizing the cluster同样,记得同步 HACMP。如果还是发生 DMS 导致的 HACMP 切换,排除异常后,只好禁用 DMS 了,这点 IBM 不推荐,因为有可能造成切换时数据丢失或损坏。修改 rc.cluster 文件增加 -D 参数:host1root/ vi /usr/es/sbin/cluster/etc/rc.cluster if $VERBOSE

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论