Istnieje wiele metod replikacji i skalowania baz danych PostgreSQL aby wykorzystywał wiele maszyn. Poniżej zaprezentuje niektóre z dostępnych rozwiązań. Trzeba podkreślić, że nie ma jednego uniwersalnego/najlepszego rozwiązania replikacji i/lub skalowania baz danych PostgreSQL (tak jak PostgrSQL nie jest uniwersalnym/najlepszym rozwiązaniem we wszystkich zastosowaniach, a jedynie w ich pewnym <<aczkolwiek dość szerokim>> podzbiorze.)
Funkcje replikacji wbudowane PostgreSQL
- Hot Standby/Streaming Replication (kopia w trybie pełnej gotowości/replikacja przez strumieniowanie) jest dostępny od wersji PostgreSQL 9.0 i zapewnia asynchroniczną replikację na poziomie binarnym do jednej lub więcej instancji/serwerów ’standby’. Serwer/instancja 'standby’ może również stać się ’hot standby’ czyli może być wykorzystywana jako baza danych tylko do odczytu. To najszybszy rodzaj replikacji dostępny jako dane/dziennik WAL wysyłany natychmiast.
- Warm Standby/Log Shipping (kopia w trybie czuwania/replikacja przez przesyłanie logów) jest rozwiązaniem HA (ang. High Availability — wysoka dostępność), która powiela klaster bazy danych do archiwum lub serwera zapasowego(można nim szybko zastąpić Master ale nie jest dostępny dla zapytań). Narzut jest bardzo mały i jest łatwy do skonfigurowania. Jest to jest proste rozwiązanie i odpowiednie, jeśli wymagane jest posiadanie ciągłej kopi zapasowej i krótki czas odtworzenia po awarii.
Porównanie wybranych mechanizów replikacji i równoważenia obciżenia dla PostgreSQL
Program | Licencja | Dojrzałość | Metoda Replikacji | Synchroniczność | Pula połączeń | Równoważenie obciążenia | Partycjonowanie zapytań |
---|---|---|---|---|---|---|---|
PgCluster | BSD | Nierozwijane | Master-Master | Synchroniczne | Nie | Tak | Nie |
Pg_pool-I | BSD | Stabilna | Statement-Based Middleware | Synchroniczne | Tak | Tak | Nie |
Pg_pool-II | BSD | Stabilna | Statement-Based Middleware | Synchroniczne | Tak | Tak | Tak |
Slony-I | BSD | Stabilna | Master-Slave | Asynchroniczne | Nie | Nie | Nie |
Bucardo | BSD | Stabilna | 2*Master, Master-Slave | Asynchroniczne | Nie | Nie | Nie |
Londiste | BSD | Stabilna | Master-Slave | Asynchroniczne | Nie | Nie | Nie |
Mammoth | BSD | Nierozwijane | Master-Slave | Asynchroniczne | Nie | Nie | Nie |
Rubyrep | MIT | Nierozwijane | Master-Master, Master-Slave | Asynchroniczne | Nie | Nie | Nie |
Rozwiązania Gridowe/Klastrowe
Alternatywą dla mechanizmów replikacji są odgałęzienia PostgreSQL przystosowane do pracy jako klaster — czyli do współpracy instancji zainstalowanych na kilku maszynach dla zwiększenia niezawodności i/lub wydajności. Przykładami takich systemów są:
- Postgres-R — niestety, nierozwijany od 2011-01-23, pozostawiony w fazie eksperymentalnej, dostępy jako kod źródłowy lub łata na kod PostgreSQL
- Postgres-XC (dokumentacja na github, wiki PostgreSQL) — dostępne wersje stabilne 1.0, 1.1, 1.2 więcj na temat Postgre-XC w tym poście. Projekt bardzo ciekawy ale trudno przewidzieć czy będzie dalej rozwijany, a jesli tak to na jakiej licencji i pod jaka nazwa (ostatnio przez jakis czas był rozwijany jako postgres-XL)