Я использую систему с двумя машинами, на которых запущен MySQL в режиме репликации master/master.
Я хотел бы переместить системы на новые машины, которые также выполняют репликацию master/master. Возможно ли это сделать без удаления одного узла из старого кластера и замены его новым узлом и создания новой репликации с первого нового узла на второй?
Допустим, у нас есть два активных узла node1 и node2, которые работают в режиме master/master. Как мне «волшебным образом» переместить кластер на новые узлы с именами new1 и new2, не допуская при этом слишком большого простоя?
решение1
У вас есть M1 <=> M2; вы хотите получить новое оборудование M3 <=> M4.
- (кратковременное нарушение) Переведите всех клиентов (писателей и читателей) в M2.
- Отключите M1 на достаточно долгое время, чтобы клонировать его и создать M3 в следующей топологии: M1 <=> M2 -> M3. (M3 — это просто подчиненный M2.)
- Построить M4 из M3: M1 <=> M2 -> M3 -> M4. (M3 пока не используется, поэтому помех нет.)
- (кратковременное нарушение) Переместите всех клиентов из M1 и M2 так, чтобы они указывали на M3. В процессе этого убедитесь, что вся репликация дошла по крайней мере до M3.
- Выбросьте М1 и М2. Теперь у вас есть только М3 -> М4.
- (кратковременное нарушение) Настройте двойной Мастер (M3 <=> M4); перераспределите клиентов по своему усмотрению.
Обратите внимание, что каждое из трех нарушений эквивалентно выходу из строя мертвого Мастера.
Общая рекомендация при использовании Dual-Master: записывайте данные только на один из двух серверов; другой используйте в качестве резервного и масштабируемого для чтения.
А еще лучше, переключитесь на Galera Cluster (или InnoDB Cluster), чтобы получить автоматическое переключение на резерв и т. д. Это позволит будущим изменениям топологии быть еще менее болезненными. Такие миграции были быпохожийк тому, что я только что описал.