Ситуация 1 – Потеря хоста кластера
В случае потери хоста без СГУ (т.е. состоящего кластере, но не участвующего в управлении системой), при условии, что включен кластер ВД для ВМ (пункт 3.12 настоящей инструкции) СГУ организует перезапуск ВМ на более свободных хостах кластера. В данной ситуации если ресурсов (ЦПУ или RAM) для ВМ будет недостаточно, она изменит свое состояние на НЕИЗВЕСТНО. В этом случае необходимо добавить или высвободить ресурсы в кластере. Если хост потерян безвозвратно, его следует удалить из СГУ (пункт 3.4.4 настоящей инструкции), это необходимо для того, чтобы мониторинг системы не засорял лог файлы. Чтобы добавить прежний хост после решения проблемы, или новый взамен прежнего необходимо проверить сетевые настройки и настройки хранилищ (должны совпадать с остальными хостами кластера), после этого используя пункт 3.4.3 настоящей инструкции добавить хост в кластер.
Ситуация 2 – Потеря хоста отказоустойчивого кластера СГУ
В случае потери 1 из хостов отказоустойчивого кластера, его статус измениться на «error». Для проверки необходимо использовать:
ihcs onezone show 0
Так как потеря одного хоста сильно не влияет на работу системы, механизм отказоустойчивости отработает корректно, и лидер смениться, однако в данном случае кластер работает в аварийном режиме, и потеря еще одного хоста приведет к состоянию «катастрофа», чтобы привести его в должный вид и избавить от излишнего логирования мониторинга системы, необходимо удалить узел (согласно пункту 3.4.4 настоящей интрукции), а затем в терминале лидера удалить хост и проверить выполнение операции
ihcs onezone server-del 0 <host_id> ihcs onezone show 0
ВАЖНО!
Данные действия проводятся только для хоста со статусом error. В противном случае вы рискуете повредить HA кластер СГУ.
После выполнения этих шагов, для восстановления прежней работы кластера, необходимо восстановить поврежденный хост или настроить новый с идентичными настройками потерянного хоста (установлен гипервизор, СГУ, сетевые параметры и т.д.).
После этого необходимо НА ЛИДЕРЕ сделать копию БД СГУ и перенести ее на нужный узел:
docker exec -t hcs onedb backup -u oneadmin -p horizon -d opennebula /var/tmp/dump.sql scp /var/tmp/dump.sql root@<IP>:/var/tmp/
<IP> - адрес хоста, который будет добавлен в кластер СГУ
На хосте, добавляемом в кластер загрузить/восстановить БД СГУ:
docker exec -t hcs su -s "/bin/sh" -c "one -f stop" oneadmin docker exec -t hcs su -s "/bin/sh" -c "sunstone-server stop" oneadmin docker exec -t hcs onedb restore -f -u oneadmin -p horizon -d opennebula /var/tmp/dump.sql docker kill hcs
На ЛИДЕРЕ:
docker exec -t hcs onezone server-add 0 --name server-2 --rpc http://<IP>:2633/RPC2 scp /var/lib/docker/volumes/hvol/_data/auth/.one/* root@<IP>:/var/lib/docker/volumes/hvol/_data/auth/.one/ scp /var/lib/docker/volumes/hvol/_data/etc/one/oned.conf root@<IP>:/var/lib/docker/volumes/hvol/_data/etc/one/ <IP> - адрес хоста, который будет добавлен в кластер СГУ
На ХОСТЕ:
sed -i 's/.* SERVER_ID = .*/ SERVER_ID = <ID>,/' /var/lib/docker/volumes/hvol/_data/etc/one/oned.conf docker restart hcs
<ID> - номер сервера в кластере, в данном примере так как есть server-0 и server-1 необходимо указать 2
На лидере проверить
ihcs onezone show 0
Ситуация 3 – Потеря 2-х и более хостов отказоустойчивого кластера СГУ
При потере всех хостов кластера отказоустойчивого СГУ, кроме 1 необходимо выполнить следующие действия:
Проверить какой из хостов находится в рабочем состоянии
ihcs onezone show 0
Подключится терминалу его гипервизора и отредактировать в файле /var/lib/docker/volumes/hvol/_data/etc/one/oned.conf cтрокe 47 изменив запись SERVER_ID = <id>, на запись SERVER_ID = -1
Далее необходимо перезапустить контейнер с СГУ и проверить статус кластера, хост должен перейти в режим solo. После этого СГУ хоста будет доступно и позволит управлять системой.
ВАЖНО!
Данные действия являются последней возможность подключиться к системе управления и выполнить действия, необходимы для спасения и восстановления системы, в случае наступления такой ситуации рекомендуется все действия производить через техническую поддержку, так как Вы рискуете потерять данные в системе.
Для восстановления кластера, необходимо еще 2 хоста, с идентичными настройками потерянных (гмпервизор, СГУ, сеть, хранилища и т.д). Необходимо удалить узлы (согласно пункту 3.4.4 настоящей инструкции), а затем в терминале оставшегося хоста удалить хосты в состоянии error и проверить выполнение операции:
sed -i 's/.* SERVER_ID = .*/ SERVER_ID = 0,/' /var/lib/docker/volumes/hvol/_data/etc/one/oned.conf docker restart hcs ihcs onezone server-del 0 <host_id> ihcs onezone show 0
После этого, на хосте, который стал лидером:
docker exec -t hcs onedb backup -u oneadmin -p horizon -d opennebula /var/tmp/dump.sql scp /var/tmp/dump.sql root@<ip_1>:/var/tmp/
<ip_1> - адрес 1-го хоста восстановления
На 1 хосте восстановления:
docker exec -t hcs su -s "/bin/sh" -c "one -f stop" oneadmin docker exec -t hcs su -s "/bin/sh" -c "sunstone-server stop" oneadmin docker exec -t hcs onedb restore -f -u oneadmin -p horizon -d opennebula /var/tmp/dump.sql docker kill hcs
На ЛИДЕРЕ:
docker exec -t hcs onezone server-add 0 --name server-2 --rpc http://<ip_1>:2633/RPC2 scp /var/lib/docker/volumes/hvol/_data/auth/.one/ root@<ip_1>:/var/lib/docker/volumes/hvol/_data/auth/.one/* scp /var/lib/docker/volumes/hvol/_data/etc/one/oned.conf root@<ip_1>:/var/lib/docker/volumes/hvol/_data/etc/one/ <ip_1> - адрес 1-го хоста восстановления
На 1 хосте восстановления:
sed -i 's/.* SERVER_ID = .*/ SERVER_ID = 1,/' /var/lib/docker/volumes/hvol/_data/etc/one/oned.conf docker restart hcs docker exec -t hcs onezone show 0 docker exec -t hcs onezone server-add 0 --name server-2 --rpc http://<ip_1>:2633/RPC2
На ЛИДЕРЕ:
docker exec -t hcs onezone server-del 0 2 rm /var/tmp/dump.sql docker exec -t hcs onedb backup -u oneadmin -p horizon -d opennebula /var/tmp/dump.sql scp /var/tmp/dump.sql root@<ip_2>:/var/tmp/
<ip_2> - адрес 2-го хоста восстановления
На 2 хосте восстановления:
docker exec -t hcs su -s "/bin/sh" -c "one -f stop" oneadmin docker exec -t hcs su -s "/bin/sh" -c "sunstone-server stop" oneadmin docker exec -t hcs onedb restore -f -u oneadmin -p horizon -d opennebula /var/tmp/dump.sql docker kill hcs
На ЛИДЕРЕ:
docker exec -t hcs onezone server-add 0 --name server-3 --rpc http://<ip_2>:2633/RPC2 scp /var/lib/docker/volumes/hvol/_data/auth/.one/ root@<ip_2>:/var/lib/docker/volumes/hvol/_data/auth/.one/* scp /var/lib/docker/volumes/hvol/_data/etc/one/oned.conf root@<ip_2>:/var/lib/docker/volumes/hvol/_data/etc/one/
<ip_2> - адрес 2-го хоста восстановления
На 2 хосте восстановления:
sed -i 's/.* SERVER_ID = .*/ SERVER_ID = 2,/' /var/lib/docker/volumes/hvol/_data/etc/one/oned.confconf docker restart hcs docker exec -t hcs onezone server-add 0 --name server-3 --rpc http://<ip_2>:2633/RPC2
<ip_2> - адрес 2-го хоста восстановления
На ЛИДЕРЕ:
docker exec -t hcs onezone server-del 0 3