Чи готове виготовлення реплікацій PostgreSQL?


16

Яким чином нативна реплікація PostgreSQL порівнюється з MySQL?

Я знаю, асинхронна реплікація підтримується довше, ніж синхронізація, яка є нещодавньою. Чи надійно використовувати синхронність у реальних проектах?

Відповіді:


31

Виробництво готове?

Так, воно готове до виробництва і широко використовується. Прихильники Heroku засновані, наприклад, на вбудованій асинхронній реплікації PostgreSQL, як і AWS RDS standbys та читають репліки. Поточна реплікація використовується майже універсально з PostgreSQL.

Налаштування реплікації не зовсім чудове, але такі інструменти, як repmgr, дещо допомагають у цьому, і вона покращується повільно з кожним головним випуском. Можливість pg_basebackup взяти копію системи за допомогою потокової реплікації (і зробити це з іншого режиму очікування) - велика допомога.

Взагалі, функція просто не буде випущена в PostgreSQL, поки її продукція не буде готова. Помилки трапляються, як і в будь-якому програмному забезпеченні, але вони зазвичай виправляються незабаром після їх ідентифікації. Насправді основні нові функції інколи мають помилки та проблеми, виявлені після випуску .0, але якщо це так, їх вирішення є першочерговим завданням; помилки не просто залишаються навколо.

Я не знаю жодних серйозних проблем із потоковою реплікацією - синхронізацією чи асинхронізацією - і жодного разу не бачив жодного повідомлення. Вони були менш стабільними, ніж звичайний стандарт Pg у релізах .0 основних версій, у які вони були представлені, але обидві швидко дозріли та готові до виробництва.

(Оновлення. У новій версії 9.3 до 9.3.4 виникла конкретна помилка, яка в деяких випадках викликала проблеми з реплікацією; користувачі 9.3 повинні одразу оновити до 9.3.4. Старіші версії не впливають.)

Єдине застереження, яке я хочу зазначити, - це незначна деталь із синхронною реплікацією: Якщо ви здійснюєте майстер, скасуйте запит після того, як він запускається, поки він чекає, коли репліка підтвердиться, вона трактується як заподіяна майстру ще до її реплікації. Такий же ефект ви отримуєте, перезавантаживши головний майстер, очікуючи на відповідь репліки. На практиці це не має значення, але це єдина проблема, яку я можу придумати.

Порівняти з MySQL?

Рідна реплікація Pg досить відрізняється від MySQL.

MySQL використовує логічну реплікацію, де він надсилає логічні зміни, внесені до даних таблиці, структури таблиці тощо, і репліка застосовує ці зміни.

Реплікація PostgreSQL нижчого рівня (у 9.5 і нижче; майбутні версії також можуть додавати логічну реплікацію). Він надсилає блоки, які змінилися в таблицях. Це простіше, простіше впорядкувати, і накладає менший навантаження на сервер реплік, але споживає більше пропускної здатності мережі і вимагає більше місця на майстер, щоб провести ще не повторені зміни. Найкраще налаштовувати використання потокової реплікації з резервним архівуванням WAL, що робить її більш складною в налаштуванні, ніж MySQL. Він реплікує зміни на низькому рівні, такі як активність VACUUM, а не просто змінює зміни, зберігаючи стан диска репліки таким же, як у головного. Неможливо реплікувати лише одну базу даних; вся система повинна бути тиражована, що може бути неприємно, якщо у вас є одна велика, велика база даних та неважлива база даних та одна невелика, низька та життєво важлива база даних.

Загалом, це залежить від того, що ви хочете з цим зробити.

Я розглядаю реплікацію PostgreSQL як значно кращу для реплік, які використовуються для резервного копіювання, високої доступності та відновлення після аварій. Особливо так, коли вони поєднуються з відновленням часу (PITR) .

З іншого боку, це не так добре для реплік звітності лише для читання, оскільки необхідність затримувати застосування реплікуваних даних під час виконання довгих транзакцій означає, що вам потрібно або дозволити йому скасувати дуже довгі запити або сильно відстати від головного, споживаючи більше дискового простору на майстер і змушує його працювати більше, щоб не відставати.

Триває робота з включення логічної реплікації в PostgreSQL , де логічні зміни структури таблиці, вмісту таблиць тощо реплікуються, а не їх стан на диску. Дизайн каталогу Pg та підтримка все, що визначено користувачем, робить це досить складним завданням. Деякі основи створені для 9.4, але повна логічна реплікація навряд чи може бути використана до 9.6 або пізніше.


Чудова відповідь на запитання я також мав. Дякую Крейгу.
swasheck

6
Є одна річ щодо синхронізації реп, яка дивує деяких користувачів, але насправді має сенс, якщо ви задумаєтесь: фіксація транзакції, яка підлягає синхронній реплікації, не повернеться, поки транзакція не буде продовжена хоча б на одному кластері, крім головного . Люди, які походять з деяких інших систем, вважають, що це повинно статися, якщо спроба реплікації не зайняла занадто довго , що означало б "це синхронно, якщо це не так", що не є прийнятною гарантією для спільноти PostgreSQL. Використовуйте кілька цілей синхронізації, щоб уникнути затримки, якщо репліка виходить з ладу, або використовуйте асинхронізацію.
kgrittn

1
@kgrittn Хороша точка про кілька цілей. Я дуже жаху, що хтось захоче / очікує, що зобов’язання повернеться до того, як транзакція буде повторена в синхронній реплікації; звучить так, що вони справді хочуть реплікації асинхронізації з максимальним обмеженням пробілу в послідовниках, яке призупиняє запис на майстер, поки підписники не наздоганяють достатньо? Цілком розумна річ хотіти, але не синхронізувати представник.
Крейг Рінгер

1
@CraigRinger: Те, що я бачив, люди просять, це не зовсім те, про що ви заявили, вони іноді просять "Використовувати синхронізацію, але автоматично повертаються до функції асинхронізації, якщо синхронізація триває занадто довго". Тож вони не хочуть робити паузу майстру, якщо він занадто сильно потрапляє за репліку - саме такий випадок, коли вони хочуть, щоб він швидко підтверджував , не вимагаючи запису на інший сайт. Для мене це звучить як випадок, який обіцяє більше, ніж досягається. Вони хочуть наперед "Так, у вас є синхронізація, ви в безпеці". і після аварії "Ці введені дані вже відсутні; ніде більше не було написано".
kgrittn

@CraigRinger, можливо, оновіть його на pg10 / логічно?
Еван Керролл
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.