Механизм WAL в PostgreSQL для репликации данных работает следующим образом: 2
- Запись всех изменений на PostgreSQL-сервере происходит в WAL (write-ahead log). 2
- Затем осуществляется трансляция журналов с ведущего сервера на резервный. 2
- Такой способ работы предотвращает потерю данных в случаях сбойных ситуаций, так как сервер-заместитель сверяет данные в табличном пространстве с данными WAL, доставляет разницу и затем WAL удаляет. 2
Есть два вида потоковой репликации: 4
- Асинхронная. 4 В этом случае PostgreSQL сначала применит изменения на основном узле и только потом отправит записи из WAL на реплики. 4 Преимущество такого способа — быстрое подтверждение транзакции, так как не нужно ждать, пока все реплики применят изменения. 4 Недостаток в том, что при падении основного сервера часть данных на репликах может потеряться, так как изменения не успели продублироваться. 4
- Синхронная. 4 В этом случае изменения сначала записываются в WAL хотя бы одной реплики и только после этого фиксируются на основном сервере. 4 Преимущество — более надёжный способ, при котором сложнее потерять данные. 4 Недостаток — операции выполняются медленнее, потому что прежде чем подтвердить транзакцию, нужно сначала продублировать её на реплике. 4
Когда все транзакции из файла WAL считаются успешно применёнными на сервер — WAL помечается как готовый (full) и удаляется. 5