- Способы репликации:
- Master-Slave: Один сервер (мастер) обрабатывает записи, затем asynchronously или synchronously передает изменения на один или несколько серверов (слейвов), которые обрабатывают только чтения.
- Master-Master: Несколько серверов могут обрабатывать записи и обмениваться изменениями друг с другом.
- Синхронность:
- Синхронная репликация: Запись подтверждается клиенту только после того, как она успешно реплицирована на все или заданное количество реплик. Гарантирует целостность данных, но может повысить задержку.
- Асинхронная репликация: Запись подтверждается клиенту сразу после записи на мастер. Репликация происходит позже. Более высокая производительность, но возможна потеря данных при сбое мастера до репликации.
- Полусинхронная репликация: Компромисс, когда подтверждение происходит после записи на мастер и хотя бы на одну реплику.
- Устранение конфликтов:
При Master-Master репликации или при временном разделении сети могут возникать конфликты при одновременном изменении одних и тех же данных. Методы разрешения:
- Last Write Wins (LWW): Побеждает последняя запись.
- Merge: Слияние изменений.
- Conflict Resolution Logic: Специальная логика приложения для разрешения конфликтов.
- Задержка репликации (Lag): Разница во времени между записью на мастер и ее появлением на реплике. Может влиять на консистентность данных при чтении со слейвов.
- Топологии репликации: Цепочка, звезда, кольцо и другие. Выбор зависит от требований к масштабируемости и доступности.
- Мониторинг: Необходим постоянный мониторинг состояния репликации, задержки, ошибок и нагрузки на серверы.
- Отказоустойчивость: Репликация повышает доступность данных. При сбое мастера можно переключиться на слейва (failover).
- Масштабирование: Репликация позволяет распределять нагрузку на чтение между несколькими серверами.
Пример настройки синхронной репликации в PostgreSQL (частичный конфиг):
ini
Пример настройки слейва в PostgreSQL для потоковой репликации:
ini
Таблица сравнения типов репликации Master-Slave и Master-Master:
| Особенность | Master-Slave | Master-Master |
|---|
| Обработка записей | Только мастер | Все сервера |
| Обработка чтений | Мастер и слейвы | Все сервера |
| Сложность настройки | Относительно простая | Более сложная |
| Устранение конфликтов | Не требуется (кроме сбоев мастера) | Требуется логика или стратегия разрешения |
| Масштабирование записей | Ограничено мощностью мастера | Лучше масштабируется |
| Доступность при сбое | Чтение доступно на слейвах, запись недоступна | Запись может быть доступна на других мастерах |