[Pacemaker] Issue with controling resource Oracle Database Express

Dejan Muhamedagic dejanmm at fastmail.fm
Fri May 7 08:58:14 EDT 2010


Hi,

On Fri, May 07, 2010 at 11:54:27AM +0200, JECH Ladislav wrote:
> Hi,
> 
> I finally make Pacemaker up and running on CentOS 5.4. Currently using
> Heartbeat, but I want to switch to OpenAIS(Corosync). There were some
> problems related to Python and XML, strace crm still try to open some
> files which don't exist, I also did some symbolic links because of bad
> paths. I will try to sumarize these problems in another thread. But now
> both nodes of my Active/Passive cluster with shared storage running
> OCFS2 as filesystem are online using following configuration.
> 
> [root at tidevfnkv1 python2.4]# cat /var/lib/heartbeat/crm/cib.xml
> <cib validate-with="pacemaker-1.0" crm_feature_set="3.0.1"
> have-quorum="1" dc-uuid="e7cf0526-5304-45f1-b9ee-0ee9fe69c834"
> admin_epoch="0" epoch="29" num_updates="0" cib-last-written="Fri May  7
> 05:05:28 2010">
>   <configuration>
>     <crm_config>
>       <cluster_property_set id="cib-bootstrap-options">
>         <nvpair id="cib-bootstrap-options-dc-version" name="dc-version"
> value="1.0.8-9881a7350d6182bae9e8e557cf20a3cc5dac3ee7"/>
>         <nvpair id="cib-bootstrap-options-cluster-infrastructure"
> name="cluster-infrastructure" value="Heartbeat"/>
>         <nvpair id="cib-bootstrap-options-stonith-enabled"
> name="stonith-enabled" value="false"/>
>       </cluster_property_set>
>     </crm_config>
>     <nodes>
>       <node type="normal" uname="tidevfnkv2"
> id="e7cf0526-5304-45f1-b9ee-0ee9fe69c834">
>         <instance_attributes
> id="nodes-e7cf0526-5304-45f1-b9ee-0ee9fe69c834">
>           <nvpair name="standby"
> id="nodes-e7cf0526-5304-45f1-b9ee-0ee9fe69c834-standby" value="on"/>
>         </instance_attributes>
>       </node>
>       <node type="normal" uname="tidevfnkv1"
> id="db65bdf6-ecd2-4bcb-9ef5-451681ec2906">
>         <instance_attributes
> id="nodes-db65bdf6-ecd2-4bcb-9ef5-451681ec2906">
>           <nvpair name="standby"
> id="nodes-db65bdf6-ecd2-4bcb-9ef5-451681ec2906-standby" value="off"/>
>         </instance_attributes>
>       </node>
>     </nodes>
>     <resources>
>       <group id="ip_fnkv_cluster">
>         <primitive class="ocf" id="failover-ip" provider="heartbeat"
> type="IPaddr">
>           <instance_attributes id="failover-ip-instance_attributes">
>             <nvpair id="failover-ip-instance_attributes-ip" name="ip"
> value="172.28.140.113"/>
>           </instance_attributes>
>           <operations>
>             <op id="failover-ip-monitor-10s" interval="10s"
> name="monitor"/>
>           </operations>
>         </primitive>
>         <primitive class="lsb" id="failover-apache" type="httpd">
>           <operations>
>             <op id="failover-apache-monitor-15s" interval="15s"
> name="monitor"/>
>           </operations>
>         </primitive>
>       </group>
>       <primitive class="ocf" id="pingd" provider="pacemaker"
> type="pingd">
>         <instance_attributes id="pingd-instance_attributes">
>           <nvpair id="pingd-instance_attributes-host_list"
> name="host_list" value="172.28.140.10"/>
>           <nvpair id="pingd-instance_attributes-multiplier"
> name="multiplier" value="100"/>
>         </instance_attributes>
>         <operations>
>           <op id="pingd-monitor-15s" interval="15s" name="monitor"
> timeout="5s"/>
>         </operations>
>       </primitive>
>       <primitive class="ocf" id="failover-oracle" provider="heartbeat"
> type="oracle">
>         <instance_attributes id="failover-oracle-instance_attributes">
>           <nvpair id="failover-oracle-instance_attributes-sid"
> name="sid" value="XE"/>
>           <nvpair id="failover-oracle-instance_attributes-home"
> name="home"
> value="/usr/lib/oracle/xe/app/oracle/product/10.2.0/server"/>
>           <nvpair id="failover-oracle-instance_attributes-user"
> name="user" value="oracle"/>
>         </instance_attributes>
>         <operations>
>           <op id="failover-oracle-monitor-5s" interval="5s"
> name="monitor" on-fail="restart" timeout="30s"/>
>         </operations>
>       </primitive>
>     </resources>
>     <constraints>
>       <rsc_location id="ip_fnkv_cluster_on_connected_node"
> rsc="ip_fnkv_cluster">
>         <rule boolean-op="or"
> id="ip_fnkv_cluster_on_connected_node-rule" score="-INFINITY">
>           <expression attribute="pingd"
> id="ip_fnkv_cluster_on_connected_node-expression"
> operation="not_defined"/>
>           <expression attribute="pind"
> id="ip_fnkv_cluster_on_connected_node-expression-0" operation="lte"
> value="0"/>
>         </rule>
>       </rsc_location>
>     </constraints>
>     <op_defaults/>
>     <rsc_defaults/>
>   </configuration>

Better use crm configure show to print the configuration.

> Ok, output of crm_mon is following:
> ============
> Last updated: Fri May  7 05:27:20 2010
> Stack: Heartbeat
> Current DC: tidevfnkv2 (e7cf0526-5304-45f1-b9ee-0ee9fe69c834) -
> partition with quorum
> Version: 1.0.8-9881a7350d6182bae9e8e557cf20a3cc5dac3ee7
> 2 Nodes configured, unknown expected votes
> 3 Resources configured.
> ============
> 
> Online: [ tidevfnkv2 tidevfnkv1 ]
> 
>  Resource Group: ip_fnkv_cluster
>      failover-ip        (ocf::heartbeat:IPaddr):        Started
> tidevfnkv2
>      failover-apache    (lsb:httpd):    Started tidevfnkv2
> pingd   (ocf::pacemaker:pingd): Started tidevfnkv1
> 
> Failed actions:
>     failover-oracle_start_0 (node=tidevfnkv2, call=18, rc=1,
> status=complete): unknown error
>     failover-oracle_monitor_5000 (node=tidevfnkv1, call=42, rc=7,
> status=complete): not running
>     failover-oracle_start_0 (node=tidevfnkv1, call=44, rc=1,
> status=complete): unknown error
> 
> And there is problem with starting up the Oracle Database.

You should take a look at the logs and find out why the start
action failed.

> I have to say
> I selected free Express edition, It was not my decision to select this
> type of db, but this is reality. It seems like the resource agent
> related to oracle is not ready to use with Express edition, but only
> with full version of database. There is also second resource agent for
> oracle listener.
> 
> But, OraDB Express is installed with built-in scripts to start and stop
> db.

Just like any other oracle version I guess.

> Each script start/stop both, the listener and instance.
> I will provide here code of both scripts>
> 
> startdb.sh>
> #!/bin/bash
> #
> #       svaggu 09/28/05 -  Creation
> #	svaggu 11/09/05 -  dba groupd check is added
> #
> 
> xsetroot -cursor_name watch
> case $PATH in
>     "") PATH=/bin:/usr/bin:/sbin:/etc
>         export PATH ;;
> esac
> 
> SAVE_LLP=$LD_LIBRARY_PATH
> 
> ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server
> ORACLE_SID=XE
> LSNR=$ORACLE_HOME/bin/lsnrctl
> SQLPLUS=$ORACLE_HOME/bin/sqlplus
> export ORACLE_HOME
> export ORACLE_SID
> LOG="$ORACLE_HOME_LISTNER/listener.log"
> user=`/usr/bin/whoami`
> group=`/usr/bin/groups $user | grep dba`
> if test -z "$group"
> then
> 	xterm -T "Warning" -n "Warning" -hold -e "echo Operation failed.
> $user is not a member of \'dba\' group." 
> else
> # Starting Oracle Database 10g Express Edition instance and Listener
> 	$SQLPLUS -s /nolog @$ORACLE_HOME/config/scripts/startdb.sql >
> /dev/null 2>&1
> 	if [ ! `ps -ef | grep tns | cut -f1 -d" " | grep -q oracle` ]
> 	then
> 		$LSNR start > /dev/null 2>&1
> 	else
> 		echo ""
> 	fi
> fi
> 	xsetroot -cursor_name left_ptr
> 
> startdb.sql>
> connect / as sysdba
> startup
> exit
> 
> stopdb.sh>
> #!/bin/bash
> #
> #       svaggu 09/28/05 -  Creation
> #       svaggu 11/09/05 -  dba groupd check is added
> #
> 
> xsetroot -cursor_name watch
> 
> case $PATH in
>     "") PATH=/bin:/usr/bin:/sbin:/etc
>         export PATH ;;
> esac
> 
> SAVE_LLP=$LD_LIBRARY_PATH
> 
> ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server
> ORACLE_SID=XE
> SQLPLUS=$ORACLE_HOME/bin/sqlplus
> export ORACLE_HOME
> export ORACLE_SID
> user=`/usr/bin/whoami`
> group=`/usr/bin/groups $user | grep dba`
> if test -z "$group"
> then
>         xterm -T "Warning" -n "Warning" -hold -e "echo Operation failed.
> $user is not a member of \'dba\' group." 
> else
> # Stop Oracle Database 10g Express Edition instance
> 	$SQLPLUS -s /nolog @$ORACLE_HOME/config/scripts/stopdb.sql >
> /dev/null 2>&1
> fi
> 	
> xsetroot -cursor_name left_ptr
> 
> stopdb.sql>
> connect / as sysdba
> shutdown immediate
> exit
> 
> Ok, then my resource agent is located at
> /usr/lib/ocf/resource.d/heartbeat/oracle, and here is what I want to do.
> I want to create my own resource agent, let me name it "oraclexe", and
> here are my questions>
> 1.) Is it possible to create my own resource agent "oraclexe"(which will
> start both listener and db instance) only with creating new shell file
> in /usr/lib/ocf/resource.d/heartbeat/ directory?

Not just like that. The script has to follow the OCF standard.

> 2.) Is there a way to debug/trace resource agents in case the do not
> work in expected way?

Yes, you can use ocf-tester. Or run the script by hand:

OCF_RESKEY_sid=XE /usr/lib/ocf/resource.d/heartbeat/oracle start

> 3.) Do you have another aproach or solution to my issue?

I'd strongly suggest to use the existing oracle RA.

Thanks,

Dejan

> Thank you very much and anyway I have to say, that I went deeper into
> documentation of Pacemaker, Corosync, OpenAIS, ClusterGlue, CRM and I
> thing this is very good stuff. Thank you for your hard work.
> 
> Best regards,
> 
> Ladislav Jech
> 
> _______________________________________________
> Pacemaker mailing list: Pacemaker at oss.clusterlabs.org
> http://oss.clusterlabs.org/mailman/listinfo/pacemaker
> 
> Project Home: http://www.clusterlabs.org
> Getting started: http://www.clusterlabs.org/doc/Cluster_from_Scratch.pdf




More information about the Pacemaker mailing list