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优化等。