Здравствуйте пишу скрипт для heartbeata вот здесь (bash такое может? (комментарий)) мне помогли очень. Для каждой машины свой DRBD диск используется в состоянии primary/secondary. Вопрос теперь в другом, в логике работы функций start и stop доменов
Изучая подобные скрипты заметил что старт домена производится командой
virsh create /patchtoconfig
virsh start домен
virsh destroy домен #но сначало было бы не плохо попытаться остановить машину shutdown
virsh undefined домен
t -e
SELF=10.1.1.1
PEER=10.1.1.2
if [ $(hostname) = xen2 ]; then
SELF=10.1.1.2
PEER=10.1.1.1
fi
SSH_OPTS="-o ConnectTimeout=15"
configfile=$1
command=$2
function usage {
echo "Usage: $0 CFG start|stop|status"
exit 1
}
if [ ! -r "$configfile" ]; then
usage
fi
. $configfile
function is_alive {
#xm list | grep -q "^$1 "
xm list $1 >/dev/null 2>&1
}
function safe_to_migrate {
case "$(drbdadm cstate $DRBD)" in
Connected|SyncSource|SyncTarget)
return 0
;;
*)
return 1
echo "$DRBD is disconnected, NOT safe to migrate"
;;
esac
}
function prepare_migration {
echo "Preparing for migration:"
ssh $SSH_OPTS $PEER "drbdadm primary $DRBD && vgscan && vgchange -a y $LVM";
if [ "$EXTRA_DRBD" ]; then
ssh $SSH_OPTS $PEER "drbdadm primary $EXTRA_DRBD"
fi
}
function dom_names {
ls $CFGDIR | egrep '^[0-9a-z]+$'
}
function start_disk {
echo "Starting volumes:"
drbdadm primary $DRBD
vgscan
vgchange -a y $LVM
if [ "$EXTRA_DRBD" ]; then
drbdadm primary $EXTRA_DRBD
fi
}
function stop_disk {
echo "Stopping volumes:"
vgchange -a n $LVM || true
drbdadm secondary $DRBD || true
if [ "$EXTRA_DRBD" ]; then
drbdadm secondary $EXTRA_DRBD || true
fi
}
function update_mac_cache {
arp -d $name >/dev/null 2>&1 || true
ping -c1 -w1 $name >/dev/null 2>&1 || true
}
function start_domains {
start_disk
local name
for name in $(dom_names); do
echo -n "Starting $name: "
if is_alive $name; then
echo "already running."
else
if safe_to_migrate &&
ssh $SSH_OPTS $PEER "xm migrate --live $name $SELF"; then
update_mac_cache
echo "migrated back."
else
xm create -q $CFGDIR/$name
echo "created."
sleep 2
fi
fi
done
if safe_to_migrate; then
ssh $SSH_OPTS $PEER "vgchange -a n $LVM; drbdadm secondary $DRBD" || true
if [ "$EXTRA_DRBD" ]; then
ssh $SSH_OPTS $PEER "drbdadm secondary $EXTRA_DRBD" || true
fi
fi
touch $LOCKFILE
}
function stop_domains {
rm -f $LOCKFILE
local migration
if safe_to_migrate && prepare_migration; then
migration="OK"
else
migration="NG"
fi
local name
for name in $(dom_names); do
echo -n "Stopping $name: "
if ! is_alive $name; then
echo "not running."
else
if [ $migration = "OK" ] && xm migrate --live $name $PEER; then
update_mac_cache
echo "migrated."
else
xm shutdown $name
echo "shutting down..."
fi
fi
done
echo -n "Waiting for shutdown complete..."
local n=0
while [ $n -lt 60 ]; do
alive=0
for name in $(dom_names); do
if is_alive $name; then
alive=1
fi
done
if [ $alive = 0 ]; then
echo "ok"
break
fi
echo -n "."
sleep 1
n=$(expr $n + 1)
done
for name in $(dom_names); do
if is_alive $name; then
echo "Destroying $name"
xm destroy $name
fi
done
stop_disk
}
function print_status {
if [ -f $LOCKFILE ]; then
echo "OK"
else
echo "Stopped"
exit 1
fi
}
case $command in
start)
start_domains
;;
stop)
stop_domains
;;
status)
print_status
;;
*)
usage
;;
esac
Так как лучше организовать:
sart/destroy
или
create/undefined