Jul
9
[原]构建Heartbeat 2.1.3 GUI+DRBD+Oracle 10g 双机互备集群
三、cib.xml 配置文件
Heartbeat 2.x 使用Pacemaker Cluster Resource Manager(简称CRM)作为配置、监控和管理工具。其具体使用我这里不再详细说明,请参考:[原]使用hb_gui 配置heartbeat 一文。
1、导入和导出配置文件
在我的环境中已经配置完成,这里提供resources(资源)和constraints(限制条件)的xml 文件:

使用很简单,用cibadmin 命令导入即可:
# cibadmin -E --force
# cibadmin -o resources -C -x resources.xml
# cibadmin -o constraints -C -x constraints.xml
# cibadmin -o resources -C -x resources.xml
# cibadmin -o constraints -C -x constraints.xml
-E 是先清空原来的cib.xml 文件(--fore是2.1.4版本需要的参数),该命令在一台机器上运行即可。
同样的,下面的命令是反向的作用,可以把当前Heartbeat 2.x 的配置情况导出来备份:
# cibadmin -o resources -Q > resources.xm
# cibadmin -o constraints -Q > constraints.xml
# cibadmin -o constraints -Q > constraints.xml
2、配置要点
具体的配置情况,在您把配置文件导入到CRM中后即可看到。当然,如果您的环境与我不同,例如主机名、IP等,该配置文件将不能使用,但您可以用来参考。此外,我也简单描述一下在配置时需特别留意的地方:
引用
a、把对drbd的监控作为一个单独的“主从资源”来配置,并分别设定monitor操作,而不要放在与oracle相同的资源组里面;
b、只有当drbd启动完成后(RA会自动把当前节点设置为primary),然后才能挂载/dev/drbd0设备,所以说,oracle资源组是依赖于drbd资源的,这可通过配置“限制条件”中的“位置”、“顺序”、“协同”来限定;
c、在创建资源组时,会提示您“顺序启动子资源”和“同节点启动子资源”两个值(默认为true),这表示,同一个资源组中的资源会从上往下执行,若其中有一个资源启动不成功,则后续的资源将不会启动;这也是一个应用执行顺序的限定(但依赖性的设置没有“顺序”等控制强);若在创建资源时顺序不对,必须通过右键中的上下移动调整过来;
d、drbd RA必须设置drbd_resource参数,其表示您在drbd中设置的资源名称,而非/dev/drbd0等设备;
e、oralsnr RA和 oracle RA都必须设置sid值,而home值默认会从/etc/oratab中读取,user值默认会是$ORACLE_HOME/dbs/*${ORACLE_SID}.ora的宿主,其他值也有类似的默认设定,详细请见RA的说明;
f、为减少Oracle启动时间,并更有效的监控Oracle,建议oralsnr RA的顺序比oracle RA的要早;
g、若在测试期间,某资源在各节点多次尝试启动均失败,则该资源会被保护起来,可通过右键中的“清理资源”重新进行启动的调试动作。
b、只有当drbd启动完成后(RA会自动把当前节点设置为primary),然后才能挂载/dev/drbd0设备,所以说,oracle资源组是依赖于drbd资源的,这可通过配置“限制条件”中的“位置”、“顺序”、“协同”来限定;
c、在创建资源组时,会提示您“顺序启动子资源”和“同节点启动子资源”两个值(默认为true),这表示,同一个资源组中的资源会从上往下执行,若其中有一个资源启动不成功,则后续的资源将不会启动;这也是一个应用执行顺序的限定(但依赖性的设置没有“顺序”等控制强);若在创建资源时顺序不对,必须通过右键中的上下移动调整过来;
d、drbd RA必须设置drbd_resource参数,其表示您在drbd中设置的资源名称,而非/dev/drbd0等设备;
e、oralsnr RA和 oracle RA都必须设置sid值,而home值默认会从/etc/oratab中读取,user值默认会是$ORACLE_HOME/dbs/*${ORACLE_SID}.ora的宿主,其他值也有类似的默认设定,详细请见RA的说明;
f、为减少Oracle启动时间,并更有效的监控Oracle,建议oralsnr RA的顺序比oracle RA的要早;
g、若在测试期间,某资源在各节点多次尝试启动均失败,则该资源会被保护起来,可通过右键中的“清理资源”重新进行启动的调试动作。
以下是我当前环境运行的截图:
四、常规维护
1、查看集群当前状态
除了hb_gui 提供的GUI方式外,下面的命令是字符下查看集群状态的:
引用
# crm_mon
Defaulting to one-shot mode
You need to have curses available at compile time to enable console mode
============
Last updated: Sat Jul 10 02:37:27 2010
Current DC: drbd2.linuxfly.org (1692f6d7-6ed8-4291-8cd3-20bba7029b6e)
2 Nodes configured.
2 Resources configured.
============
Node: drbd2.linuxfly.org (1692f6d7-6ed8-4291-8cd3-20bba7029b6e): online
Node: drbd1.linuxfly.org (198dcc16-9449-4d0a-bc16-a43bd6df95b3): online
Resource Group: rg_files
mount_data (heartbeat::ocf:Filesystem): Started drbd1.linuxfly.org
resource_ip (heartbeat::ocf:IPaddr): Started drbd1.linuxfly.org
oralsnr (heartbeat::ocf:oralsnr): Started drbd1.linuxfly.org
oracle (heartbeat::ocf:oracle): Started drbd1.linuxfly.org
Master/Slave Set: drbd_files
resource_drbd:0 (heartbeat::ocf:drbd): Master drbd1.linuxfly.org
resource_drbd:1 (heartbeat::ocf:drbd): Started drbd2.linuxfly.org
Defaulting to one-shot mode
You need to have curses available at compile time to enable console mode
============
Last updated: Sat Jul 10 02:37:27 2010
Current DC: drbd2.linuxfly.org (1692f6d7-6ed8-4291-8cd3-20bba7029b6e)
2 Nodes configured.
2 Resources configured.
============
Node: drbd2.linuxfly.org (1692f6d7-6ed8-4291-8cd3-20bba7029b6e): online
Node: drbd1.linuxfly.org (198dcc16-9449-4d0a-bc16-a43bd6df95b3): online
Resource Group: rg_files
mount_data (heartbeat::ocf:Filesystem): Started drbd1.linuxfly.org
resource_ip (heartbeat::ocf:IPaddr): Started drbd1.linuxfly.org
oralsnr (heartbeat::ocf:oralsnr): Started drbd1.linuxfly.org
oracle (heartbeat::ocf:oracle): Started drbd1.linuxfly.org
Master/Slave Set: drbd_files
resource_drbd:0 (heartbeat::ocf:drbd): Master drbd1.linuxfly.org
resource_drbd:1 (heartbeat::ocf:drbd): Started drbd2.linuxfly.org
2、手动切换
下面的命令可手动切换某个资源或组资源:
引用
[root@drbd1 log]# crm_resource -M -r rg_files
WARNING: Creating rsc_location constraint 'cli-standby-rg_files' with a score of -INFINITY for resource rg_files on drbd1.linuxfly.org.
This will prevent rg_files from running on drbd1.linuxfly.org until the constraint is removed using the 'crm_resource -U' command or manually with cibadmin
This will be the case even if drbd1.linuxfly.org is the last node in the cluster
This messgae can be disabled with -Q
WARNING: Creating rsc_location constraint 'cli-standby-rg_files' with a score of -INFINITY for resource rg_files on drbd1.linuxfly.org.
This will prevent rg_files from running on drbd1.linuxfly.org until the constraint is removed using the 'crm_resource -U' command or manually with cibadmin
This will be the case even if drbd1.linuxfly.org is the last node in the cluster
This messgae can be disabled with -Q
但是该动作将会生成一个cli-standby-rg_files位置限制,Failover动作会被禁止。可用下面的命令删除该限制,或在hb_gui 中删除:
# crm_resource -U -r rg_files
3、DRBD Split-Brain 问题
当某一节点出现问题,而另一节点在长时间等待超时(由drbd中配置的degr-wfc-timeout 时间决定)后,则该节点将会独立运行,处于StandAlone状态,而另一节点起来后,会是WFConnection。这是,主屏幕会报Split-Brain 错误:
引用
block drbd0: Split-Brain detected,manually solved. Sync from peer node
同样的,集群中某节点出现故障,由另一节点暂时独立运行时,也是相同的情况。
由于drbd RA总是把当前节点设置为Primary,即使该节点DRBD磁盘处于Primary/Unknown状态,而另一节点为Secondary/Unknown下,所以,这时需注意数据异常的问题。
应在判断存放正确数据的节点后,采取重新同步的动作,具体可参考:[原]使用DRBD创建镜像分区一文附录。
在准备丢弃该节点数据的一方运行:
# drbdadm disconnect resource_name
# drbdadm secondary resource_name
# drbdadm -- --discard-my-data connect resource_name
# drbdadm secondary resource_name
# drbdadm -- --discard-my-data connect resource_name
而存放正确数据的节点运行:
# drbdadm connect resource_name
以让两节点恢复到ro:Primary/Secondary ds:UpToDate/UpToDate 的状态。
五、附录
1、已修正上述各Bug的Heartbeat 2.1.4 rpm包

(未修改的2.1.3版本,请从CentOS源获得,未修改的2.1.4版本,请从EPEL源获得)
2、SuSe 编写的High Availability 指南
该指南描述的就是Heartbeat 2.x ,中文版,包括DRBD、RA、主要配置脚本、命令的说明。

六、参考文档
SUSE High Availability 指南
HeartBeat(2.1.3-6)+DRBD(2:8.3.0-1)+MySQL on Debian Etch 建置/測試筆記(包括效能测试,heartbeat dopd(DRBD outdate-peer daemon)的使用)
Using DRBD in Heartbeat CRM-enabled clusters
The Linux-HA User's Guide
Using DRBD with Heartbeat v2 in CRM mode
Using Heartbeat with dopd
Strategies for dealing with outdated data
利于heartbeat构建Oracle高可用(自定义一个RA)

楼主能帮忙解释一下么?
我已经这样做过了,但是将ORADATA挂载到另一主机时,ORACLE就无法启动监听了。不知道哥哥的双机listener.ora和tnsnames.ora是如何配置的呀。谢谢赐教。