Поэтому я хочу настроить сервер баз данных MySQL с высокой доступностью - таким образом, я приобрел себе два устройства (Banana Pi) и следовал руководству по установке программного обеспечения кластера MySQL. Я знаю, что созвездие только из двух устройств не совсем то, как кластер MySQL предназначен для использования, но для экономии затрат на оборудование, я получил только эти два устройства на данный момент.
Пока у меня есть следующая конфигурация (sqlnode1 и sqlnode2 - имена хостов устройств):
Узлы управления (ndb_mgmd):
- sqlnode1 (идентификатор узла: 1)
- sqlnode2 (идентификатор узла: 2)
Двигатели хранения (ndbd):
- sqlnode1: настроен для использования узла управления на локальном хосте (идентификатор узла: 3)
- sqlnode2: настроен для использования узла управления на локальном хосте (идентификатор узла: 4)
MySQL серверы (mysqld):
- sqlnode1: настроен на использование обоих узлов ndbd (идентификатор узла: 5)
- sqlnode2: настроен на использование обоих узлов ndbd (идентификатор узла: 6)
Так что в основном на каждом устройстве есть работающие ndb_mgmd, ndbd и mysqld.
Я хотел бы добиться, чтобы в случае сбоя одного из устройств другое устройство было полностью пригодным для использования (по некоторым очень конкретным причинам я не могу использовать простую репликацию базы данных здесь).
Как только я запускаю все компоненты, все работает нормально. Если я изменяю данные на одном хосте MySQL, другой немедленно применяет изменения (и наоборот).
Однако, если я отсоединяю кабель локальной сети одного из устройств, происходит следующее:
- Отключение sqlnode2: функционирующий узел (sqlnode1) зависает в течение короткого периода времени, а затем продолжает работать должным образом (что в основном то, что я хочу)
- Отключение sqlnode1: функционирующий узел (sqlnode2) зависает в течение короткого периода времени и затем вообще не работает - все запросы заканчиваются "отказом кластера 4009", и запросы только начинают работать снова после восстановления сетевого подключения узла, который имеет выпал После этого мониторинг демона ndb_mgmd показывает, что идентификатор узла 4 (ndbd на sqlnode2) был вынужден завершить работу.
Таким образом, вся система, кажется, зависит от sqlnode1, и мне действительно интересно, почему это происходит, потому что я подумал, что если компонент выпадает (и доступен другой того же типа), все продолжает работать.
Я следовал этому руководству для настройки двух разных узлов управления: http://www.clusterdb.com/mysql-cluster/deploying-mysql-cluster-over-multiple-hosts
Я что-то пропустил? Или, может быть, я неправильно понял, как работает кластеризация MySQL?