Replikacja strumieniowa i WAL
Konfigurować fizyczną replikację strumieniową opartą na WAL, monitorować opóźnienie i konfigurować repliki synchroniczne dla zapisów bez utraty danych
Replikacja strumieniowa i WAL to bezpłatna lekcja SQL Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej SQL Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs SQL Academy zawiera 4 lekcji w sumie.
Dlaczego replikować?
Replikacja pozwala jednocześnie osiągnąć kilka celów:
- HA — przetrwanie awarii serwera głównego
- Skalowanie odczytu — odciążenie serwera głównego przez przekierowanie zapytań SELECT do replik
- Kopia zapasowa / PITR — ciągła archiwizacja
- Dystrybucja geograficzna — repliki znajdujące się blisko użytkowników
WAL: Write-Ahead Log
Każda operacja zapisu trafia najpierw do WAL. WAL gwarantuje trwałość danych i stanowi podstawę replikacji: WAL jest przesyłany do repliki → replika odtwarza WAL → replika jest aktualna.
Fizyczna replikacja strumieniowa
Strumień WAL przesyłany z serwera głównego do repliki bajt po bajcie:
- Replika jest binarną kopią serwera głównego
- Ta sama wersja PostgreSQL
- Replikowany jest cały klaster (wszystkie bazy danych i wszystkie tabele)
- Tylko do odczytu
Konfiguracja: serwer główny
Skonfiguruj serwer główny w pliku postgresql.conf:
wal_level = replica
max_wal_senders = 10
wal_keep_size = 1GB
-- pg_hba.conf: allow replication connections
host replication replicator 10.0.0.0/24 md5Konfiguracja: replika
Utwórz kopię bazową i uruchom replikę z parametrem primary_conninfo:
pg_basebackup -h primary -D /var/lib/postgresql/data -U replicator -W -X stream -P
-- postgresql.conf on replica:
primary_conninfo = 'host=primary port=5432 user=replicator password=...'
-- Touch standby.signal file and start:
touch /var/lib/postgresql/data/standby.signalReplikacja synchroniczna a asynchroniczna
- Asynchroniczna (domyślna) — serwer główny zatwierdza transakcję bez oczekiwania; replika może mieć opóźnienie
- Synchroniczna — serwer główny czeka na potwierdzenie repliki przed wykonaniem COMMIT; brak utraty danych, ale mniejsza szybkość
-- Synchronous configuration on primary:
synchronous_commit = on
synchronous_standby_names = 'replica1, replica2'Opóźnienie replikacji
Repliki asynchroniczne pozostają w tyle za serwerem głównym. Monitoruj:
SELECT client_addr, state, sent_lsn, write_lsn, replay_lsn,
pg_wal_lsn_diff(sent_lsn, replay_lsn) AS replay_lag_bytes
FROM pg_stat_replication;Sloty replikacji
Sloty gwarantują, że serwer główny zachowa WAL do czasu jego odebrania przez replikę:
SELECT pg_create_physical_replication_slot('replica1');
-- On replica:
primary_slot_name = 'replica1'Pułapka związana ze slotami
Jeśli replika rozłączy się i nigdy nie połączy ponownie, jej slot uniemożliwi czyszczenie WAL, a dysk się zapełni. Usuń nieużywane sloty:
SELECT pg_drop_replication_slot('replica1');Repliki kaskadowe
Replika może sama przesyłać WAL strumieniowo do innych replik, zmniejszając obciążenie serwera głównego.
Hot standby
Domyślnie repliki przyjmują zapytania tylko do odczytu (hot_standby = on). Długotrwałe zapytania odczytu na replice mogą opóźniać odtwarzanie WAL; dostosuj max_standby_streaming_delay.
Promowanie
Aby uczynić replikę nowym serwerem głównym:
pg_ctl promote -D /var/lib/postgresql/data
-- Or in SQL:
SELECT pg_promote();Podsumowanie
Replikacja strumieniowa = przesyłanie WAL + odtwarzanie.
- Fizyczna, identyczna binarnie
- Domyślnie asynchroniczna; synchroniczna zapewnia brak utraty danych
- Sloty zachowują WAL, ale wymagają ostrożnego zarządzania
- Promowanie zmienia replikę w serwer główny
Szybkie sprawdzenie
Jakie jest główne ryzyko nieużywania slotu replikacji dla repliki strumieniowej?
Często zadawane pytania
Czy lekcja „Replikacja strumieniowa i WAL” jest bezpłatna?
Tak — pełny tekst „Replikacja strumieniowa i WAL” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu SQL Academy, przejdź na CoddyKit PRO. Kurs SQL Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Replikacja strumieniowa i WAL”?
Konfigurować fizyczną replikację strumieniową opartą na WAL, monitorować opóźnienie i konfigurować repliki synchroniczne dla zapisów bez utraty danych Ćwiczysz SQL Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć SQL Academy?
Nie wymagamy żadnego doświadczenia. SQL Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.
Ile czasu zajmuje lekcja „Replikacja strumieniowa i WAL”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji SQL Academy?
Tak. Każda lekcja SQL Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Replikacja strumieniowa i WAL
- Replikacja logiczna na potrzeby shardingu
- Failover i wybór lidera (Patroni, Stolon)
- Repliki tylko do odczytu i kierowanie połączeniami