Aktualizacja: Napisałem o tym na forach AWS - wejdź do środka i poproś o to .
W chwili pisania tego tekstu Amazon RDS nie obsługuje fizycznej replikacji poza RDS. Możesz użyć prawa GRANT
użytkownika REPLICATION
za pomocą rds_superuser
loginu, ale nie możesz skonfigurować replication
wpisów dla zewnętrznych adresów IP w pg_hba.conf
.
Ponadto, gdy tworzysz grupę parametrów DB w RDS, niektóre kluczowe parametry są wyświetlane, ale zablokowane, np. archive_command
Które jest zablokowane /etc/rds/dbbin/pgscripts/rds_wal_archive %p
. Wydaje się, że AWS RDS dla PostgreSQL nie ujawnia tych WAL dla zewnętrznego dostępu (powiedzmy przez S3), jak byłoby to konieczne, gdybyś używał replikacji wysyłającej WAL dla zewnętrznego PITR.
Więc w tym momencie, jeśli chcesz wal-shipping, nie używaj RDS. Jest to prosta w obsłudze baza danych w puszkach, ale łatwa w użyciu często oznacza, że jest również ograniczona, i na pewno tak jest w tym przypadku. Jak zauważa Joe Love w komentarzach, zapewnia wysyłkę WAL i PITR w ramach RDS , ale nie można uzyskać dostępu do WAL do tego z zewnątrz RDS.
Musisz więc korzystać z własnych funkcji tworzenia kopii zapasowych RDS - zrzutów, migawek i własnego PITR opartego na WAL.
Nawet jeśli pg_basebackup
usługa RDS pozwoliła na tworzenie połączeń replikacyjnych (replikacja lub transmisja strumieniowa) i umożliwiła dostęp do zarchiwizowanej WAL, może nie być w stanie faktycznie z niej skorzystać. RDS uruchamia łatany PostgreSQL, choć nikt nie wie, jak mocno został on załatany ani czy znacząco zmienia format na dysku. Działa również na architekturze wybranej przez Amazon, która jest prawdopodobnie Linuksem x64, ale nie jest łatwa do ustalenia. Ponieważ PostgreSQL na format dysku i replikację są zależne od architektury, możesz replikować tylko na hostach o tej samej architekturze, co używana przez Amazon RDS, i tylko wtedy, gdy twoja kompilacja PostgreSQL jest zgodna z ich.
Oznacza to między innymi, że nie masz łatwego sposobu na migrację z RDS. Musiałbyś zatrzymać wszystkie zapisy do bazy danych na tyle długo, aby wziąć pg_dump
, przywrócić i uruchomić nową bazę danych . Zwykłe sztuczki z replikacją i przełączaniem awaryjnym, z rsync itp. Nie będą działać, ponieważ nie masz bezpośredniego dostępu do hosta DB.
Nawet jeśli RDS uruchomił niezałatowaną PostgreSQL, Amazon prawdopodobnie nie chciałby zezwalać na przesyłanie WAL do RDS lub import do RDS pg_basebackup
ze względów bezpieczeństwa. PostgreSQL traktuje katalog danych jako zaufaną treść, a jeśli stworzyłeś jakieś sprytne funkcje „JĘZYK c”, które przechwytują wewnętrzną funkcjonalność lub robisz cokolwiek innego, co może być trudne, możesz wykorzystać serwer do uzyskania większego dostępu, niż powinien. . Dlatego Amazon nie zezwoli w najbliższym czasie na WAL.
Mogą obsługiwać wychodzące wysyłanie WAL, ale powyższe problemy ze zgodnością formatu, swobodą wprowadzania zmian itp. Nadal obowiązują.
Zamiast tego powinieneś użyć narzędzia takiego jak Londiste lub Bucardo.
Jest to teraz możliwe przy użyciu replikacji logicznej: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html#PostgreSQL.Concepts.General.FeatureSupport.LogicalReplication
źródło
Replikacja przy użyciu systemów opartych na wyzwalaczach, takich jak Londiste i Bucardo, do i z RDS jest teraz obsługiwana od 10 listopada 2014 r. , Na odpowiedź w tym wątku na forum.
Ogłoszenie tutaj
źródło
pg_basebackup
itp The've dokonał najlepszego wyboru mogą, jak kwestie bezpieczeństwa uniemożliwiają im naprawdę wspieranie fizycznego replikacji.