Проблема:
Перечень проблем, которые могут указывать на проблему с кластером Galera:
1) В EMS во вкладке "Информация" → "Состояние систем резервирования" → "MySQL" имеется одна из следующих ситуаций:
- Одна из нод недоступна
Репликация нарушена : mysqladmin: connect to server at '192.168.1.2' failed error: 'Can't connect to server on '192.168.1.2' (115)' Check that mariadbd is running and that the socket: '/run/mysqld/mysqld.sock' exists! [Error nodes state] Количество нод кластера '192.168.1.1' Galera Cluster уменьшилось до '1' [192.168.1.1] wsrep_cluster_size = 1 wsrep_cluster_status = Primary wsrep_local_state_comment = Synced
- Разрушился кластер (SplitBrain) и каждая нода считает себя мастером
Репликация нарушена : [Error nodes state] Количество нод кластера '192.168.1.1' Galera Cluster уменьшилось до '1' [Error nodes state] Количество нод кластера '192.168.1.2' Galera Cluster уменьшилось до '1' [192.168.1.1] wsrep_cluster_size = 1 wsrep_cluster_status = Primary wsrep_local_state_comment = Synced [192.168.1.2] wsrep_cluster_size = 1 wsrep_cluster_status = Primary wsrep_local_state_comment = Synced
- База данных недоступна
Репликация нарушена : mysqladmin: connect to server at '192.168.1.1' failed error: 'Can't connect to server on '192.168.1.1' (115)' Check that mariadbd is running and that the socket: '/run/mysqld/mysqld.sock' exists! mysqladmin: connect to server at '192.168.1.2' failed error: 'Can't connect to server on '192.168.1.2' (115)' Check that mariadbd is running and that the socket: '/run/mysqld/mysqld.sock' exists!
2) В логах Ansible имеются ошибки, вида:
MSG:
The container "eltex-mariadb" has been paused (409 Client Error for http+docker://localhost/v1.51/containers/eltex-mariadb/exec: Conflict ("Container 4b53422d36d4e8cf83bd6f76948e5693cc8dfe27e6e878e56c37fd0c31d8da83 is restarting, wait until the container is running"))
3) При выводе команды docker ps -a контейнеры eltex-mariadb находятся в состоянии Restarting или не работают дольше 1 минуты без рестарта.
Решение:
Обратите внимание, что некоторые способы могут не работать на старых версиях плейбуков. Проверьте актуальность версии и, при необходимсти, обновите плейбуки до актуальной версии
Для решения данных проблем можно воспользоваться одной из следующих команд, в зависимости от ситуации:
- Остановка только баз данных, не затрагивая сервисы (мастер на первую ноду; данные базы - с последней живой ноды или той, которая отказала/была остановлена последней):
cd /opt/eltex-softwlc/ # НА ВСЕХ НОДАХ С БАЗОЙ ДАННЫХ sudo docker compose down eltex-mariadb # НА ВСЕХ НОДАХ С БАЗОЙ ДАННЫХ cd /home/user/ansible/ sudo ./eltex-softwlc-helper-ansible-latest.sh --run
Является рекомендуемым способом в связи с минимализацией downtime услуг
- Остановка всех сервисов на обоих нодах и последовательное восстановление Galera и сервисов (мастер на первую ноду; данные базы - с последней живой ноды или той, которая отказала/была остановлена последней):
sudo ./eltex-softwlc-helper-ansible-latest.sh --restore-galera
Является рекомендуемым способом, при условии возможности downtime сервисов больше 10 минут на их рестарт и поднятие
- Восстановление репликации путём обнуления grastate.dat, остановкой только баз данных и последующее их восстановление (мастер на первую ноду; данные базы - с первой ноды):
cd /opt/eltex-softwlc/ # НА ВСЕХ НОДАХ С БАЗОЙ ДАННЫХ sudo docker compose down eltex-mariadb # НА ВСЕХ НОДАХ С БАЗОЙ ДАННЫХ sudo rm /opt/eltex-softwlc/volumes/mysql/datadir/grastate.dat # НА ВСЕХ НОДАХ С БАЗОЙ ДАННЫХ cd /home/user/ansible/ sudo ./eltex-softwlc-helper-ansible-latest.sh --run
Обратите внимание, что при отказе базы данных на первой ноде раньше, чем были остановлены/потеряны другие, при восстановлении данным способом данные могут быть утеряны