Виртуализация · 3 min read · Dec 01, 2025

Репликация виртуальных машин и аварийное переключение с VMWare Server и Debian Etch (4.0) - Страница 3

4. Настройка пакета Heartbeat

Установка пакета Heartbeat позволит включить автоматическое аварийное переключение и управление ресурсами в случае сбоя ресурсов и/или оборудования.

В этом руководстве я буду использовать Heartbeat по сети, но также возможно использовать Heartbeat с помощью последовательного кабеля и других методов. Heartbeat будет проверять обновления с обоих серверов, и когда не будет получать больше обновлений, инициирует аварийное переключение и захват указанных ресурсов (в нашем случае, DRBD и VMWare).

ЕСЛИ НЕ УКАЗАНО ИНОЕ, ВСЕ КОМАНДЫ ВЫПОЛНЯЮТСЯ НА ОБОИХ СЕРВЕРАХ

Хорошо, перейдем к настройке. Для вашего удобства вы можете использовать следующие конфигурационные файлы, так как они адаптированы для этого руководства. Heartbeat требует настройки 3 файлов, а именно: “ha.cf”, “haresources” и “authkeys”. Отредактируйте их соответственно с помощью вашего любимого редактора:

nano /etc/ha.d/ha.cf
logfile /var/log/ha-log
logfacility local0
keepalive 1
deadtime 10
warntime 10
udpport 694
bcast   heth1
auto_failback off
node    server1  ## убедитесь, что оба имени доступны - проверьте /etc/hosts
node    server2
ping 192.168.0.254  ## Введите IP-адрес, который можно пинговать из сети ETH0 !!
respawn hacluster /usr/lib/heartbeat/ipfail

ПРИМЕЧАНИЕ: Этот файл ha.cf позволит осуществить аварийное переключение в случае сбоя сетевого соединения на ETH0 и/или общего сбоя сервера. Проблемы с ETH1 НЕ приведут к аварийному переключению!

Теперь редактируем файл “authkeys”:

nano /etc/ha.d/authkeys
auth 3
3 md5 failover  ## это просто строка, введите что хотите! auth 3 md5 использует шифрование md5

Но нам также нужно изменить права доступа к этому файлу, чтобы он был доступен только для чтения “root”:

chmod 600 /etc/ha.d/authkeys

И, наконец, редактируем файл “haresources”, который содержит ресурсы для аварийного переключения.

nano /etc/ha.d/haresources
server1 192.168.0.10 drbddisk::vm1 Filesystem::/dev/drbd0::/var/vm::ext3 vmstart
# Объяснение:
# Имя основного сервера --> виртуальный IP-адрес, который будет использоваться --> ресурс DRBD, как настроено в /etc/drbd.conf
# --> где монтировать ресурс DRBD и тип файловой системы --> ресурс для запуска/остановки в случае аварийного переключения
# ресурс "vmstart" является пользовательским скриптом, необходимым для VMWare Server, так как вы не можете позволить Heartbeat управлять
# службами vmware, иначе вы столкнетесь с ужасными ошибками "не настроено для этой машины"!

Перед тем как продолжить, нам нужно создать пользовательский скрипт “vmstart”, чтобы убедиться, что виртуальные машины автоматически запускаются на сервере в случае аварийного переключения. С другими ресурсами, такими как Apache, Mysql, NFS … мы могли бы просто удалить скрипты запуска для них из директорий rc.d, но с VMWare это невозможно, так как они необходимы для нормальной работы служб. Поэтому нам нужен пользовательский скрипт для запуска виртуальных машин в случае аварийного переключения, так как службы VMWare уже будут работать до аварийного переключения!

Скрипт “vmstart” должен находиться в папке “/etc/ha.d/resource.d/“, так как именно там Heartbeat будет его искать.

nano /etc/ha.d/resource.d/vmstart
#!/bin/bash 
case "$1" in 
start) 
/usr/bin/vmware-cmd -s register "/var/vm/'имя виртуальной машины'/'файл конфигурации vm'.vmx" 2>/dev/null
/usr/bin/vmware-cmd "/var/vm/'имя виртуальной машины'/'файл конфигурации vm'.vmx" start 2>/dev/null 
;;
stop) 
/usr/bin/vmware-cmd "/var/vm/'имя виртуальной машины'/'файл конфигурации vm'.vmx" stop trysoft 2> /dev/null 
;;
status) 
if `/usr/bin/vmware-cmd "/var/vm/'имя виртуальной машины'/'файл конфигурации vm'.vmx" getstate 2>/dev/null | grep -q "getstate() = on"` 
then 
echo "работает" 
else 
echo "остановлено" 
fi
;;
*) 
echo "Использование: `basename $0` 'файл виртуальной машины' {start|stop|status}" 
echo "Где "файл виртуальной машины" выглядит как /var/vm/'имя виртуальной машины'/'файл конфигурации vm'.vmx"
;;
esac 
exit 0

Заполните директивы ‘имя виртуальной машины’ и ‘файл конфигурации vm’ необходимой информацией (проверьте директорию /var/vm). Если у вас несколько виртуальных машин, просто скопируйте строки.

Этот пользовательский скрипт сначала зарегистрирует виртуальную машину (необходимо при использовании нового установленного сервера!), а затем запустит их. Это необходимо сделать таким образом, так как VMWare Server имеет возможность автоматически запускать ВМ только при запуске системы. Теперь, когда вы все настроили, пришло время проверить, все ли в порядке. Запустите службу Heartbeat, сначала на Server1, затем на Server2.

/etc/init.d/heartbeat start

Если все в порядке, вы должны увидеть новый виртуальный IP, появляющийся на вашем основном сервере.

ifconfig |more

Вывод:

eth0 Link encap:Ethernet  HWaddr 00:11:09:00:BB:5D  
          inet addr:192.168.0.1  Bcast:192.168.0.255  Mask:255.255.255.0  
          inet6 addr: fe80::211:9ff:fe00:bb5d/64 Scope:Link  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1  
          RX packets:1025774 errors:0 dropped:0 overruns:0 frame:0  
          TX packets:227653 errors:0 dropped:0 overruns:0 carrier:0  
          collisions:0 txqueuelen:0  
          RX bytes:281072399 (268.0 MiB)  TX bytes:56403081 (53.7 MiB)  
eth0:0    Link encap:Ethernet  HWaddr 00:11:09:00:BB:5D  
          inet addr:192.168.0.10  Bcast:192.168.0.255  Mask:255.255.255.0  
          ...

Хорошо, если вы чувствуете себя удачливым и следовали этому руководству с некоторым здравым смыслом, то теперь пришло время выдернуть этот шнур питания, держитесь за свою чашку кофе и смотрите, как виртуальная машина выходит в онлайн на вашем втором сервере.

5. Ссылки

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.