digital-garden/_inbox/Репликация БД.md

75 lines
6.5 KiB
Markdown
Raw Normal View History

2024-06-13 21:01:37 +03:00
---
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) БД. Одна БД падает, ее заменяет реплика.
2024-06-20 21:54:23 +03:00
- Позволяет получить масштабирование чтения, но ==не позволяет получить масштабирование операций вставки.== Для масштабирования вставки используется [Шардирование в БД](Шардирование%20в%20БД.md).
2024-06-13 21:01:37 +03:00
- Чтобы делать асинхронное [резервное копирование БД](Резервные%20копии%20БД.md)
- Чтобы распределить нагрузку. Например перенести сложные запросы построения отчетов на отдельную реплику.
Прямой способ сделать репликацию - это скопировать [Журнал БД](Журнал%20БД.md) с мастера на слэйв и применить его на слейв. PostgreSQL работает именно так используя журнал [WAL](Write-Ahead%20Log.md).
![](Pasted%20image%2020240531083508.png)
## Проблемы репликации
- [Отставание реплики в БД](Отставание%20реплики%20в%20БД.md)
- [Монотонное чтение](Монотонное%20чтение.md)
## Классификация репликаций
- По синхронизации. Гарантия наличия и доступности.
- [Синхронная репликация](Синхронная%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
## Асинхронная репликация
В асинхронной репликации обычно есть мастер, куда мы пишем, и есть слэйв, с которого только читаем. Здесь допустима задержка обновления слейвов.
Также при таком подходе можно использовать слейвы для разных действий, например один слейв отдать под отчетность, второй под бэкапы.
![](Pasted%20image%2020240528085716.png)