6.5 KiB
6.5 KiB
aliases | tags | date | zero-link | parents | linked | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
|
|
|
Тезисы
- Репликация это копирование измененных данных с одного сервера бд на другой.
- Не отменяет первоначального копирования БД. Сначала нужно первый раз скопировать данные, а потом уже запустить репликацию.
- Обычно реализуются на Журнал БД
- Репликации БД:
- Плюсы репликации:
- Помогает улучшить High Availability. Помогает при падении.
- Ускоряет чтение
- Проблемы репликации:
- Не ускоряет запись в БД
- Репликация не является резервной копией БД.
- Отставание реплики в БД
- Репликация это ресурсозатратно.
Репликация позволяет сделать N копий одной БД. Обычно есть одна ведущая копия, которую называют master, и есть N ведомых реплик, которые называют slaves. Репликация не отменяет первоначального копирования БД. Сначала нужно первый раз скопировать данные, а потом уже запустить репликацию.
Для чего делают репликацию?
- Увеличение High Availability БД. Одна БД падает, ее заменяет реплика.
- Позволяет получить масштабирование чтения, но ==не позволяет получить масштабирование операций вставки.== Для масштабирования вставки используется Шардирование в БД.
- Чтобы делать асинхронное резервное копирование БД
- Чтобы распределить нагрузку. Например перенести сложные запросы построения отчетов на отдельную реплику.
Прямой способ сделать репликацию - это скопировать Журнал БД с мастера на слэйв и применить его на слейв. PostgreSQL работает именно так используя журнал WAL.
Классификация репликаций
- По синхронизации. Гарантия наличия и доступности.
- По уровню работы
- Физическая репликация. Работа на уровне хранилища, мы работаем напрямую со страницами памяти
- Write-Ahead Log в PostgreSQL
- InnoDB Undo/Redo Log в MySQL
- Логическая репликация. Работает с кортежами. Мы храним набор кортежей до и после.
- Row-based Binary Log в MySQL
- Statement-based Binary Log недоразумение, которое работает на уровне запросов. Для такой репликации нужно выполнять запрос на слейве, и если запрос выполнялся 30 минут, то и на слейве он будет выполняться 30 минут. Также присутсвует зависимость в функциях, например функция времени вернет одно значение на мастере и совершенно другое на слейве.
- Физическая репликация. Работа на уровне хранилища, мы работаем напрямую со страницами памяти
- По расспространению изменений
- push. мастер сует, слейву пофиг. Реализуется редко. (Postgres)
- pull. слейв качает, мастеру пофиг. (MySQL)
- По количеству точек записи
- Репликация master-slave
- Репликация master-master
- Безмастерная репликация
- Групповая репликация. Реализовано в MySQL.
- Как master-master, но при количестве узлов больше 2
Проблемы репликации
Асинхронная репликация
В асинхронной репликации обычно есть мастер, куда мы пишем, и есть слэйв, с которого только читаем. Здесь допустима задержка обновления слейвов.
Также при таком подходе можно использовать слейвы для разных действий, например один слейв отдать под отчетность, второй под бэкапы.