HPUX的MC经典攻略

HP的MC软件是一个使用的比较广泛的CLUSTER成熟版本,以LICENSE核算,IBM的最高,下来就是HP的MC,但是下来的SUN的CLUSTER数量只相当于HP的七分之一。 
相对于IBM的HACMP。MC的操作比较麻烦,SAM和SMIT的比较,HP的有些参数需要重新启动机器,但是SMIT设计很合理,不需要重新启动,而且F5的提示可以清楚的看到相对的命令解释,细节方面考虑的很周到。IBM非OPS的双机的配置可以依靠SMIT完成,HP的MC虽然“号称”也可以通过SAM做,(条件是两台机器完全配置相同,LV骨骼已经做好)但是MC的实际过程,很多情况是必须要人工干预。 
下面开始介绍MC的实践步骤: 
做双机热备的时候需要提前准备: 
1:两台机器如果是用SCSI连接,必须避免SCSI ID的冲突问题 
HP提供了GSP模式,可以认为GSP就是HP的主板设置(BIOS),可以改动一台主机的ID,比如7改动为6,如果是三台做CLUSTER,那么就要7,6,5分别跳开ID号码。 
修改一台主机的SCSI ID。将各条SCSI线缆连接正确后,加电。在其中一台机器系统启动至提示“To discontiue,press any key within 10 seconds”时,按任意键进入“Main Menu:Enter command or menu>”提示下,输入“scsi”进入 
这个时候,可以看到目前主板上连接的SISI的ID号码,都是7 
“Service Menu:Enter command>”状态,输入 
Service Menu:Enter command> scsi rate 0/3/0/0 fast 
Service Menu:Enter command> scsi rate 0/6/0/0 fast 
上面有关rate的速率(FW,DF)设置可以忽略,即使你设置SCSI规格,主板会自动确认。 
Service Menu:Enter command> scsi init 0/3/0/0 6 
Service Menu:Enter command> scsi init 0/3/0/0 6 
关于 0/3/0/0 是主板上看到的硬件地址,用标签的形式在HP主机背后贴着,如需要可以参考HP系统管理手册。类似SUN的 probe-scsi-all 命令观察的结果。 
这样就将一台主机上的两块SCSI 卡的SCSI ID改成了6(缺省是7)。 
然后,输入 
Service Menu:Enter command> bo 
从默认设备(/dev/dsk/c1t2d0)启动, 
出现 
Interact with IPL (Y,N or Cancel)?> 
是否需要打断,回答“Y”,由此可进入维护模式,单用户模式,忽略quorum 模式,从SHELL修复模式 
选择“N”,继续引导系统。 
机器启动以后,强烈建议使用 ioscan –fnC全面搜索I/O设备,确定ID号码确实改动成“6”了,这个问题在重庆被我们的一个同事遭遇,改动了另外的一个SCSI的ID,该改动是“假改”,UNIX系统没有变,导致的问题是一台机器可以启动,另外一台总是底层BIOS启动后,无法进入系统级别的启动。 
2:在HP主机上安装MC的步骤 
首先,必须根据HP对所安装的软件提供的License(Customer Identifier) 在 
http://licensing.hp.com上申请该软件的Codeword。 
然后,将光盘(光盘的驱动是/dev/dsk/c3t2d0)放入驱动器中,MOUNT以后,在超级用户提示符下执行 
# swinstall –s /dev/dsk/c3t2d0 
进入交互式界面后,先加Codeword,才能在列表见到需安装的软件。最后,按其提示完成该软件的安装。需要注意,两台机器需要不同的密码。 
3:网络准备要万无一失 
关于网络的准备,一定要仔细,有图纸,IP规划,对应的机器主板结构示意图,如果网络有蹊跷,最好不要做MC 
比如:某些超市的客户启动了NFS服务,那么在以后的启动过程,会有SENDMAIL的冲突,更厉害的是某些用户使用变长子网掩码 ,使用一个错误的IP地址,主机位抢夺网络位的地址,结果是机器在启动NFS进程的时候死循环,或者启动SAM的时候突然死机。 
有的客户的应用软件编写的很厉害,直接改动/etc/inittab,或者某些ISP用户温柔的改动了解析地址的方式,开了/etc/nsswitch文件,结果是ping 一个地址是通的,但是telnet需要20分钟,MC不是很智能,后面的配置中MC会混淆ping和telnet,无法通过。 
IP的网段要隔绝好,不要出现局域网有重名的IP地址。 
推荐使用HP的三大底层法宝命令 
#lanscan 看主机的底层物理状况,是否UP,(注意这个命令无法看到IP层) 
#netstat –rn 看IP地址绑定是否正确 
#nslookup hny01 看自己可不可以解析自己 
改动.rhosts文件,/etc/hosts写入互相的主机名字,符合BERKELY协议,可以互相rlogin 
比如: 
hp1 10.0.0.1 
hp1 192.168.0.1 
hp2 10.0.0.2 
hp2 192.168.0.2 

在安腾的操作系统,本人感觉这个系统有些小问题,11.23版本,要非常规范的写hosts文件,比如: 
hp1 10.0.0.1 
hp1hb 192.168.0.1 
hp2 10.0.0.2 
hp2hb 192.168.0.2 
如果不这样写,主机会在cmquery时候有个LOCAL DOMAIN类似的错误 
11.23的SAM,KERNAL调节,CVUI有各种小问题,可见这个版本的不成熟。 

有的ISP用户用户,数据库结构主机名解析方式多样,干脆在.rhosts文件写入一个 
+ 也是一个很好的偷懒方法,但在OPS的ORACLE环境有一些小问题。 
在西安移动见过一个客户很厉害,MC配置说网络有问题,怎么也无法进行,我给了他#lanscan,#netstat –rn,#nslookup hny01三大命令,还是无法检测到问题,后来到现场一看,发现他的文件/etc/hosts里面的两个主机名的互相信任是用大写的字母,所以用三****宝也检测不出来 
VLAN,防火墙,MAC加密,网络聚合等一定要小心,有些网络环境会导致MC不稳定,而且很会发生很隐蔽的错误。 
4.磁盘柜 AutoRAID逻辑盘的建立划分 
用Autoraid Array 控制面板菜单操作,划分逻辑盘。 AutoRaid 的物理盘应用情况:一共4个9.1G硬盘:四个做RAID5。 
缺省情况下,Autoraid 有一个hotspare盘。 
将“ActiveSpare” 属性Disable,去掉hotspare盘,划分四个逻辑盘 
设备名大小如下: 
/dev/dsk/c4t1d0 and /dev/dsk/c5t0d0 100M (作为lock磁盘) 
/dev/dsk/c4t1d1 and /dev/dsk/c5t0d1 8G 
/dev/dsk/c4t1d2 and /dev/dsk/c5t0d2 8G 
/dev/dsk/c4t1d3 and /dev/dsk/c5t0d3 6G 
由于是双SCSI线缆备份系统,一个逻辑盘有两个设备名。 
注意:使用pvcreate –f强制格式化命令以后,/dev/rdsk/里面的设备才会有/dev/dsk里面的驱动,否则的话是raw设备,不可以被vg使用。 

阵列柜的错误可以是用千奇百怪形容!尤其是升级,重新安装的时候,我随便点几个错误,具体事情还是很复杂 

A5149用来接SC10,JBOD做MC,里面有一个跳线的奇怪故障 
COMBO卡做MC,无法跳ID号码,主机只有冲突不断 
AUTO RAID有的老硬盘有隐患!加电状态可以REBUILD,断电重启动,会发生集体瘫痪,主要是因为电源,风扇支持的硬盘匹配合作有问题 
VA7100有一个硬盘FIREWARE版本的问题,会有奇怪的问题 
FC60问题更多,电池错误,一个柜子瘫痪,需要amutil逐个恢复,确认, 
但是FC60控制卡比较结实,往往他的错误是由于其他环境引起,一般不要怀疑控制卡 
AUTO RAID的SCSI电缆如果有SCSI RESET错误,会让OPS 或者裸文件的ORACLE的当前RBS有巨大损失,导致崩溃!用ILT电缆保护也没用,小心为上 
MSA做MC的时候,用diskinfo可以查看硬盘,但是无法格式化,因为MSA本身的结构问题 
EVA系列本身很好用,注意SECUER PATH多路径问题和硬盘对两个主机的PRESATATION,应该是宣告的意思。
下面是双机的配置方式: 
1.这一步重要是两台主机的LV,VG设置,可以理解是为MC设置“骨骼” 
A:在主机hnyb01上创建卷组vgdb和vglock 
# cd /dev 
# mkdir vglock vgdb 
# mknod /dev/vglock/group c 64 0x010000 
# mknod /dev/vgdb/group c 64 0x020000 
#pvcreate –f /dev/rdsk/c4t1d0 
#pvcreate –f /dev/rkdsk/c4t1d1 
#pvcreate –f /dev/rkdsk/c4t1d2 
#pvcreate –f /dev/rkdsk/c4t1d3 
#pvcreate –f /dev/rkdsk/c5t0d0 
#pvcreate –f /dev/rkdsk/c5t0d1 
#pvcreate –f /dev/rkdsk/c5t0d2 
#pvcreate –f /dev/rkdsk/c5t0d3 
#vgcreate /dev/vglock /dev/dsk/c5t0d0 /dev/dsk/c4t1d0 
#vgcreate /dev/vgdb /dev/dsk/c5t0d1 /dev/dsk/c5t0d2 /dev/dsk/c5t0d3 /dev/dsk/c4t1d1 /dev/dsk/c4t1d2 /dev/dsk/c4t1d3 
在主机hnyb01上执行,创建逻辑卷。 
# lvcreate –L 20000 –n oradata /dev/vgdb 
# lvcreate –L 1000 –n oralog1 /dev/vgdb 
# lvcreate –L 1000 –n oralog2 /dev/vgdb 
# lvcreate –L 1000 –n oralog3 /dev/vgdb 
# newfs –F vxfs /dev/vgdb/roradata 
# newfs –F vxfs /dev/vgdb/roralog1 
# newfs –F vxfs /dev/vgdb/roralog2 
# newfs –F vxfs /dev/vgdb/roralog3 
在两台主机分别建立mount 点。 
# cd / 
# mkdir oradata oralog1 oralog2 oralog3 
注意:A的步骤其实也可以使用简单的方法,使用SAM直接建立VG,LV就可以了,A的方法需要对HP的LVM有相当的了解。 

B:在主机hnyb02上创建group文件 
# cd /dev 
# mkdir vgdb vglock 
# mknod /dev/vglock/group c 64 0x010000 
# mknod /dev/vgdb/group c 64 0x020000 
注意:# mknod /dev/vglock/group c 64 0x010000 
# mknod /dev/vgdb/group c 64 0x020000 
这两个命令使用的0x020000,0x010000一定要和主机hny01要严格符合,否则下一步会有错误。在IBM系统的HACMP中这个步骤是不需要手工做的。 

C:在主机hnyb01上将卷组映射复制到指定文件。 
# vgexport –p –s –m /tmp/vgdb.map /dev/vgdb 
# vgexport –p –s –m /tmp/vglock.map /dev/vglock 
将文件复制到hnyb02上: 
# rcp /tmp/vgdb.map hnyb01:/tmp/vgdb.map 
# rcp /tmp/vglock.map hnyb01:/tmp/vglock.map 
将映射文件导入卷组数据,在hnyb02上输入: 
# vgimport –s –m /tmp/vgdb.map /dev/vgdb 
# vgimport –s –m /tmp/vglock.map /dev/vglock 
注意:# vgimport –s –m /tmp/vgdb.map /dev/vgdb 
# vgimport –s –m /tmp/vglock.map /dev/vglock 
在两台主机配置完全相同的情况,使用SAM可以简单完成,但是有的时候两台主机不是一个型号,或者型号相同的主机插的卡位置不同,就会有以下问题: 
从主机一看磁盘的驱动是: 
/dev/dsk/c4t1d0 and /dev/dsk/c5t0d0 100M 
/dev/dsk/c4t1d1 and /dev/dsk/c5t0d1 8G 
/dev/dsk/c4t1d2 and /dev/dsk/c5t0d2 8G 
/dev/dsk/c4t1d3 and /dev/dsk/c5t0d3 6G 
可能主机二看到的是: 
/dev/dsk/c3t1d0 and /dev/dsk/c6t0d0 100M 
/dev/dsk/c3t1d1 and /dev/dsk/c6t0d1 8G 
/dev/dsk/c3t1d2 and /dev/dsk/c6t0d2 8G 
/dev/dsk/c3t1d3 and /dev/dsk/c6t0d3 6G 
使用系统观察,确实没错,主机二的驱动无法和主机一的匹配,这个时候,在主机二上要改动下面的语句: 
# vgimport –s –m /tmp/vgdb.map /dev/vgdb 
# vgimport –s –m /tmp/vglock.map /dev/vglock 
变为使用特定参数的步骤: 
# vgimport –s –m /tmp/vgdb.map /dev/vgdb /dev/dsk/c3t1d1 /dev/dsk/c6t0d1 
/dev/dsk/c3t1d2 /dev/dsk/c6t0d2 /dev/dsk/c3t1d3 /dev/dsk/c6t0d3 
# vgimport –s –m /tmp/vglock.map /dev/vglock /dev/dsk/c3t1d0 /dev/dsk/c6t0d0 
曾经在中旅尚洋公司的方案里面,因为涉及到一个旧型号K系列的HP主机使用的10.0操作系统升级到11.0,和新型号L系列的HP主机做MC,需要保持同一个操作系统,所以需要上面的特定参数的步骤 
在特定的一个系统,需要使用Y字线缆,也需要使用特定参数的步骤,但是原理相通的。 
强调:做这个前要先复制/etc/lvmtab文件,我见过多次有人误操作vgscan 让这个文件丢失的情况,也有乱用导致ORACLE的VG丢失的情况。 
做make_recovery要小心,一定要先备份 
cp /etc/lvmtab /etc/lvmtab.old 
这个是因为这个make_recovery机制决定的,他只恢复vg00 

如果用veritas的文件结构,有的时候要用 mediainit非常手段,实在是不可理解。 

2.系统级别的MC配置 
A: 指定群集节点和生成群集配置模版文件并改动模版文件 
# cmquerycl –v –C /etc/cmcluster/cmclconf.ascii –n hnyb01 –n hnyb02 
注意:有时候系统的CLUSTER里面主机不止两个,要在-n跟上各个主机的名字. 
两个主机版本不同,密码不同有时候会有问题 
生成文件后,用vi改动,红色表示需要人工干预的参数
#vi /etc/cmcluster/cmclconf.ascii 

# ********************************************************************** 
# ********* HIGH AVAILABILITY CLUSTER CONFIGURATION FILE *************** 
# ***** For complete details about cluster parameters and how to **** 
# ***** set them, consult the cmquerycl(1m) manpage or your manual. **** 
# ********************************************************************** 

# Enter a name for this cluster. This name will be used to identify the 
# cluster when viewing or manipulating it. 

CLUSTER_NAME cluster 
#注意:给CLUSTER起一个名字,方便记忆就可以,没有固定约束 
# Cluster Lock Device Parameters. This is the volume group that 
# holds the cluster lock which is used to break a cluster formation 
# tie. This volume group should not be used by any other cluster 
# as cluster lock device. 

FIRST_CLUSTER_LOCK_VG /dev/vg_lock 
#注意:lock盘在HP和IBM都有类似的概念,用来仲裁双机的占领vg权利 
NETWORK_INTERFACE lan0 
HEARTBEAT_IP 192.1.1.1 
NETWORK_INTERFACE lan1 
HEARTBEAT_IP 10.10.10.9 
NETWORK_INTERFACE lan2 
FIRST_CLUSTER_LOCK_PV /dev/dsk/c5t0d0 
#注意:物理路径要符合,不要把vgdb和vglock两个混淆 
# List of serial device file names 
# For example: 
# SERIAL_DEVICE_FILE /dev/tty0p0 

# Warning: There are no standby network interfaces for lan0. 
# Warning: There are no standby network interfaces for lan2. 

NODE_NAME hnyb02 
NETWORK_INTERFACE lan0 
HEARTBEAT_IP 192.1.1.2 
NETWORK_INTERFACE lan1 
HEARTBEAT_IP 10.10.10.10 
NETWORK_INTERFACE lan2 
FIRST_CLUSTER_LOCK_PV /dev/dsk/c5t0d0 
#注意:物理路径要符合,不要把vgdb和vglock两个vg的物理地址混淆 

# Cluster Timing Parmeters (microseconds). 

HEARTBEAT_INTERVAL 1000000 
NODE_TIMEOUT 2000000 
#注意:节点轮询时间和超时设置,一般不动,毫秒为单位 

# Configuration/Reconfiguration Timing Parameters (microseconds). 

AUTO_START_TIMEOUT 600000000 
NETWORK_POLLING_INTERVAL 2000000 
#注意:网络启动时间,失败时候的顺序,一般不动, 毫秒为单位 
# Package Configuration Parameters. 
# Enter the maximum number of packages which will be configured in the cluster. 
# You can not add packages beyond this limit. 
# This parameter is required. 
MAX_CONFIGURED_PACKAGES 1 
#注意:MC里面需要预留几个程序包,有的环境是2个,3个,多个程序包多会耗费一定的内存 
如果程序包只预留了一个,以后要加程序包,这个参数不可逆,所以要重新做MC生成模版 

# List of cluster aware Volume Groups. These volume groups will 
# be used by package applications via the vgchange -a e command. 
# For example: 
# VOLUME_GROUP /dev/vgdatabase. 
# VOLUME_GROUP /dev/vg02. 

VOLUME_GROUP /dev/vglock 
VOLUME_GROUP /dev/vgdb 
#注意:要给出和主机对应的vg,有的时候有3,4个vg 

B: 验正群集配置 
# cmcheckconf –k –v –C /etc/cmcluster/cmclconf.ascii 
如果没有报错信息,显示完成信息,即表示通过。有的时候有一些有关CDROM的小警告,但是只要系统建议你可以做下一步,只要提示是complete就OK 

C:在节点间分发配置文件 
# vgchange –a y /dev/vglock 
# cmapplyconf –k –v –C /etc/cmcluster/cmclconf.ascii 
#vgchange –a n /dev/vglock 
注意: # vgchange –a y /dev/vglock 
因为分发是正式的要发二进制的控制文件,一定要提前激活vglock的属性,否则以后MC启动有小问题 

D:检验一下,处理一些小问题 

为了避免卷组的自动激活,vg的属性不属于本地的vg00管理,要交给MC的vlmd进程接管. 
注意:编辑所有节点上的/etc/lvmrc文件。将AUTO_VG_ACTIVATE设为0。 
运行群集 
# cmruncl –f –v 
查看群集状态 
# cmviewcl –v 
停用群集 
# cmhaltcl –f –v 
这个时候没有带任何程序包的MC就配置好了,如果去听HP的课程,那么大概就要结束了,可是有关怎样带动ORACLE包启动和监控,HP是不做讲解的.但是代理商和用户最关心的问题是关于ORACLE程序包如何和HP-UX配合的问题. 

2.应用级别的ORACLE程序包配置 

A: 创建程序包配置模板, 编辑这些模板文件,以指定程序包名称、按优先级排序的节点列表、控制脚本的位置以及各个程序包的故障切换参数。
# mkdir /dev/cmcluster/pkg1 
# cmmakepkg –p /etc/cmcluster/pkg1/pkg1.ascii 
#vi /etc/cmcluser/pkg1/pkg1.ascii 
# ********************************************************************** 
# ****** HIGH AVAILABILITY PACKAGE CONFIGURATION FILE (template) ******* 
# ********************************************************************** 


PACKAGE_NAME pkg1 
#注意:起一个程序包的名字,和/dev/cmcluster/pkg1吻合 

# Enter the failover policy for this package. This policy will be used 
# to select an adoptive node whenever the package needs to be started. 
# The default policy unless otherwise specified is CONFIGURED_NODE. 
# This policy will select nodes in priority order from the list of 
# NODE_NAME entries specified below. 

# The alternative policy is MIN_PACKAGE_NODE. This policy will select 
# the node, from the list of NODE_NAME entries below, which is 
# running the least number of packages at the time this package needs 
# to start. 

FAILOVER_POLICY CONFIGURED_NODE 

#注意:主机有故障,程序包应该以何种方式切换到下一个主机,在一般的两台主机的CLUSTER里面,按照默认数值就可以 
# Enter the failback policy for this package. This policy will be used 
# to determine what action to take when a package is not running on 
# its primary node and its primary node is capable of running the 
# package. The default policy unless otherwise specified is MANUAL. 
# The MANUAL policy means no attempt will be made to move the package 
# back to its primary node when it is running on an adoptive node. 

# The alternative policy is AUTOMATIC. This policy will attempt to 
# move the package back to its primary node whenever the primary node 
# is capable of running the package. 

FAILBACK_POLICY MANUAL 

#注意:主机恢复正常,程序包应该以何种方式回到主机上 
# Enter the names of the nodes configured for this package. Repeat 
# this line as necessary for additional adoptive nodes. 
# Order IS relevant. Put the second Adoptive Node AFTER the first 
# one. 
# Example : NODE_NAME original_node 
# NODE_NAME adoptive_node 

NODE_NAME hnyb01 
NODE_NAME hnyb02 


# Enter the complete path for the run and halt scripts. In most cases 
# the run script and halt script specified here will be the same script, 
# the package control script generated by the cmmakepkg command. This 
# control script handles the run(ning) and halt(ing) of the package. 
# If the script has not completed by the specified timeout value, 
# it will be terminated. The default for each script timeout is 
# NO_TIMEOUT. Adjust the timeouts as necessary to permit full 
# execution of each script. 
# Note: The HALT_SCRIPT_TIMEOUT should be greater than the sum of 
# all SERVICE_HALT_TIMEOUT specified for all services. 

RUN_SCRIPT /etc/cmcluster/pkg1/control.sh start 
RUN_SCRIPT_TIMEOUT NO_TIMEOUT 
HALT_SCRIPT /etc/cmcluster/pkg1/control.sh stop 
HALT_SCRIPT_TIMEOUT NO_TIMEOUT 

#注意: /etc/cmcluster/pkg1/control.sh 
这个文件很重要,在MC里面有这呈上启下的作用,一旦开始,就会带动程序包起来, 
MC是骨骼,那么这个文件就是具体的肌肉,由他带动后面的程序包运行 


# Example: SERVICE_NAME DB_SERVICE 
# SERVICE_FAIL_FAST_ENABLED NO 
# SERVICE_HALT_TIMEOUT 300 

# To configure a service, uncomment the following lines and 
# fill in the values for all of the keywords. 

SERVICE_NAME dbservice 
SERVICE_FAIL_FAST_ENABLED NO 
SERVICE_HALT_TIMEOUT 300 

#注意:名字一定要和后面的/etc/cmcluster/pkg1/control.sh文件的名字吻合 
SERVICE_FAIL_FAST_ENABLED表示是否发生TOC(全面恢复),这个概念比较复杂,回答默认就可以了
# Enter the network subnet name that is to be monitored for this package. 
# Repeat this line as necessary for additional subnet names. If any of 
# the subnets defined goes down, the package will be switched to another 
# node that is configured for this package and has all the defined subnets 
# available. 

SUBNET 10.10.10.0 

#注意:公网的网络,程序包可以在里面漂移.和心跳网络要区别 


# Example : RESOURCE_NAME /net/interfaces/lan/status/lan0 
# RESOURCE_POLLING_INTERVAL 120 
# RESOURCE_START AUTOMATIC 
# RESOURCE_UP_VALUE = RUNNING 
# RESOURCE_UP_VALUE = ONLINE 

# Means that the value of resource /net/interfaces/lan/status/lan0 
# will be checked every 120 seconds, and is considered to 
# be 'up' when its value is "RUNNING" or "ONLINE". 

# Uncomment the following lines to specify Package Resource Dependencies. 

#RESOURCE_NAME  
#RESOURCE_POLLING_INTERVAL  
#RESOURCE_START  
#RESOURCE_UP_VALUE   [and  
#注意:上面涉及EMC(资源监控)部分,不用改动 

# The default for PKG_SWITCHING_ENABLED is YES. In the event of a 
# failure, this permits the cluster software to transfer the package 
# to an adoptive node. Adjust as necessary. 

PKG_SWITCHING_ENABLED YES 

#注意:程序包是否有切换属性,默认就可以 
# The default for NET_SWITCHING_ENABLED is YES. In the event of a 
# failure, this permits the cluster software to switch LANs locally 
# (transfer to a standby LAN card). Adjust as necessary. 

NET_SWITCHING_ENABLED YES 

#注意:某台主机指定不可以接受某个程序包的属性,默认就可以 
# The default for NODE_FAIL_FAST_ENABLED is NO. If set to YES, 
# in the event of a failure, the cluster software will halt the node 
# on which the package is running. Adjust as necessary. 

NODE_FAIL_FAST_ENABLED NO 
#注意:是否等待主机的软信号,默认就可以 
B:创建并编写程序包控制脚本 
# cmmakepkg –s /etc/cmcluster/pkg1/control.sh 
#vi /etc/cmcluster/pkg1/control.sh 
#"(#) A.11.09 $Date: 08/06/1999 $" 
# ********************************************************************** 
# * * 
# * HIGH AVAILABILITY PACKAGE CONTROL SCRIPT (template) * 
# * * 
# * Note: This file MUST be edited before it can be used. * 
# * * 
# ********************************************************************** 

# UNCOMMENT the variables as you set them. 

# Set PATH to reference the appropriate directories. 
PATH=/usr/bin:/usr/sbin:/etc:/bin 
#注意:按照默认数值就可以了,不要加ORACLE的环境变量 
# VOLUME GROUP ACTIVATION: 
# Specify the method of activation for volume groups. 
# Leave the default ("VGCHANGE="vgchange -a e") if you want volume 
# groups activated in exclusive mode. This assumes the volume groups have 
# been initialized with 'vgchange -c y' at the time of creation. 

# Uncomment the first line (VGCHANGE="vgchange -a e -q n"), and comment 
# out the default, if your disks are mirrored on separate physical paths, 

# Uncomment the second line (VGCHANGE="vgchange -a e -q n -s"), and comment 
# out the default, if your disks are mirrored on separate physical paths, 
# and you want the mirror resynchronization to ocurr in parallel with 
# the package startup. 

# Uncomment the third line (VGCHANGE="vgchange -a y") if you wish to 
# use non-exclusive activation mode. Single node cluster configurations 
# must use non-exclusive activation. 

# VGCHANGE="vgchange -a e -q n" 
# VGCHANGE="vgchange -a e -q n -s" 
# VGCHANGE="vgchange -a y" 
VGCHANGE="vgchange -a e" # Default 
#注意:按照默认数值 
#如果是OPS,RAC,那么这里要改动为vgchange -a s,不过需要安装不同的MC版本 
# VOLUME GROUPS 
# Specify which volume groups are used by this package. Uncomment VG[0]="" 
# and fill in the name of your first volume group. You must begin with 
# VG[0], and increment the list in sequence. 

# For example, if this package uses your volume groups vg01 and vg02, enter: 
# VG[0]=vg01 
# VG[1]=vg02 

# The volume group activation method is defined above. The filesystems 
# associated with these volume groups are specified below. 

VG[0]=vgdb 
VG[1]=vglock 
#注意:程序包需要几个vg,就加几个vg 
# FILESYSTEMS 
# Specify the filesystems which are used by this package. Uncomment 
# LV[0]=""; FS[0]=""; FS_MOUNT_OPT[0]="" and fill in the name of your first 
# logical volume, filesystem and mount option for the file system. You must 
# begin with LV[0], FS[0] and FS_MOUNT_OPT[0] and increment the list in 
# sequence. 

# For example, if this package uses the file systems pkg1a and pkg1b, 
# which are mounted on the logical volumes lvol1 and lvol2 with read and 
# write options enter: 
# LV[0]=/dev/vg01/lvol1; FS[0]=/pkg1a; FS_MOUNT_OPT[0]="-o rw" 
# LV[1]=/dev/vg01/lvol2; FS[1]=/pkg1b; FS_MOUNT_OPT[1]="-o rw" 

# The filesystems are defined as triplets of entries specifying the logical 
# volume, the mount point and the mount options for the file system. Each 
# filesystem will be fsck'd prior to being mounted. The filesystems will be 
# mounted in the order specified during package startup and will be unmounted 
# in reverse order during package shutdown. Ensure that volume groups 
# referenced by the logical volume definitions below are included in 
# volume group definitions above. 

LV[0]="/dev/vgdb/oradata"; FS[0]="/oradata"; FS_MOUNT_OPT[0]="" 
LV[1]="/dev/vgdb/oralog1"; FS[1]="/oralog1"; FS_MOUNT_OPT[1]="" 
LV[2]="/dev/vgdb/oralog2"; FS[2]="/oralog2"; FS_MOUNT_OPT[2]="" 
LV[3]="/dev/vgdb/oralog3"; FS[3]="/oralog3"; FS_MOUNT_OPT[3]="" 
#注意:如果是裸设备安装的ORACLE,不需要有上面lv, mount点的设置.这个情况说明ORACLE是建立在HP-UX文件系统上的,
# FILESYSTEM UNMOUNT COUNT 
# Specify the number of unmount attempts for each filesystem during package 
# shutdown. The default is set to 1. 
FS_UMOUNT_COUNT=1 
#注意:按照默认数值 
# IP ADDRESSES 
# Specify the IP and Subnet address pairs which are used by this package. 
# Uncomment IP[0]="" and SUBNET[0]="" and fill in the name of your first 
# IP and subnet address. You must begin with IP[0] and SUBNET[0] and 
# increment the list in sequence. 

# For example, if this package uses an IP of 192.10.25.12 and a subnet of 
# 192.10.25.0 enter: 
# IP[0]=192.10.25.12 
# SUBNET[0]=192.10.25.0 # (netmask=255.255.255.0) 

# Hint: Run "netstat -i" to see the available subnets in the Network field. 

# IP/Subnet address pairs for each IP address you want to add to a subnet 
# interface card. Must be set in pairs, even for IP addresses on the same 
# subnet. 

IP[0]=10.10.10.8 
SUBNET[0]=10.10.10.0 
#注意:这个地址是程序包ORACLE的漂移IP地址,不要和两个主机的真实IP,心跳IP混淆 

# SERVICE NAMES AND COMMANDS. 
# Specify the service name, command, and restart parameters which are 
# used by this package. Uncomment SERVICE_NAME[0]="", SERVICE_CMD[0]="", 
# SERVICE_RESTART[0]="" and fill in the name of the first service, command, 
# and restart parameters. You must begin with SERVICE_NAME[0], SERVICE_CMD[0], 
# and SERVICE_RESTART[0] and increment the list in sequence. 

# For example: 
# SERVICE_NAME[0]=pkg1a 
# SERVICE_CMD[0]="/usr/bin/X11/xclock -display 192.10.25.54:0" 
# SERVICE_RESTART[0]="" # Will not restart the service. 

# SERVICE_NAME[1]=pkg1b 
# SERVICE_CMD[1]="/usr/bin/X11/xload -display 192.10.25.54:0" 
# SERVICE_RESTART[1]="-r 2" # Will restart the service twice. 

# SERVICE_NAME[2]=pkg1c 
# SERVICE_CMD[2]="/usr/sbin/ping" 
# SERVICE_RESTART[2]="-R" # Will restart the service an infinite 
# number of times. 

# Note: No environmental variables will be passed to the command, this 
# includes the PATH variable. Absolute path names are required for the 
# service command definition. Default shell is /usr/bin/sh. 
#注意:上面是HP举的一个很无聊的例子,表示你可以启动一个程序包,这里是一个X-WIDONWS界面的钟表,一个主机关闭,但是钟表还在转动,表明MC确实可以做到高可用性, 
这个例子只有在上培训课的时候才用,没有任何实际价值. 

SERVICE_NAME[0]="dbservice" 
SERVICE_CMD[0]="/etc/cmcluster/pkg1/oracle.sh monitor" 
SERVICE_RESTART[0]="" 
#注意:要和文件/etc/cmcluster/pkg1/pkg1.ascii的SERVICE_NAME吻合 
SERVICE_CMD[0]="/etc/cmcluster/pkg1/oracle.sh monitor" 
为什么要用 monitor呢?后面对这个文件详细解释 
SERVICE_RESTART[0]="" 写成 “-r 2”也可以,说明失败以后可以再重新启动两次.这个参数不重要 

# DEFERRED_RESOURCE NAME 
# Specify the full path name of the 'DEFERRED' resources configured for 
# this package. Uncomment DEFERRED_RESOURCE_NAME[0]="" and fill in the 
# full path name of the resource. 

#DEFERRED_RESOURCE_NAME[0]="" 

# DTC manager information for each DTC. 
# Example: DTC[0]=dtc_20 
#DTC_NAME[0]= 
#注意:资源的延迟特性,无所谓的参数 

# START OF CUSTOMER DEFINED FUNCTIONS 

# This function is a place holder for customer define functions. 
# You should define all actions you want to happen here, before the service is 
# started. You can create as many functions as you need. 

function customer_defined_run_cmds 

# ADD customer defined run commands. 
# do nothing instruction, because a function must contain some command. 
/etc/cmcluster/pkg1/oracle.sh start 
test_return 51 

#如果是什么事情也不做,可以加一个: 表示空包运行 

#强烈注意: /etc/cmcluster/pkg1/oracle.sh start 
一定要写这个sh,因为你要使用ORACLE的启动脚本 
# This function is a place holder for customer define functions. 
# You should define all actions you want to happen here, before the service is 
# halted. 

function customer_defined_halt_cmds 

# ADD customer defined halt commands. 
# do nothing instruction, because a function must contain some command. 
# /etc/cmcluster/pkg1/oracle.sh shutdown 
/etc/cmcluster/pkg1/oracle.sh halt 
test_return 52 

#强烈注意: /etc/cmcluster/pkg1/oracle.sh halt 
一定要写这个sh,因为你要使用ORACLE的关闭脚本 
# END OF CUSTOMER DEFINED FUNCTIONS 

######################################################################## 
####################################################################### 
#######################################################################
下面是MC怎样启动,关闭的程序,也许这就是为什么MC价值两千美圆的主要原因, 

程序的主要思路,流程简单介绍: 

按照给定的各个变量启动MC 
activate_volume_group 
获得vg的模式设定变量,vg属于独自占用状态(vgchange –e),如果是OPS版本,那么这里的程序要变化为有share模式(vgchange –s)的属性 
check_and_mount 
各个文件系统mount起来 
add_ip_address 
ip加上 
get_ownership_dtc 
托管资源控制 
customer_defined_run_cmds 
MC开始托管程序包 
start_services 
按照变量51启动程序 

关闭MC: 


halt_services 
按照变量52关闭程序 
customer_defined_halt_cmds 
MC开始停止程序包 
disown_dtc 
放开资源控制 
remove_ip_address 
摆脱IP 
umount_fs 
umount 文件系统 
deactivate_volume_group 
放开vg控制权利 


没有编程序基础,没有耐心就不要往下看了,估计IBM,VERITAS的CLUSTER和MC的程序差不多 
######################################################################## 
####################################################################### 
######################################################################## 



fi 
C: COPY控制脚本 
# rcp /etc/cmcluster/pkg1/control.sh hnyb02:/etc/cmcluter/pkg1/control.sh 
D:验证模版文件 
# cmcheckconf –v –P /etc/cmcluster/pkg1/pkg1.ascii 
如果没有报错信息,显示完成信息,即表示通过。有的时候有一些有关CDROM的小警告,但是只要系统建议你可以做下一步,只要提示是complete就OK 
E: 在节点间分发配置文件 
# vgchange –a y /dev/vglock 
# cmapplyconf –v –P /etc/cmcluster/pkg1/pkg1.ascii 
#vgchange –a n /dev/vglock 
注意: # vgchange –a y /dev/vglock 
因为分发是正式的要发二进制的控制文件,一定要提前激活vglock的属性,否则以后MC启动有BUG 

这个时候MC已经全部配置好了,但是需要提醒的是/etc/cmcluster/pkg1/oracle.sh这个重要的文件,HP公司给主要的数据库厂商(除了DB2)都提供了很好的监控脚本,但是用户要根据具体的情况改动. 
这个脚本是不是免费的,在/opt/cluster里面会找到原始脚本,但是通过很多渠道可以免费得到. 
F : oracle.sh参数分析 

#!/usr/bin/sh 
#VERSION="@(#) B.01.04 $Revision: 1.13 $ $Date: 98/07/23 10:18:02 $" 
# ***************************************************************************** 
# ******** Startup, Shutdown and Monitor Script for ORACLE (Template) ********* 
# ***************************************************************************** 
# ********** Note: This file MUST be edited before it can be used. ************ 
# ***************************************************************************** 
processes when 
# there was more than one Oracle instance running. 

ORA_7_3_X=no 
ORA_8_0_X=no 
ORA_8_1_X=yes 
#注意:用户的ORACLE版本 
SID_NAME=ora82 
#注意:实例名 
ORACLE_HOME=/home/oracle/app/oracle/product/8.1.6 
#注意:设置变量 
SQLNET=no 
NET8=yes 
#注意:使用NET8连接客户端 
LISTENER_NAME= 
LISTENER_PASS= 
#注意:不用写 
MONITOR_INTERVAL=30 
#注意:30秒一个询问 
PACKAGE_NAME=pkg1 
#注意:程序包名字 
TIME_OUT=10 
#注意:超时错误 
set -A MONITOR_PROCESSES ora_pmon_${SID_NAME} ora_dbw0_${SID_NAME} ora_ckpt_${SID_NAME} ora_smon_${SID_NAME} ora_lgwr_${SID_NAME} ora_reco_${SID_NAME} ora_arc0_${SID_NAME} 

#强烈注意:如果ORACLE某些进程没有使用,比如没有使用归档进程,( ora_arc0_${SID_NAME})一定不可以在上面监控,否则MC认为你的ORACLE总是有问题,强制停止ORACLE进程 
############################################################################################################################################################ 
下面的程序是HP根据你设置好的变量,详细的监控你的ORACLE的主要进程,即使你的ORACLE主要的6个进程是好的,但是有一个进程发生问题,HP一样会发生程序包的切换. 
############################################################################## 
############################################################################## 
HOST=`hostname` 
DATE=`date` 
PATH=${ORACLE_HOME}/bin:/sbin:/usr/bin:/usr/sbin:/etc:/bin 
export ORACLE_SID=${SID_NAME} 
export ORACLE_HOME 


F: 运行群集 
# cmruncl –f –v 
查看群集状态 
# cmviewcl –v 
停用群集 
# cmhaltcl –f –v 


不属于双机MC的注意问题 
1:HP为了保护启动盘,使用了双保险 
一个是备份全部vg00的内容,有任何问题出现,仍掉硬盘,用磁带机启动,全面回忆主机vg00的内容,时间需要50到70分钟. 
还有就是使用MIRROR DISK软件保护系统, 有任何问题出现,仍掉一个硬盘,使用另外一个硬盘启动, 全面回忆主机vg00的内容,启动.时间需要5到10分钟 

2:在HP上安装ORACLE,前提条件是 
X-WINDOWS,JRE软件包,C编译器, 
需要的主要系统工作是:改动KERNEL参数,建立DBA组,ORACLE用户,使用 
chown –R改变相对应的属性,得到合适的ORACLE的环境变量 
需要的数据库工作由ORACLE工程师完成。 
3:ORACLE OPS版本的安装和CLIENT则需要更多的技巧,但是原理和普通的MC安装类似. 

补充:MC本身不是一个技术,是一个方案的描述,其中网络,软件,应用,数据库,硬件,都会给MC造成影响,其中升级的时候最为危险。 
本来在各个城市有很多处理问题的经验,碍于时间,就不想写了 
多次和ORACLE合作做项目,感觉HP的技术难度和ORACLE不是一个概念,HP的难题和产品,经验结合很多,HP的难度是面面具到,有时候,一个电缆,一个光纤HUB,一个补丁就是罪魁祸首,事情完了才发现问题总是那么可笑,有时候一个问题的解决就是一个电话,两句话搞定。 
但是ORACLE的难度需要仔细分析,一头钻进去,还要结合应用,SQL优化等。
 

你可能感兴趣的:(HPUX,oracle,hp,service,network,ibm,网络)