Развернул 2 гостей kvm ( db и приложение) на хосте Debian7.
Я могу настроить их автозапуск
root@mhost:~# virsh autostart db
root@mhost:~# virsh autostart app
Фактически это создает 2 символические ссылки в /etc/libvirt/qemu/autostart/
:
root@mhost:~# ls /etc/libvirt/qemu/autostart/
db.xml app.xml
Затем я подумал, что могу обеспечить порядок запуска двух гостей, просто изменив имя ссылки:
root@mhost:/etc/libvirt/qemu/autostart# mv db.xml 10db.xml
root@mhost:/etc/libvirt/qemu/autostart# mv app.xml 20app.xml
но оказывается, это не работает. На самом деле после изменения названия ссылок они даже больше не запускаются. В чем проблема?
Eсть похожий вопрос с ответом, но он не объяснил, почему метод символических ссылок не работает.
Кроме того, я пытался использовать сценарий запуска инициализации, чтобы обеспечить порядок, но это тоже не сработало. Я не специалист по сценариям оболочки, поэтому в моем сценарии могут быть проблемы, например, следующее:
#! /bin/sh
# /etc/init.d/kvmguests
case "$1" in
start)
echo "Starting all kvm guests ..."
virsh start db
virsh start app
echo "Done."
;;
stop)
echo "Stopping all kvm guests ..."
virsh shutdown app
virsh shutdown db
echo "Done."
;;
*)
echo "Usage: /etc/init.d/kvmguests {start|stop}"
exit 1
;;
esac
exit 0
IMHO Я не думаю, что вы можете контролировать порядок загрузки, изменяя имена символических ссылок. но есть обходной путь
В /etc/sysconfig/libvirt-guests
вариант START_DELAY
вы можете установить задержку между загрузками (чтобы не все виртуальные машины запускались одновременно)
Чтобы (вроде) контролировать порядок, который вы можете изменить <emulator>
в XML домена и укажите на ваш скрипт, который запустит домен после некоторой задержки
например что-то вроде этого:
<domain type='kvm'>
<name>test</name>
...
<devices>
<emulator>/usr/local/bin/qemu-kvm-delay</emulator>
<devices>
</domain>
содержание /usr/local/bin/qemu-kvm-delay
может быть так просто, как:
sleep 1000
exec /usr/bin/qemu-kvm $*
или что-то необычное, например, проверка доступности какой-либо службы и расчет задержки для каждой виртуальной машины
Это проблема на уровне приложений, а не на уровне инфраструктуры.
На самом деле загрузка 2 экземпляров KVM означает, что вы включи их, нет никакой гарантии относительно последовательности загрузки двух операционных систем внутри этих двух экземпляров KVM с точки зрения KVM.
Однако вы можете сделать это самостоятельно. вот логика:
Возьмем, к примеру, mysql, вот простой сценарий bash:
#!/bin/bash
# start the database VM
sudo virsh start db
# make sure the database is started
IS_DB_DOWN=true
while $IS_DB_DOWN; do
# test if the DB is up
nc -z <your-db-host> 3306 > /dev/null 2>&1
if [ $? -eq 0 ]; then
IS_DB_DOWN=true
fi
sleep 5 # use 5 sec as internal
done
# start your VM that runs application
sudo virsh start app