From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 25805 invoked by alias); 9 Jul 2009 17:28:30 -0000 Received: (qmail 25799 invoked by alias); 9 Jul 2009 17:28:30 -0000 X-SWARE-Spam-Status: No, hits=-1.3 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_38,SARE_OBFU_PART_IVE,SPF_HELO_PASS X-Spam-Status: No, hits=-1.3 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_38,SARE_OBFU_PART_IVE,SPF_HELO_PASS X-Spam-Check-By: sourceware.org X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on bastion2.fedora.phx.redhat.com Subject: resource-agents: master - rgmanager: Add resource agent for DRBD To: cluster-cvs-relay@redhat.com X-Project: Cluster Project X-Git-Module: resource-agents.git X-Git-Refname: refs/heads/master X-Git-Reftype: branch X-Git-Oldrev: 1ae6f5cc3a628ffeb7cd2bf61178f858196703a3 X-Git-Newrev: 500f317a798a92527486d8fc9a7cd23a611ccc5c From: Lon Hohberger Message-Id: <20090709172802.B15F11201FE@lists.fedorahosted.org> Date: Thu, 09 Jul 2009 17:28:00 -0000 X-Scanned-By: MIMEDefang 2.58 on 172.16.52.254 Mailing-List: contact cluster-cvs-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: cluster-cvs-owner@sourceware.org X-SW-Source: 2009-q3/txt/msg00034.txt.bz2 Gitweb: http://git.fedorahosted.org/git/resource-agents.git?p=resource-agents.git;a=commitdiff;h=500f317a798a92527486d8fc9a7cd23a611ccc5c Commit: 500f317a798a92527486d8fc9a7cd23a611ccc5c Parent: 1ae6f5cc3a628ffeb7cd2bf61178f858196703a3 Author: Florian Haas AuthorDate: Thu Jul 2 10:49:39 2009 +0200 Committer: Lon Hohberger CommitterDate: Thu Jul 9 13:27:03 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 --- rgmanager/src/resources/Makefile.am | 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.am b/rgmanager/src/resources/Makefile.am index ebeb61e..ede5a74 100644 --- a/rgmanager/src/resources/Makefile.am +++ b/rgmanager/src/resources/Makefile.am @@ -9,11 +9,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 + tomcat-5.metadata named.metadata lvm.metadata drbd.sh EVENT_TARGETS = default_event_script.sl follow-service.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 @@ + + + 1.0 + + + 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. + + + + This is a DRBD resource. + + + + + + Symbolic name for this resource. + + + Cluster resource name + + + + + + The DRBD resource name, as specified in /etc/drbd.conf. + + + DRBD resource name + + + + + + + + + + + + + + + + + + + + + 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