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 <Full_path_name> 
#RESOURCE_POLLING_INTERVAL <numeric_seconds> 
#RESOURCE_START <AUTOMATIC/DEFERRED> 
#RESOURCE_UP_VALUE <op> <string_or_numeric> [and <op> <numeric>] 
#注意:上面涉及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的MC经典攻略相关推荐

  1. mc服务器小地图不显示玩家,我的世界旅行地图小地图不显示只显示地形 | 手游网游页游攻略大全...

    发布时间:2016-04-03 我的世界游戏中是可以旅游的哦,在旅行的时候地图是很关键的,今天为大家整理了几款经典的辅助工具,想要的朋友们可以看看下面的怎么下载我的世界旅行地图 我的世界各种旅行者必备 ...

  2. Python编程学习:让函数更加灵活的*args和**kwargs(设计不同数量参数的函数)的简介、使用方法、经典案例之详细攻略

    Python编程学习:让函数更加灵活的*args和**kwargs(设计不同数量参数的函数)的简介.使用方法.经典案例之详细攻略 目录 *args和**kwargs(设计不同数量的参数函数)的简介 1 ...

  3. AI之NLP:自然语言处理技术简介(是什么/学什么/怎么用)、常用算法、经典案例之详细攻略(建议收藏)

    AI之NLP:自然语言处理技术简介(是什么/学什么/怎么用).常用算法.经典案例之详细攻略(建议收藏) 目录 NLP是什么? 1.NLP前置技术解析 2.python中NLP技术相关库 3.NLP案例 ...

  4. BigData:大数据开发的简介、核心知识(linux基础+Java/Python编程语言+Hadoop{HDFS、HBase、Hive}+Docker)、经典场景应用之详细攻略

    BigData:大数据开发的简介.核心知识(linux基础+Java/Python编程语言+Hadoop{HDFS.HBase.Hive}+Docker).经典场景应用之详细攻略 BigData:大数 ...

  5. Python:利用python语言绘制多个子图经典案例、代码实现之详细攻略

    Python:利用python语言绘制多个子图经典案例.代码实现之详细攻略 目录 利用python语言绘制多个子图代码实现.经典案例 1.绘制多个子图框架 多个子图绘制的经典案例 1.绘制多个直方图 ...

  6. BigData之Spark:Spark计算引擎的简介、下载、经典案例之详细攻略

    BigData之Spark:Spark计算引擎的简介.下载.经典案例之详细攻略 目录 Spark的简介 1.Spark三大特点 Spark的下载 Spark的经典案例 1.Word Count 2.P ...

  7. DL之CNN:计算机视觉之卷积神经网络经典算法简介、重要进展、改进技巧之详细攻略(建议收藏)

    DL之CNN:计算机视觉之卷积神经网络经典算法简介.重要进展.改进技巧之详细攻略(建议收藏) 目录 CNN经典算法细讲 1.CNN历年冠军算法 1.1.LeNet-5 1.2.AlexNet 1.3. ...

  8. Py之pixellib:pixellib库的简介、安装、经典案例之详细攻略

    Py之pixellib:pixellib库的简介.安装.经典案例之详细攻略 目录 pixellib库的简介 1.基础案例 pixellib库的安装 pixellib库的经典案例 1.使用pixelli ...

  9. Py之re:re正则表达式库的简介、常用函数、经典案例之详细攻略

    Py之re:re正则表达式库的简介.常用函数.经典案例之详细攻略 目录 re正则表达式库的简介 1.正则表达式元字符表集合--正则表达式的pattern re正则表达式库的常用函数 1.re.comp ...

最新文章

  1. java out of range_关于Parameter index out of range求解决办法
  2. windows :Tomcat免安装版环境变量配置 + jdk配置
  3. 2021年春季学期-信号与系统-第十五次作业参考答案-第十一小题参考答案
  4. 使用JAXB将XML Schema绑定到Java类
  5. tensorflow系列之1:加载数据
  6. Python+Matplotlib制作动画
  7. excel下划线转驼峰公式
  8. [html] 常见的浏览器内核都有哪些?并介绍下你对内核的理解
  9. Linux下安装ActiveMQ
  10. 第3章   IP寻址
  11. 18岁华裔准博士生,“杀死了”量子计算大进展
  12. 小批量梯度下降法MBGD
  13. 适合记录日常工作的便签如何在电脑桌面上添加
  14. 阿里云服务器搭建Django环境二:django+mysql环境搭建
  15. 工业计算机英语作文,工业计算机,Industrial Computer,音标,读音,翻译,英文例句,英语词典...
  16. 极客时间课程笔记:业务安全
  17. Java——批量更改图片像素(大小)
  18. pytorch 移植到Android平台(一)
  19. 如何提高企业员工的企业文化,形成共同的理念价值观
  20. 高中数学基础-2.1.1(1)根式的运算

热门文章

  1. Qt商业版和开源版下载地址!!!!!!
  2. DOTA2 6.86更新日志 史诗级巨变英雄大改
  3. spoj14846 Bribe the Prisoners
  4. 学习笔记之Myeclipse中 报错 Syntax error on token Invalid Regular Expression Options, no accurate correc
  5. MIPS指令集中LB和LW的区别
  6. 计算机软考证书领取地点以及时间
  7. 儒释道兼修经典——菜根谭全文及讲解以及弟子规
  8. Nervos CKB 共识协议 NC-Max:突破 Nakamoto Consensus 吞吐量的极限 1
  9. 一文带你由浅入深地解读 Go Zap 的高性能
  10. 求一个矩阵的鞍点(即在行上最小而在列上最大的值)(C++编写)(循环与递归)