75 lines
6.5 KiB
Markdown
75 lines
6.5 KiB
Markdown
---
|
||
aliases:
|
||
- репликация базы данных
|
||
- репликацию бд
|
||
tags:
|
||
- зрелость/🌱
|
||
date:
|
||
- - 2024-03-10
|
||
zero-link:
|
||
- "[[00 DevOps]]"
|
||
- "[[00 Базы Данных]]"
|
||
- "[[00 Архитектура ПО]]"
|
||
parents:
|
||
- "[[_inbox/Репликация|Репликация]]"
|
||
linked:
|
||
---
|
||
## Тезисы
|
||
- Репликация это копирование измененных данных с одного сервера бд на другой.
|
||
- Не отменяет первоначального копирования БД. Сначала нужно первый раз скопировать данные, а потом уже запустить репликацию.
|
||
- Обычно реализуются на [Журнал БД](Журнал%20БД.md)
|
||
- Репликации БД:
|
||
- [Репликация в MySQL](Репликация%20в%20MySQL.md)
|
||
- [Репликация в PostgreSQL](Репликация%20в%20PostgreSQL.md)
|
||
- Плюсы репликации:
|
||
- Помогает улучшить [High Availability](High%20Availability.md). Помогает при падении.
|
||
- Ускоряет чтение
|
||
- Проблемы репликации:
|
||
- Не ускоряет запись в БД
|
||
- Репликация не является [резервной копией БД](Резервные%20копии%20БД.md).
|
||
- [Отставание реплики в БД](Отставание%20реплики%20в%20БД.md)
|
||
- Репликация это ресурсозатратно.
|
||
***
|
||
Репликация позволяет сделать N копий одной БД. Обычно есть одна ведущая копия, которую называют master, и есть N ведомых реплик, которые называют slaves. Репликация не отменяет первоначального копирования БД. Сначала нужно первый раз скопировать данные, а потом уже запустить репликацию.
|
||
|
||
**Для чего делают репликацию?**
|
||
- Увеличение [High Availability](High%20Availability.md) БД. Одна БД падает, ее заменяет реплика.
|
||
- Позволяет получить масштабирование чтения, но ==не позволяет получить масштабирование операций вставки.== Для масштабирования вставки используется [Шардирование в БД](Шардирование%20в%20БД.md).
|
||
- Чтобы делать асинхронное [резервное копирование БД](Резервные%20копии%20БД.md)
|
||
- Чтобы распределить нагрузку. Например перенести сложные запросы построения отчетов на отдельную реплику.
|
||
|
||
Прямой способ сделать репликацию - это скопировать [Журнал БД](Журнал%20БД.md) с мастера на слэйв и применить его на слейв. PostgreSQL работает именно так используя журнал [WAL](Write-Ahead%20Log.md).
|
||
![](Pasted%20image%2020240531083508.png)
|
||
|
||
## Классификация репликаций
|
||
- По синхронизации. Гарантия наличия и доступности.
|
||
- [Синхронная репликация](Синхронная%20репликация.md)
|
||
- [Асинхронная репликация](Асинхронная%20репликация.md)
|
||
- [Полу-синхронная репликация](Полу-синхронная%20репликация.md)
|
||
- По уровню работы
|
||
- Физическая репликация. Работа на уровне хранилища, мы работаем напрямую со страницами памяти
|
||
- [Write-Ahead Log](Write-Ahead%20Log.md) в PostgreSQL
|
||
- [InnoDB Undo/Redo Log](Журналы%20в%20MySQL.md#InnoDB%20Undo/Redo%20Log) в MySQL
|
||
- Логическая репликация. Работает с кортежами. Мы храним набор кортежей до и после.
|
||
- [Row-based Binary Log](Журналы%20в%20MySQL.md#Row-based%20Binary%20Log) в MySQL
|
||
- [Statement-based Binary Log](Журналы%20в%20MySQL.md#Statement-based%20Binary%20Log) недоразумение, которое работает на уровне запросов. Для такой репликации нужно выполнять запрос на слейве, и если запрос выполнялся 30 минут, то и на слейве он будет выполняться 30 минут. Также присутсвует зависимость в функциях, например функция времени вернет одно значение на мастере и совершенно другое на слейве.
|
||
- По расспространению изменений
|
||
- push. мастер сует, слейву пофиг. Реализуется редко. (Postgres)
|
||
- pull. слейв качает, мастеру пофиг. (MySQL)
|
||
- По количеству точек записи
|
||
- [Репликация master-slave](Репликация%20master-slave.md)
|
||
- [Репликация master-master](Репликация%20master-master.md)
|
||
- [Безмастерная репликация](Безмастерная%20репликация.md)
|
||
- [Групповая репликация](Групповая%20репликация.md). Реализовано в MySQL.
|
||
- Как master-master, но при количестве узлов больше 2
|
||
|
||
## Проблемы репликации
|
||
- [Отставание реплики в БД](Отставание%20реплики%20в%20БД.md)
|
||
- [Монотонное чтение](Монотонное%20чтение.md)
|
||
## Асинхронная репликация
|
||
В асинхронной репликации обычно есть мастер, куда мы пишем, и есть слэйв, с которого только читаем. Здесь допустима задержка обновления слейвов.
|
||
|
||
Также при таком подходе можно использовать слейвы для разных действий, например один слейв отдать под отчетность, второй под бэкапы.
|
||
|
||
![](Pasted%20image%2020240528085716.png)
|