Ответ
Репликация Master-Slave (также известная как Leader-Follower или Primary-Replica) — это асинхронный процесс копирования данных с одного сервера базы данных (Master) на один или несколько других серверов (Slaves).
Принцип работы:
- Все операции записи (
INSERT,UPDATE,DELETE) выполняются только на Master сервере. - Master записывает изменения в свой бинарный лог (binary log).
- Slave серверы подключаются к мастеру, считывают этот лог и последовательно применяют изменения к своей копии данных.
Преимущества (Плюсы):
- Распределение нагрузки на чтение (Read Scaling): Запросы на чтение (
SELECT) можно направлять на слейвы, что снижает нагрузку на основной сервер. Идеально для систем с преобладанием чтения. - Повышение отказоустойчивости (High Availability): Если мастер выходит из строя, один из слейвов можно "повысить" до нового мастера (процесс называется failover), что минимизирует время простоя.
- Резервное копирование: Можно делать бэкапы со слейва, не останавливая и не нагружая мастер-сервер.
- Простота настройки: Эта схема проще в реализации по сравнению с более сложными, такими как Master-Master или кластерные решения.
Недостатки (Минусы):
- Отставание репликации (Replication Lag): Из-за асинхронной природы данные на слейвах могут быть неактуальными. Приложения должны быть готовы к тому, что только что записанные данные могут быть недоступны для чтения со слейва.
- Мастер — единая точка отказа для записи: Если мастер недоступен, запись в базу данных останавливается до момента переключения на новый мастер.
- Сложность автоматического Failover: Процесс переключения на новый мастер может быть нетривиальным и требует дополнительных инструментов (например, Orchestrator, Patroni) или ручного вмешательства.
- Потеря данных при сбое: В асинхронном режиме, если мастер выходит из строя до того, как транзакции были переданы на слейвы, эти данные могут быть потеряны. Синхронная репликация решает эту проблему, но сильно замедляет запись.
Ответ 18+ 🔞
Ну, слушай, вот есть у тебя главный сервер, он же Мастер, он же Лидер, он же царь и бог. И есть у него подчинённые, Слейвы, они же Реплики, они же вечные догонялки. Суть проста, как три рубля:
- Писать (
INSERT,UPDATE,DELETE) можешь только в Мастера. Он один такой важный, с короной на процессоре. - Каждое своё действие Мастер аккуратно записывает в специальный дневничок — бинарный лог (binary log). Типа "сегодня, блядь, добавил запись, завтра — обновил".
- Слейвы, как назойливые поклонники, постоянно подглядывают в этот дневник, хватают оттуда изменения и тупо повторяют их у себя. Всё, репликация поехала.
Что хорошего? (Плюсы, они же плюшки)
- Чтение — не проблема: Все запросы на чтение (
SELECT) можно сгрузить на слейвов. Мастеру хоть бы хны! Отлично, если у тебя сайт, где все только смотрят, а не пишут. - Живучесть, блядь: Мастер накрылся медным тазом? Не беда! Один из слейвов можно, с почестями и пинками, назначить новым Мастером (этот цирк называется failover). Система оживёт, как ни в чём не бывало. Ну, почти.
- Бэкап без головной боли: Хочешь сделать резервную копию? Делай её со слейва! Мастер даже не заметит, не то что не обосрётся от нагрузки.
- Настроить — не боги горшки обжигают: По сравнению с другими, более навороченными схемами, эта — как собрать табуретку по инструкции из Икеи. Почти.
Что плохого? (Минусы, они же подлянка)
- Отставание, ёпта! (Replication Lag): Слейвы — они асинхронные, понимаешь? Гоняются за Мастером, но всегда чуть-чуть позади. Только что записал данные на Мастера — а на слейве их ещё нет! Приложение должно быть готово к такому пиздецу.
- Мастер — единая точка ебли: Всё записывается через него. Он лег — и всё, пизда, запись остановилась. Пока не поднимешь нового царя.
- Автоматическое переключение — та ещё песня: Сделать так, чтобы при падении Мастера система сама, без твоего участия, выбрала нового — это отдельная история, танцы с бубном и дополнительные костыли (типа Orchestrator).
- Потеря данных, если не повезло: В асинхронном режиме, если Мастер внезапно сдох, не успев отправить свои последние "хотелки" слейвам, эти данные канут в лету. Можно, конечно, сделать синхронную репликацию (чтобы Мастер ждал подтверждения от слейва), но тогда скорость записи упадёт ниже плинтуса. Выбирай: либо быстро, либо надёжно. Волшебства не бывает.