Rootop 服务器运维与web架构

heartbeat3.0与drbd8.4.1整合

heartbeat安装参考:https://www.rootop.org/pages/3263.html
drbd安装参考         : https://www.rootop.org/pages/3295.html

注意这两篇文章种的主机名不一样,现统一用node1node2

其次需要配置的地方就是修改haresources文件,让heartbeat管理drbd状态、挂载操作。

[root@node1 ~]# vi /etc/ha.d/haresources

node1 IPaddr::192.168.0.177/24/eth0 drbddisk::r0 Filesystem::/dev/drbd1::/db::ext3

创建drbddisk脚本:
提供本站下载地址:https://www.rootop.org/rs/drbddisk
[root@node1 ~]# vi /etc/ha.d/resource.d/drbddisk

#!/bin/bash
#
# This script is inteded to be used as resource script by heartbeat
#
# Copright 2003-2008 LINBIT Information Technologies
# Philipp Reisner, Lars Ellenberg
#
###

DEFAULTFILE="/usr/local/drbd"
DRBDADM="/sbin/drbdadm"

if [ -f $DEFAULTFILE ]; then
	. $DEFAULTFILE
fi

if [ "$#" -eq 2 ]; then
	RES="$1"
	CMD="$2"
else
	RES="all"
	CMD="$1"
fi

## EXIT CODES
# since this is a "legacy heartbeat R1 resource agent" script,
# exit codes actually do not matter that much as long as we conform to
# http://wiki.linux-ha.org/HeartbeatResourceAgent
# but it does not hurt to conform to lsb init-script exit codes,
# where we can.
# http://refspecs.linux-foundation.org/LSB_3.1.0/
#LSB-Core-generic/LSB-Core-generic/iniscrptact.html
####

drbd_set_role_from_proc_drbd()
{
local out
if ! test -e /proc/drbd; then
ROLE="Unconfigured"
return
fi

dev=$( $DRBDADM sh-dev $RES )
minor=${dev#/dev/drbd}
if [[ $minor = *[!0-9]* ]] ; then
# sh-minor is only supported since drbd 8.3.1
	minor=$( $DRBDADM sh-minor $RES )
fi

if [[ -z $minor ]] || [[ $minor = *[!0-9]* ]] ; then
	ROLE=Unknown
	return
fi



if out=$(sed -ne "/^ *$minor: cs:/ { s/:/ /g; p; q; }" /proc/drbd); then
	set -- $out
	ROLE=${5%/**}
	: ${ROLE:=Unconfigured} # if it does not show up
else
	ROLE=Unknown
fi
}



case "$CMD" in
	start)
# try several times, in case heartbeat deadtime
# was smaller than drbd ping time
try=6
while true; do
$DRBDADM primary $RES && break
let "--try" || exit 1 # LSB generic error
sleep 1
done
;;

	stop)
# heartbeat (haresources mode) will retry failed stop
# for a number of times in addition to this internal retry.
try=3
while true; do
$DRBDADM secondary $RES && break
# We used to lie here, and pretend success for anything != 11,
# to avoid the reboot on failed stop recovery for "simple
# config errors" and such. But that is incorrect.
# Don't lie to your cluster manager.
# And don't do config errors...
let --try || exit 1 # LSB generic error
sleep 1
done
;;

	status)
if [ "$RES" = "all" ]; then
echo "A resource name is required for status inquiries."
exit 10
fi
ST=$( $DRBDADM role $RES )
ROLE=${ST%/**}
case $ROLE in
Primary|Secondary|Unconfigured)
# expected
;;

	*)
# unexpected. whatever...
# If we are unsure about the state of a resource, we need to
# report it as possibly running, so heartbeat can, after failed
# stop, do a recovery by reboot.
# drbdsetup may fail for obscure reasons, e.g. if /var/lock/ is
# suddenly readonly. So we retry by parsing /proc/drbd.
drbd_set_role_from_proc_drbd
esac
case $ROLE in

Primary)
echo "running (Primary)"
exit 0 # LSB status "service is OK"
;;

Secondary|Unconfigured)
echo "stopped ($ROLE)"
exit 3 # LSB status "service is not running"
;;

*)

# NOTE the "running" in below message.
# this is a "heartbeat" resource script,
# the exit code is _ignored_.
echo "cannot determine status, may be running ($ROLE)"
exit 4 # LSB status "service status is unknown"
;;

esac
;;

*)

echo "Usage: drbddisk [resource] {start|stop|status}"
exit 1
;;

esac

exit 0

添加执行权限: chmod 755 /etc/ha.d/resource.d/drbddisk

node1做为heartbeat和drbd的主节点时,/etc/drbd1会自动挂载到/db,当主宕机后,node2接管heartbeat的虚拟IP并自动接管drbd提升为主节点且挂载/etc/drbd1到/db下。

 

原创文章,转载请注明。本文链接地址: https://www.rootop.org/pages/3297.html

作者:Venus

服务器运维与性能优化

评论已关闭。