Как собственная репликация 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 или позже.