Pracujemy z wieloma maszynami wirtualnymi z systemem Linux w środowisku vmware / Shared Storage, każda z nich ma własną instancję postgreSQL (połączenie wersji 9.0 i 9.3). Obecnie cała maszyna wirtualna znajduje się na jednej partycji / woluminie głównym i odnieśliśmy wielki sukces (~ 8 lat), wykorzystując migawki bazowych woluminów VMFS do tworzenia kopii zapasowych / przywracania (i replikacji na naszej stronie DR).
Ze względu na architekturę naszego magazynu, korzystne byłoby rozdzielenie plików WAL postgres na wolumin niebuforowany, głównie z zapisem, aby dać nam mniej pamięci podręcznej po stronie magazynu. Dzięki naszej pamięci masowej (Nimble Storage) możemy przypisać oba woluminy do pojedynczej grupy ochrony / migawek, ale nie byłem w stanie wyjawić od naszego dostawcy, że migawki będą się odbywały DOKŁADNIE w tym samym czasie na wszystkich woluminach w grupie ochrony - prawdopodobnie tak będzie, ale zawsze istnieje szansa, że jego milisekundy się rozdzielą.
W tym celu przeprowadziliśmy kilka eksperymentów, wszystkie zapisując dane do bazy danych tak szybko, jak to możliwe, używając pg_bench. Po eksperymentach przywróciliśmy nasze woluminy migawkowe i uruchomiliśmy postgres VM +
- Wykonaj migawkę woluminów danych i dziennika blisko jednocześnie - wynik: DB odzyskano
- Najpierw wolumin danych migawki, wolumin dziennika ~ 1 minutę później - wynik: odzyskano DB
- Najpierw wolumin dziennika migawki, wolumin danych ~ 1 minutę później - wynik: odzyskano DB
- Najpierw wolumin dziennika migawki, wolumin danych ~ 3 minuty później, po tym, jak punkt kontrolny WAL zapisał nowe dane w plikach danych: wynik: odzyskano DB
Testy wydają się nam więc mówić, o ile obie migawki są spójne na poziomie głośności i względnie blisko siebie, otrzymujesz spójną kopię bazy danych na podstawie czasu migawki woluminów WAL / Log.
Moje pytanie: czy to jest bezpieczne? Jakie są najważniejsze przypadki, których nam brakuje w naszych testach i co może pójść nie tak?
Dokument Postgresa wskazuje, że nie jest to bezpieczne, ale testy wydają się wskazywać na jego solidność: http://www.postgresql.org/docs/9.1/static/backup-file.html
Jeśli baza danych jest rozproszona na wiele systemów plików, może nie istnieć żaden sposób uzyskania dokładnie równoczesnych zamrożonych migawek wszystkich woluminów. Na przykład jeśli pliki danych i dziennik WAL znajdują się na różnych dyskach lub obszary tabel znajdują się w różnych systemach plików, użycie kopii zapasowej migawki może być niemożliwe, ponieważ migawki muszą być jednoczesne. Przeczytaj dokumentację systemu plików bardzo uważnie, zanim zaufasz technice spójnego tworzenia migawek w takich sytuacjach.
UWAGA: Tak, wiemy o innych opcjach, aby upewnić się, że są one spójne, takich jak przełączanie PostgreSQL w tryb hot backup lub korzystanie z integracji VMware naszej pamięci masowej w celu wyciszenia samych maszyn wirtualnych, ale szukamy rozwiązania tylko do przechowywania pod kątem szybkości, wygody, i zero wpływu na naszych klientów.