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

75 lines
6.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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)