Отримайте файли WAL від екземпляра AWS RDS PostgreSQL


18

У нас є екземпляр RDS Postgres у веб-службах Amazon. У нас включені автоматичні резервні копії, і ми робимо знімки щодня. Ми хотіли б створити локальну "сучасну" резервну копію екземпляра RDS, якою ми можемо керувати самі. Запуск pg_dump проти екземпляра недостатній, тому що ми хочемо мати можливість відновити базу даних у будь-який момент часу. Ми вважаємо за краще мати локальну резервну копію RDS та всіх файлів WAL з моменту прийняття резервної копії. Запитання:

  1. Чи можливий доступ до файлів і резервних копій WAL, які RDS автоматично генерує в процесі резервного копіювання? Це було б ідеально. Я хотів би завантажити локальну їх копію. Після початкового розслідування я вважаю, що відповідь на це питання - «ні». Здається, що RDS зберігає свої файли та резервні копії WAL в S3, але це робить їх недоступними для нас. Я б хотів підтвердження.

  2. Чи є інший спосіб отримати доступ до транзакцій (файлів WAL), які відбулися в екземплярі RDS? Я гадаю, нам слід мати можливість створити базу даних Postgres для EC2 та "подавати" транзакції з нашого основного "живого" екземпляра RDS в цей екземпляр EC2. Після оновлення нашого екземпляра EC2 ми можемо витягти звідти файли WAL. Що таке головний біль, хоча: / Чи можлива така установка? Яка магія "подавати" з нашого екземпляра RDS на екземпляр EC2, щоб він завжди був актуальним?

Спасибі!

Відповіді:


17

Оновлення: я опублікував про це на форумах AWS - будь ласка, заходьте і запитайте його там .


На момент написання запису Amazon RDS не підтримує фізичну реплікацію поза RDS. Ви можете GRANTкористуватися REPLICATIONправом, використовуючи rds_superuserлогін, але ви не можете налаштувати replicationзаписи для зовнішніх IP-адрес у pg_hba.conf.

Крім того, коли ви створюєте групу параметрів БД в RDS, деякі ключові параметри відображаються, але заблоковані, наприклад archive_command, в яких заблоковано /etc/rds/dbbin/pgscripts/rds_wal_archive %p. AWS RDS для PostgreSQL не видає цих WAL для зовнішнього доступу (скажімо, через S3), як це було б потрібно, якби ви використовували реплікацію WAL-доставки для зовнішнього PITR.

Тож у цей момент, якщо ви хочете прогулятися по службі, не використовуйте RDS. Це консервована база даних, зручна у використанні, але простота у використанні часто означає, що вона також обмежена, і це, безумовно, так і тут. Як в коментарях зазначає Джо Лав, він забезпечує доставку WAL та PITR в межах RDS , але ви не можете отримати доступ до WAL до цього ззовні .

Тож вам потрібно використовувати власні засоби резервного копіювання RDS - скиди, знімки та власний ПІТР на основі WAL.


Навіть якщо RDS дозволив вам здійснювати з'єднання реплікації (для pg_basebackupабо потокової реплікації) і дозволив вам отримати доступ до архівованої WAL, ви, можливо, не зможете фактично споживати цю WAL. RDS працює з виправленим PostgreSQL, хоча ніхто не знає, наскільки сильно виправлений або він істотно змінює формат на диску. Він також працює на архітектурі, обраній Amazon, яка, мабуть, є x64 Linux, але її не легко визначити. Оскільки PostgreSQL на форматі диска та реплікації залежать від архітектури, ви можете реплікувати лише на хости з тією ж архітектурою, що і в Amazon RDS, і лише якщо ваша збірка PostgreSQL сумісна з їхньою.

Крім усього іншого, це означає, що у вас немає простого способу мігрувати подалі від RDS. Вам доведеться зупинити всі записи в базу даних досить довго, щоб взяти a pg_dump, відновити його та запустити новий БД. Звичайні хитрощі з реплікацією та відмовою, з rsync тощо, не працюватимуть, оскільки у вас немає прямого доступу до хоста БД.

Навіть якщо RDS керував незавершеним PostgreSQL, Amazon, ймовірно, не хотів би дозволити вам робити потокове передачу WAL в RDS або імпортувати в RDS з pg_basebackupметою безпеки. PostgreSQL трактує каталог даних як довірений вміст, і якщо ви створили якісь розумні функції "LANGUAGE c", які підключають внутрішню функціональність або зробили щось інше складне, ви, можливо, зможете використовувати сервер для отримання більшого доступу, ніж ви повинні мати . Тож Amazon не збирається скоро дозволити вхідний WAL.

Вони можуть підтримувати вихідну розсилку WAL, але вищезазначені проблеми із сумісністю формату, свободою внесення змін тощо застосовуються.


Натомість слід використовувати такий інструмент, як Londiste або Bucardo.


Якщо RDS не підтримує PITR, для чого корисна кнопка "Відновити до певного часу"?
Джо Лав

1
RDS підтримує PITR в межах RDS . Ви не можете відправляти WAL за межі RDS. Я відредагую, щоб зробити це зрозумілішим у відповіді, оскільки я бачу, як ви могли це прочитати, кажучи, що у RDS взагалі немає підтримки PITR.
Крейг Рінгер

3

Тепер це можливо за допомогою логічної реплікації: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_PostgreSQL.html#PostgreSQL.Concepts.General.FeatureSupport.LogicalReplication


Дякую! Я часто знаходжу "офіційну" документацію, закопану настільки глибоко в документах Amazon, що мені доводиться шукати речі, відповіді, як ваша
emmdee

1

Реплікація з використанням на основі тригерних систем, таких як Londiste та Bucardo, в RDS та поза нею, тепер підтримується з 10 листопада 2014 року за відповідь у цій темі форуму.

Оголошення тут


1
Це зручно - але це не те саме, про що тут говорять. Вони додають підтримку для використання логічної реплікації на основі тригера, як Bucardo та Londiste з RDS. Це не додає підтримки для "фізичного" потоку на основі журналу, як це використовується в режимі гарячого очікування pg_basebackupтощо. Вони зробили найкращий вибір, який вони можуть, оскільки проблеми безпеки заважають їм реально підтримувати фізичну реплікацію.
Крейг Рінгер

Ага, так. І дякую за редагування. Я дійшов до цього питання від іншого, який більш загально запитував варіанти реплікації - мав би помітити, що цей запитує конкретно про файли WAL.
michel-slm

Будь ласка, додайте також посилання на відповідне питання. Це все одно було б корисно.
Крейг Рінгер

Ось ви - опублікуйте і мою відповідь там: stackoverflow.com/questions/20468230/…
michel-slm
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.