Nano Hash - криптовалюты, майнинг, программирование

Настройка аварийного восстановления для кластеров MariaDB Galera

У меня есть два кластера MariaDB Galera с 3 узлами.

Кластер 1: MDB-01, MDB-02, MDB-03 Кластер 2: MDBDR-01, MDBDR-02, MDBDR-03

Эти два кластера находятся в двух разных центрах обработки данных, которые находятся в двух географических регионах.

Кластер 1 — это кластер PRODUCTION, а кластер 2 — это кластер DR.

Асинхронная репликация с использованием GTID была настроена между MDB-01 и MDBDR-01 в соответствии с данной конфигурацией по ссылке: http://www.severalnines.com/blog/deploy-asynchronous-replication-slave-mariadb-galera-cluster-gtid-clustercontrol (ссылка асинхронная репликация между кластером MariaDB Galera и автономным экземпляром MariaDB.Однако я настроил ту же конфигурацию для асинхронной репликации между кластером MariaDB Galera и кластером MariaDB Galera)

Я могу переключиться с текущего ведомого MDBDR-01 => MDB-01 на MDBDR-01 => MDB-02 с помощью следующей команды:

ЗАМЕНИТЬ МАСТЕР НА master_host='MDB-02'

Однако я получаю вызов, как указать MDBDR-02 => MDB-01 в случае, если MDBDR-01 не работает.

Не могли бы вы предоставить входные данные для достижения наведения MDBDR-02 => MDB-01 или MDBDR-03 => MDB-01.

09.10.2015

  • GTID MariaDB, а не Oracle? 20.10.2015
  • Привет Рик, Мы используем кластер MariaDB Galera, а не кластер Oracle MySQL. 28.10.2015
  • Кластер NDB — это не то, о чем я спрашиваю. Oracle 5.6 имеет одну разновидность GTID; У Галеры есть другой. (Однако Галера справится и с тем, и с другим.) 30.10.2015

Ответы:


1

Одна вещь, которую вам нужно понять, кратко упоминается в этой статье, заключается в том, что каждая реализация GTID в MariaDB может вызвать проблемы в этой ситуации. Поскольку каждый узел поддерживает свой собственный список GTID, а транзакции Galera не имеют собственного идентификатора, возможно, что один и тот же GTID не указывает на одно и то же место на каждом сервере (см. эту статью).

Из-за этой проблемы я бы не стал пытаться делать то, что вы делаете, без MariaDB 10.1. Недавно была выпущена версия MariaDB 10.1.8, которая является первой общедоступной версией линейки 10.1. 10.1 изменяет реализацию GTID, поэтому транзакции galera используют свои собственные server_id (устанавливаются через переменную конфигурации). Затем вы можете отфильтровать репликацию на ведомых устройствах, чтобы реплицировать только идентификатор galera.

Чтобы переключиться на другой подчиненный сервер, вам нужно будет выполнить последний GTID на старом подчиненном сервере. gtid_slave_pos хранится в mysql.gtid_slave_pos, но mysql.* таблицы не реплицируются. Я не совсем уверен, и у меня нет способа проверить, передается ли исходный GTID транзакции другим подчиненным узлам galera (т. е. если galera server_id главного кластера равен 1, а galera server_id подчиненного кластера равен 2 и MDBDR-01 получает подчиненное событие с GTID 1-1-123, MDBDR-02 зарегистрирует его как 1-1-123 или 1-2-456). Я предполагаю, что это не так, поскольку новая реализация GTID должна изменить server_id, но вы можете это проверить. Поскольку вы, вероятно, не можете получить последний выполненный основной GTID с другого подчиненного узла galera, вам, вероятно, потребуется получить GTID от старого подчиненного устройства, что может быть невозможно, если вы изящно не отключите старый подчиненный узел. Вам может понадобиться найти GTID из последней выполненной транзакции в бинарном журнале на новом ведомом устройстве и попытаться сопоставить его с транзакцией в бинарном журнале мастера. Кроме того, если вы не используете sync_binlog = 1, бинлог ненадежен и может немного отставать.

Поскольку каждый подчиненный узел galera, вероятно, не знает о выполненных GTID и не может пропустить предыдущие события GTID, вам также может потребоваться поиграть с SQL_SLAVE_SKIP_COUNTER, чтобы добраться до правильной позиции, если найденный вами GTID отстает.

Когда вы получите GTID (или его предположение), вы затем настроите репликацию на новом ведомом устройстве так же, как вы настроили его на исходном ведомом устройстве. Это должны сделать следующие команды:

SET GLOBAL gtid_slave_pos = "{Last Executed GTID}";
CHANGE MASTER TO master_host="{Master Address}", master_port={Master Port}, master_user="{Replication User}", master_password={Replication Password}, master_use_gtid=slave_pos;
START SLAVE;

Вы также должны отключить репликацию на старом подчиненном устройстве перед его перезапуском, чтобы пропущенные события не реплицировались дважды.

До тех пор, пока исполняемый подчиненный GTID не будет реплицирован через galera, что может никогда не произойти, аварийное переключение, подобное этому, будет запутанным процессом.

20.10.2015
  • Привет, G-Nugget, спасибо за ответ. Виджей 28.10.2015
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..