Yes I can give it a try but the truth is that I never had problems with the default one. I can give you my cib.xml if you want.
On Wed, Oct 22, 2008 at 5:02 AM, Adrian Chapela <[EMAIL PROTECTED]> wrote: > Serge Dubrouski escribió: >> >> On Tue, Oct 21, 2008 at 4:12 AM, Adrian Chapela >> <[EMAIL PROTECTED]> wrote: >> >>> >>> Again I am testing with a more simple config file, with only one >>> master/slave resource. >>> >>> In this case the resource becomes to be a Master but in the slave server >>> the >>> DRBD is not running. The modules is not loaded and crm_mon says that drbd >>> is >>> running as Slave: >>> >>> Master/Slave Set: ms-drbd0 >>> drbd0:0 (ocf::heartbeat:drbd): Master debianquagga2 >>> drbd0:1 (ocf::heartbeat:drbd): Started debianquagga1 >>> >>> Resource configuration: >>> <resources> >>> <master_slave id="ms-drbd0"> >>> <meta_attributes id="ma-ms-drbd0"> >>> <attributes> >>> <nvpair id="ma-ms-drbd0-1" >>> name="clone_max" value="2"/> >>> <nvpair id="ma-ms-drbd0-2" >>> name="clone_node_max" value="1"/> >>> <nvpair id="ma-ms-drbd0-3" >>> name="master_max" value="1"/> >>> <nvpair id="ma-ms-drbd0-4" >>> name="master_node_max" value="1"/> >>> <nvpair id="ma-ms-drbd0-5" >>> name="notify" value="yes"/> >>> <nvpair id="ma-ms-drbd0-6" >>> name="globally_unique" value="false"/> >>> </attributes> >>> </meta_attributes> >>> <primitive id="drbd0" class="ocf" >>> provider="heartbeat" >>> type="drbd"> >>> <instance_attributes id="ia-drbd0"> >>> <attributes> >>> <nvpair id="ia-drbd0-1" >>> name="drbd_resource" value="mail_disk"/> >>> </attributes> >>> </instance_attributes> >>> <operations> >>> <op id="op-ms-drbd2-1" >>> name="monitor" >>> interval="59s" timeout="60s" start_delay="30s" role="Master"/> >>> <op id="op-ms-drbd2-2" >>> name="monitor" >>> interval="60s" timeout="60s" start_delay="30s" role="Slave"/> >>> </operations> >>> >>> </primitive> >>> </master_slave> >>> </resources> >>> >>> Why heartbeat is not monitoring the service in the slave node ? >>> >> >> It does. I think that your slave is in Standalone mode in DRBD, check >> it with drbdadm cstate. >> >>> >>> Adrian Chapela escribió: >>> >>>> >>>> Hello, >>>> >>>> I am doing new tests. I am doing this tests to improve an old config and >>>> to try to understand best multistate resources. >>>> >>>> I can't make it to works, my configuration is always bad.... I don't >>>> know >>>> anything. I am using 2.1.4 release. >>>> >>>> The cluster is only doing a notify action and then stop action. If I >>>> started drbd myself, the cluster bring drbd in an Uncofigured resources >>>> state. I don't know the reason. Should I specify a start action ? >>>> >>>> [snip] > > I found a better script but it wasn't multi state RA. I modified the script > to fit my Multi State needs. I attached to this mail and you could download > the last release (Now is the same as attached version) from: > http://code.adrianchapela.net/heartbeat/drbd_HA > > Could you have a look ? Could you test it ? > > Now I have solved my problem of start the drbd resource in two nodes and one > of them become a Master. I have now some troubles with the failover (Old > Master is down....then Slave node detecst it but it doesn't do anything to > be the new Master... ). I suppose an error in location rules. > > Thank you > > #!/bin/sh > # > # License: GNU General Public License (GPL) > # Author: Martin Fick > # Date: 04/19/07 > # Origin: Hacked together from many other drbd and ocf scripts > # > # Adapted to be a MultState RA by: Adrian Chapela > # Date: 21/10/08 > # > # This script manages a drbd device > # > # It can make a drbd device primary or secondary > # > # Be sure to only allow this resource to run on the > # two specific nodes where your drbd device is setup. > # > # usage: $0 {start|stop|status|monitor|meta-data|promote|demote} > # > # > # OCF parameters are as below > # OCF_RESKEY_drbd_resource > # > ####################################################################### > # > # > # ocf_logi is a custom error log made by Martin Fick. I (Adrian Chapela) > modified this function to log to another filename 'drbd_HA.log'. > # To mantain compatibility with other Hearbeat RA, I added ocf_log in all > locations which ocf_logi is used. This duplicates entries in logs, but I > considered that is more > # positive to us to debug OCF script and Heartbeat configuration (to be > it was..). > # > # We use the STATUS_CODES from here > #. /usr/lib/heartbeat/ocf-shellfuncs > > # The next lines are to be more compatible with next releases of Heartbeat > if [ -n "$OCF_DEBUG_LIBRARY" ]; then > . $OCF_DEBUG_LIBRARY > else > . ${OCF_ROOT}/resource.d/heartbeat/.ocf-shellfuncs > fi > > USAGE="usage: $0 {start|stop|status|monitor|meta-data|promote|demote}"; > > ####################################################################### > > #HA_D=/etc/ha.d > #. ${HA_D}/shellfuncs > > > meta_data() { > cat <<END > <?xml version="1.0"?> > <!DOCTYPE resource-agent SYSTEM "ra-api-1.dtd"> > <resource-agent name="drbd"> > <version>0.0</version> > <longdesc lang="en"> > This script manages a drbd device > It can make a drbd device primary or secondary > </longdesc> > <shortdesc lang="en">OCF MultiState Resource Agent compliant drbd > script.</shortdesc> > > <parameters> > > <parameter name="drbd_resource" unique="1" required="1"> > <longdesc lang="en"> > The drbd resource is a resource defined in /etc/drbd.conf > </longdesc> > <shortdesc lang="en">drbd resource</shortdesc> > <content type="string" default="" /> > </parameter> > > </parameters> > > <actions> > <action name="start" timeout="1m" /> > <action name="stop" timeout="1m" /> > <action name="monitor" depth="10" timeout="1m" interval="5s" > start-delay="1m" /> > <action name="meta-data" timeout="1m" /> > <action name="promote" timeout="1m" /> > <action name="demote" timeout="1m" /> > </actions> > </resource-agent> > END > exit $OCF_SUCCESS > } > > ocf_logi() { # type msg > # if [ "$1" != "err" ] ; then return ; fi > shift > echo `date`" - $@" >> /var/log/drbd_HA.log > } > > drbd_reload() { > drbd_stop || return > drbd_start > } > > drbd_stop() { > # > # Is the device already secondary? > # > # drbd_status > # if [ $? = $OCF_NOT_RUNNING ]; then exit $OCF_NOT_RUNNING; fi > > #stop="$($DRBDADM secondary $RES 2>&1)" > stop="$($DRBDADM down $RES 2>&1)" > > drbd_status ; rc=$? > if [ $rc = $OCF_NOT_RUNNING ]; then exit 0; fi > > ocf_logi err "$RES stop failed: ($rc)" > ocf_log err "$RES stop failed: ($rc)" > ocf_logi err "$stop" > ocf_log err "$stop" > > return 1 > } > > drbd_start() { > drbd_status > if [ $? = $OCF_SUCCESS ]; then return $OCF_SUCCESS; fi > > if is_drbd_enabled; then > : OK > else > do_cmd modprobe -s drbd `$DRBDADM sh-mod-parms` || { > ocf_logi err "Can not load the drbd module."$'\n'; > ocf_log err "Can not load the drbd module."$'\n'; > return $OCF_ERR_GENERIC > } > ocf_logi debug "$RES start: Module loaded." > ocf_log debug "$RES start: Module loaded." > fi > > > if [ "$STATE" != "Secondary" ]; then > $DRBDADM up $RES > fi > > # try several times, in case heartbeat deadtime > # was smaller than drbd ping time > #try=6 > #while true; do > # start="$($DRBDADM primary $RES 2>&1)" && break > # let "--try" || break > # sleep 1 > #done > > drbd_status ; rc=$? > if [ $rc = $OCF_SUCCESS ]; then return $OCF_SUCCESS; fi > > ocf_logi err "$RES start failed: ($rc)" > ocf_logi err "$start" > ocf_log err "$RES start failed: ($rc)" > ocf_log err "$start" > return $rc > } > > drbd_status() { > ST=$( $DRBDADM state $RES 2>&1 ) > STATE=${ST%/*} > if [ "$STATE" = "Primary" ]; then > echo "Primary - running as Master" > rc=$OCF_RUNNING_MASTER > elif [ "$STATE" = "Secondary" ]; then > echo "Secondary - Slave" > rc=$OCF_SUCCESS > else > echo "$ST" > rc=$OCF_NOT_RUNNING > fi > return $rc > } > > drbd_promote() { > if is_drbd_enabled; then > : OK > else > ocf_logi err "drbd is not enabled" > ocf_log err "drbd is not enabled" > return $OCF_ERR_GENERIC > fi > > drbd_status > > if [ "$STATE" != "Secondary" ]; then > ocf_logi err $RES" DRBD is not prepared to be a Master in this > node ;)" > ocf_log err $RES" DRBD is not prepared to be a Master in this > node ;)" > return $OCF_ERR_GENERIC > > else > if $DRBDADM primary $RES ; then > # TODO: WORK AROUND because drbdadm has a bug and > # reports success even if it failed :-( > drbd_status > if [ "$STATE" = "Primary" ]; then > ocf_logi info "$RES promote: primary succeeded" > ocf_log info "$RES promote: primary succeeded" > return $OCF_SUCCESS > else > ocf_logi err "$RES promote: Not primary despite > drbdadm call." > ocf_log err "$RES promote: Not primary despite drbdadm > call." > fi > else > ocf_logi err "$RES promote: Failed with exit code $?." > ocf_log err "$RES promote: Failed with exit code $?." > fi > return $OCF_ERR_GENERIC > fi > } > > drbd_demote() { > # Always I test drbd module > if is_drbd_enabled; then > : OK > else > ocf_logi err "drbd is not enabled" > ocf_log err "drbd is not enabled" > return $OCF_ERR_SUCCESS > fi > > drbd_status > > if [ "$STATE" = "Secondary" ]; then > ocf_logi err $RES" demote: already secondary" > ocf_log err $RES" demote: already secondary" > return $OCF_SUCCESS > fi > > if [ "$STATE" = "Not configured" ]; then > ocf_logi debug "$RESOURCE demote: already stopped" > ocf_log debug "$RESOURCE demote: already stopped" > return $OCF_NOT_RUNNING > fi > > # TODO: this is a _force_ operation. we may need to kill higher > # levels (or switch them to r/o) to be able to demote drbd. > # figure out how... > > if $DRBDADM primary $RES ; then > sleep 2 > drbd_status > if [ "$STATE" = "Primary" ]; then > ocf_logi err "$RESOURCE demote: still primary!" > ocf_log err "$RESOURCE demote: still primary!" > return $OCF_ERR_GENERIC > fi > > ocf_logi debug "$RESOURCE demote: succeeded" > ocf_log debug "$RESOURCE demote: succeeded" > return $OCF_SUCCESS > else > ocf_logi err "$RESOURCE demote: Failed with exit code $?." > ocf_log err "$RESOURCE demote: Failed with exit code $?." > return $OCF_ERR_GENERIC > fi > > return $OCF_SUCCESS > } > > drbd_monitor() { > drbd_status > } > > > do_cmd() { > local cmd="$*" > ocf_logi Debug "$RES: Calling $cmd" > ocf_log Debug "$RES: Calling $cmd" > local cmd_out=$($cmd 2>&1) > ret=$? > > if [ $ret -ne 0 ]; then > ocf_logi err "$RES: Called $cmd" > ocf_logi err "$RES: Exit code $ret" > ocf_logi err "$RES: Command output: $cmd_out" > ocf_log err "$RES: Called $cmd" > ocf_log err "$RES: Exit code $ret" > ocf_log err "$RES: Command output: $cmd_out" > > else > ocf_logi debug "$RES: Exit code $ret" > ocf_logi debug "$RES: Command output: $cmd_out" > ocf_log debug "$RES: Exit code $ret" > ocf_log debug "$RES: Command output: $cmd_out" > fi > > echo $cmd_out > > return $ret > } > > is_drbd_enabled () { > if [ -f /proc/drbd ]; then > return 0 > fi > return 1 > } > > usage() { > echo $USAGE >&2 > } > > # > # Make a drbd device primary or secondary > # > > DEFAULTFILE="/etc/default/drbd" > DRBDADM="/sbin/drbdadm" > > if [ -f $DEFAULTFILE ]; then > . $DEFAULTFILE > fi > > if > [ $# -ne 1 ] > then > usage > exit $OCF_ERR_ARGS > fi > > RES="$OCF_RESKEY_drbd_resource" > > > case $1 in > info) cat <<-!INFO > Abstract=DRBD Device Manager > Argument=DRBD Resource Name > Description: > A DRBD device is a network raid block device which can have a primary > and a secondary backing > device each on a separate machine. DRBD will keep them in sync. > Please rerun with the meta-data command for a list of \\ > valid arguments and their defaults. > !INFO > exit $OCF_SUCCESS;; > esac > > case $1 in > start|stop|status|monitor|reload|promote|demote) > ocf_logi Debug "$RES: $1" > ocf_log Debug "$RES: $1" > cmd_out=$($cmd 2>&1) > drbd_$1 ;; > meta-data) meta_data;; > usage) usage; exit $OCF_SUCCESS;; > validate-all|notify) exit 0;; > *) usage > exit $OCF_ERR_ARGS > ;; > esac > > > > _______________________________________________ > Linux-HA mailing list > [email protected] > http://lists.linux-ha.org/mailman/listinfo/linux-ha > See also: http://linux-ha.org/ReportingProblems > -- Serge Dubrouski. _______________________________________________ Linux-HA mailing list [email protected] http://lists.linux-ha.org/mailman/listinfo/linux-ha See also: http://linux-ha.org/ReportingProblems
