Яким чином нативна реплікація PostgreSQL порівнюється з MySQL?
Я знаю, асинхронна реплікація підтримується довше, ніж синхронізація, яка є нещодавньою. Чи надійно використовувати синхронність у реальних проектах?
Яким чином нативна реплікація PostgreSQL порівнюється з MySQL?
Я знаю, асинхронна реплікація підтримується довше, ніж синхронізація, яка є нещодавньою. Чи надійно використовувати синхронність у реальних проектах?
Відповіді:
Так, воно готове до виробництва і широко використовується. Прихильники Heroku засновані, наприклад, на вбудованій асинхронній реплікації PostgreSQL, як і AWS RDS standbys та читають репліки. Поточна реплікація використовується майже універсально з PostgreSQL.
Налаштування реплікації не зовсім чудове, але такі інструменти, як repmgr, дещо допомагають у цьому, і вона покращується повільно з кожним головним випуском. Можливість pg_basebackup взяти копію системи за допомогою потокової реплікації (і зробити це з іншого режиму очікування) - велика допомога.
Взагалі, функція просто не буде випущена в PostgreSQL, поки її продукція не буде готова. Помилки трапляються, як і в будь-якому програмному забезпеченні, але вони зазвичай виправляються незабаром після їх ідентифікації. Насправді основні нові функції інколи мають помилки та проблеми, виявлені після випуску .0, але якщо це так, їх вирішення є першочерговим завданням; помилки не просто залишаються навколо.
Я не знаю жодних серйозних проблем із потоковою реплікацією - синхронізацією чи асинхронізацією - і жодного разу не бачив жодного повідомлення. Вони були менш стабільними, ніж звичайний стандарт Pg у релізах .0 основних версій, у які вони були представлені, але обидві швидко дозріли та готові до виробництва.
(Оновлення. У новій версії 9.3 до 9.3.4 виникла конкретна помилка, яка в деяких випадках викликала проблеми з реплікацією; користувачі 9.3 повинні одразу оновити до 9.3.4. Старіші версії не впливають.)
Єдине застереження, яке я хочу зазначити, - це незначна деталь із синхронною реплікацією: Якщо ви здійснюєте майстер, скасуйте запит після того, як він запускається, поки він чекає, коли репліка підтвердиться, вона трактується як заподіяна майстру ще до її реплікації. Такий же ефект ви отримуєте, перезавантаживши головний майстер, очікуючи на відповідь репліки. На практиці це не має значення, але це єдина проблема, яку я можу придумати.
Рідна реплікація Pg досить відрізняється від MySQL.
MySQL використовує логічну реплікацію, де він надсилає логічні зміни, внесені до даних таблиці, структури таблиці тощо, і репліка застосовує ці зміни.
Реплікація PostgreSQL нижчого рівня (у 9.5 і нижче; майбутні версії також можуть додавати логічну реплікацію). Він надсилає блоки, які змінилися в таблицях. Це простіше, простіше впорядкувати, і накладає менший навантаження на сервер реплік, але споживає більше пропускної здатності мережі і вимагає більше місця на майстер, щоб провести ще не повторені зміни. Найкраще налаштовувати використання потокової реплікації з резервним архівуванням WAL, що робить її більш складною в налаштуванні, ніж MySQL. Він реплікує зміни на низькому рівні, такі як активність VACUUM, а не просто змінює зміни, зберігаючи стан диска репліки таким же, як у головного. Неможливо реплікувати лише одну базу даних; вся система повинна бути тиражована, що може бути неприємно, якщо у вас є одна велика, велика база даних та неважлива база даних та одна невелика, низька та життєво важлива база даних.
Загалом, це залежить від того, що ви хочете з цим зробити.
Я розглядаю реплікацію PostgreSQL як значно кращу для реплік, які використовуються для резервного копіювання, високої доступності та відновлення після аварій. Особливо так, коли вони поєднуються з відновленням часу (PITR) .
З іншого боку, це не так добре для реплік звітності лише для читання, оскільки необхідність затримувати застосування реплікуваних даних під час виконання довгих транзакцій означає, що вам потрібно або дозволити йому скасувати дуже довгі запити або сильно відстати від головного, споживаючи більше дискового простору на майстер і змушує його працювати більше, щоб не відставати.
Триває робота з включення логічної реплікації в PostgreSQL , де логічні зміни структури таблиці, вмісту таблиць тощо реплікуються, а не їх стан на диску. Дизайн каталогу Pg та підтримка все, що визначено користувачем, робить це досить складним завданням. Деякі основи створені для 9.4, але повна логічна реплікація навряд чи може бути використана до 9.6 або пізніше.