Как сделать так, чтобы предыдущий мастер стал слейвом после его смены на новый мастер, не переносив при этом базу данных?

Добрый день! 

У меня есть вопрос о репликации в MariaDB с использованием GTID. В текущей настройке у меня имеется мастер (m1), который реплицируется на два параллельных слейва (s1 и s2), без создания цепочки. Когда мастер падает, слейв (s1) становится новым мастером, и репликация на слейве (s2) останавливается. 

Чтобы перезапустить репликацию на (s2) с нового мастера, мне необходимо сделать резервную копию (mariabackup) с нового мастера и передать этот дамп на (s2) для разворачивания. Также нужно повторить этот процесс для прежнего мастера (m1). 

Вопрос состоит в том, существует ли способ перезапустить репликацию на (s2) без необходимости создания резервных копий, используя возможности GTID? Насколько я понимаю, GTID предназначен для обеспечения уникальности. 

Спасибо!
  • 22 декабря 2024 г. 18:43
Ответы на вопрос 2
Добрый день!

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

Вот шаги, которые вы можете предпринять, чтобы сделать прежний мастер (m1) слейвом без создания резервных копий:

1. **Убедитесь, что GTID включен**: Убедитесь, что у вас включены GTID и в конфигурации серверов (либо в `my.cnf`, либо динамически на сервере).

   ```ini
   gtid_strict_mode = ON
   gtid_domain_id = 1 # или другой уникальный ID для вашей среды
   ```

2. **Синхронизируйте состояние GTID**: Убедитесь, что `s2` знает о последнем GTID, полученном от нового мастера (s1). На новом мастере (s1) выполните команду:

   ```sql
   SHOW MASTER STATUS;
   ```

   запомните значение `GTID` из `Executed_Gtid_Set`.

3. **Настройте старый мастер (m1)**: Остановите на нем репликацию, если она еще работает, и выполните следующую команду:

   ```sql
   STOP SLAVE;
   ```

   Затем настройте его как слейв, указывая нового мастера (s1):

   ```sql
   CHANGE MASTER TO MASTER_HOST='IP адрес s1', MASTER_USER='user', MASTER_PASSWORD='password', MASTER_GTID_PURGED='GTID с s1';
   ```

   Важно указать `MASTER_GTID_PURGED` с GTID, который отображает состояние нового мастера (s1).

4. **Запуск репликации на m1**: После этого запустите репликацию на (m1):

   ```sql
   START SLAVE;
   ```

5. **Проверьте состояние репликации**: Убедитесь, что все работает корректно на обоих слейвах, в том числе на (s2). Для этого выполните команду:

   ```sql
   SHOW SLAVE STATUS \G;
   ```

   Убедитесь, что `Last_Error` пустой и `Slave_SQL_Running` равно `Yes`.

Теперь вы перенастроили (m1) на слейв, и он будет реплицировать данные с нового мастера (s1) без необходимости создания резервных копий.

Важно помнить, что этот подход работает, если нет несоответствий между состояниями баз данных. Если же данные не были полностью синхронизированы, потребуется пересоздание слейва с помощью резервной копии.
Использовать одну из схем с ограничениями , или galera cluster
Похожие вопросы