public inbox for cluster-cvs@sourceware.org
help / color / mirror / Atom feed
* cluster: STABLE3 - rgmanager: Add resource agent for DRBD
@ 2009-07-09 17:31 Lon Hohberger
  0 siblings, 0 replies; only message in thread
From: Lon Hohberger @ 2009-07-09 17:31 UTC (permalink / raw)
  To: cluster-cvs-relay

Gitweb:        http://git.fedorahosted.org/git/cluster.git?p=cluster.git;a=commitdiff;h=bd8dc44918a9ee71e3f8aa1c705eacd610a9b7de
Commit:        bd8dc44918a9ee71e3f8aa1c705eacd610a9b7de
Parent:        6b751d048dd2068c5c62019b675d0d3699409a63
Author:        Florian Haas <florian.haas@linbit.com>
AuthorDate:    Thu Jul 2 10:49:39 2009 +0200
Committer:     Lon Hohberger <lhh@redhat.com>
CommitterDate: Thu Jul 9 13:29:59 2009 -0400

rgmanager: Add resource agent for DRBD

DRBD (www.drbd.org) is a shared-nothing synchronous storage replication
capable of acting as a drop-in replacement for shared storage.

This resource agent manages a DRBD device by switching it into
the Primary and Secondary roles as needed.

For a configuration example, please see
http://www.drbd.org/users-guide/s-rhcs-failover-clusters.html

Signed-off-by: Lon Hohberger <lhh@redhat.com>
---
 rgmanager/src/resources/Makefile      |    4 +-
 rgmanager/src/resources/drbd.metadata |   51 ++++++++++++
 rgmanager/src/resources/drbd.sh       |  144 +++++++++++++++++++++++++++++++++
 3 files changed, 197 insertions(+), 2 deletions(-)

diff --git a/rgmanager/src/resources/Makefile b/rgmanager/src/resources/Makefile
index 08d5489..8d79cbe 100644
--- a/rgmanager/src/resources/Makefile
+++ b/rgmanager/src/resources/Makefile
@@ -12,11 +12,11 @@ RESOURCES=service.sh ip.sh nfsclient.sh nfsexport.sh \
 	apache.sh openldap.sh samba.sh mysql.sh \
 	postgres-8.sh tomcat-5.sh lvm.sh \
 	vm.sh SAPInstance SAPDatabase named.sh \
-	ASEHAagent.sh
+	ASEHAagent.sh drbd.sh
 
 METADATA=apache.metadata openldap.metadata samba.metadata \
 	mysql.metadata postgres-8.metadata tomcat-5.metadata \
-	named.metadata lvm.metadata
+	named.metadata lvm.metadata drbd.metadata
 
 EVENT_TARGETS= \
 	default_event_script.sl \
diff --git a/rgmanager/src/resources/drbd.metadata b/rgmanager/src/resources/drbd.metadata
new file mode 100644
index 0000000..30fe122
--- /dev/null
+++ b/rgmanager/src/resources/drbd.metadata
@@ -0,0 +1,51 @@
+<?xml version="1.0" ?>
+<resource-agent version="rgmanager 2.0" name="drbd">
+  <version>1.0</version>
+
+  <longdesc lang="en">
+    This is a DRBD resource. The resource must be configured
+    in the configuration file (/etc/drbd.conf), and the
+    DRBD kernel module must be loaded. 
+  </longdesc>
+
+  <shortdesc lang="en">
+    This is a DRBD resource.
+  </shortdesc>
+
+  <parameters>
+    <parameter name="name" unique="1" primary="1">
+      <longdesc lang="en">
+    Symbolic name for this resource.
+      </longdesc>
+      <shortdesc lang="en">
+    Cluster resource name
+      </shortdesc>
+      <content type="string"/>
+    </parameter>
+    <parameter name="resource" unique="1" required="1">
+      <longdesc lang="en">
+	The DRBD resource name, as specified in /etc/drbd.conf.
+      </longdesc>
+      <shortdesc lang="en">
+	DRBD resource name
+      </shortdesc>
+      <content type="string"/>
+    </parameter>
+  </parameters>
+
+  <actions>
+    <action name="start" timeout="20"/>
+    <action name="stop" timeout="20"/>
+    
+    <!-- Checks to see if the resource is Primary locally -->
+    <action name="status" depth="10" interval="60" timeout="20"/>
+    <action name="monitor" depth="10" interval="60" timeout="20"/>
+    
+    <action name="meta-data" timeout="20"/>
+    <action name="verify-all" timeout="20"/>
+  </actions>
+  
+  <special tag="rgmanager">
+    <attributes maxinstances="1"/>
+  </special>
+</resource-agent>
diff --git a/rgmanager/src/resources/drbd.sh b/rgmanager/src/resources/drbd.sh
new file mode 100644
index 0000000..4571660
--- /dev/null
+++ b/rgmanager/src/resources/drbd.sh
@@ -0,0 +1,144 @@
+#!/bin/bash
+#
+#  Copyright LINBIT, 2008
+#
+#  This program is free software; you can redistribute it and/or modify it
+#  under the terms of the GNU General Public License as published by the
+#  Free Software Foundation; either version 2, or (at your option) any
+#  later version.
+#
+#  This program is distributed in the hope that it will be useful, but
+#  WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+#  General Public License for more details.
+#
+#  You should have received a copy of the GNU General Public License
+#  along with this program; see the file COPYING.  If not, write to the
+#  Free Software Foundation, Inc.,  675 Mass Ave, Cambridge, 
+#  MA 02139, USA.
+#
+
+#
+# DRBD resource management using the drbdadm utility.
+#
+
+LC_ALL=C
+LANG=C
+PATH=/bin:/sbin:/usr/bin:/usr/sbin
+export LC_ALL LANG PATH
+
+. $(dirname $0)/ocf-shellfuncs
+
+drbd_verify_all()
+{
+    # Do we have the drbdadm utility?
+    if ! which drbdadm >/dev/null 2>&1 ; then
+	ocf_log error "drbdadm not installed, not found in PATH ($PATH), or not executable."
+	return $OCF_ERR_INSTALLED
+    fi
+
+    # Is drbd loaded?
+    if ! grep drbd /proc/modules >/dev/null 2>&1; then
+	ocf_log error "drbd not found in /proc/modules. Do you need to modprobe?"
+	return $OCF_ERR_INSTALLED
+    fi
+
+    # Do we have the "resource" parameter?
+    if [ -n "$OCF_RESKEY_resource" ]; then
+
+      # Can drbdadm parse the resource name?
+      if ! drbdadm sh-dev $OCF_RESKEY_resource >/dev/null 2>&1; then
+  	ocf_log error "DRBD resource \"$OCF_RESKEY_resource\" not found." 
+  	return $OCF_ERR_CONFIGURED
+      fi
+
+      # Is the backing device a locally available block device?
+      backing_dev=$(drbdadm sh-ll-dev $OCF_RESKEY_resource)
+      if [ ! -b $backing_dev ]; then
+  	ocf_log error "Backing device for DRBD resource \"$OCF_RESKEY_resource\" ($backing_dev) not found or not a block device."
+  	return $OCF_ERR_INSTALLED
+      fi
+
+    fi
+
+    return 0
+}
+
+drbd_status() {
+    role=$(drbdadm role $OCF_RESKEY_resource)
+    case $role in
+	Primary/*)
+	    return $OCF_RUNNING
+	    ;;
+	Secondary/*)
+	    return $OCF_NOT_RUNNING
+	    ;;
+
+    esac
+    return $OCF_ERR_GENERIC
+}
+
+drbd_promote() {
+    drbdadm primary $OCF_RESKEY_resource || return $?
+}
+
+drbd_demote() {
+    drbdadm secondary $OCF_RESKEY_resource || return $?
+}
+
+
+if [ -z "$OCF_CHECK_LEVEL" ]; then
+	OCF_CHECK_LEVEL=0
+fi
+
+# This one doesn't need to pass the verify check
+case $1 in
+    meta-data)
+	cat `echo $0 | sed 's/^\(.*\)\.sh$/\1.metadata/'` && exit 0
+	exit $OCF_ERR_GENERIC
+	;;
+esac
+
+# Everything else does
+drbd_verify_all || exit $?
+case $1 in
+    start)
+	if drbd_status; then
+	    ocf_log debug "DRBD resource ${OCF_RESKEY_resource} already configured"
+	    exit 0
+	fi
+	drbd_promote 
+	if [ $? -ne 0 ]; then
+	    exit $OCF_ERR_GENERIC
+	fi
+	
+	exit $?
+	;;
+    stop)
+	if drbd_status; then
+	    drbd_demote
+	    if [ $? -ne 0 ]; then
+		exit $OCF_ERR_GENERIC
+	    fi
+	else
+	    ocf_log debug "DRBD resource ${OCF_RESKEY_resource} is not configured"
+	fi
+	exit 0
+	;;
+    status|monitor)
+	drbd_status
+	exit $?
+	;;
+    restart)
+	$0 stop || exit $OCF_ERR_GENERIC
+	$0 start || exit $OCF_ERR_GENERIC
+	exit 0
+	;;
+    verify-all)
+    	exit 0
+    	;;
+    *)
+	echo "usage: $0 {start|stop|status|monitor|restart|meta-data|verify-all}"
+	exit $OCF_ERR_GENERIC
+	;;
+esac


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2009-07-09 17:31 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-07-09 17:31 cluster: STABLE3 - rgmanager: Add resource agent for DRBD Lon Hohberger

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).