Pull to refresh

Comments 7

Спасибо. В контексте управления Failover был упомянут такой инструмент как ProxySQL, но еще есть MaxScale - можете что-нибудь про него сказать?

MaxScale лучше использовать для MariaDB - они его и разрабатывают. Для MySQL лучше выбрать ProxySQL, но всё зависит от требований проекта.

Описание
Классическая схема: мастер пишет события в бинарный лог (binlog), слейвы (реплики) периодически читают этот лог и применяют изменения.

Плюсы

  • Максимальная производительность: мастер не ждёт подтверждения от реплик.

  • Простота настройки: встроена «из коробки».

  • Гибкость: можно добавлять/удалять реплики на-лету.

Минусы

  • Потеря данных: при крахе мастера незаписанные в binlog транзакции теряются, а неподтянутые слейвы «отстают».

  • Нет гарантий консистентности: чтения на репликах могут «прыгать» по времени.

Когда подходит

  • Отказоустойчивость важна, но некритична потеря нескольких последних секунд данных.

Пара вопросиков (возможно плохо искал, но не нашел)

  1. При "классической схеме" мастер отправляет на слейв все изменения из всех баз. А на слейве я отфильтровываю только нужную мне БД. А можно фильтр переместить на мастер и отправлять только данные одной БД? И что для этого нужно, если эта схема не реализуется на обычном Mysql?

  2. И в продолжении. А можно на один слейв отправлять реплики с нескольких мастеров? Можете подсказать где почитать если "да"

  1. Насчет фильтрации прямо на мастере – технически такая опция есть (binlog-do-db), но не советую её использовать. Потому что, если транзакция затрагивает несколько баз, она может записаться в лог не полностью, и с GTID могут быть сложности. Лучше и правильнее делать как вы и описали: мастер пишет все изменения, а уже на реплике вы настраиваете фильтры (replicate-do-db и подобные), чтобы она применяла только то, что нужно.

  2. Да, такая возможность есть - Multi-Source Replication. На одной реплике вы можете настроить несколько "каналов" репликации, каждый будет тянуть данные со своего мастера. Это удобно для сбора данных из разных источников (с разных шардов) в одном месте для аналитики или бэкапов.

А еще вопрос на будущее. Я делаю бэкап на реплике. Делаю его с GTID. Если что - он просто восстанавливается на мастере или с "плясками"? (Понимаю что надо бы протестировать, но руки до всего не доходят, а он еще и раскручивается 5,5 часов)

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

Sign up to leave a comment.

Articles