Вопрос: Репликация PostgreSQL


Мы постоянно били по всему офису, и вопрос продолжает подниматься. Как вы справляетесь с репликацией PostgreSQL? Я даже не обязательно говорю о передовых кластерах, просто сохраняя это просто с помощью Master-Slave, Master-MultiSlave и Master-Master. Я считаю, что настройка его для MySQL обычно довольно проста. Отказоустойчивость является простой, если не идеальной, особенно для того, насколько легко ее настроить. Мы играли с Slony, но это слишком много рук (изменения схемы требуют вмешательства, новые базы данных требуют вмешательства и т. Д.). PGPool2 был довольно приятным, пока узел не опустился, и мы не смогли найти изящный способ (за исключением того, что все вниз и повторение упавшего узла), чтобы синхронизировать репликацию. В основном, вот что я обычно ищу:

  • Простая настройка (я соглашусь на трудную настройку, но ее легко расширить)
  • Упрощенный переход на другой ресурс
  • Возвращение упавшего узла обратно требует времени (т. Е. Как mysql. Сервер опускается, вы его поднимаете и ждете, пока репликация не догонит)
  • Изменения схемы не прерывают репликацию
  • Добавление новой базы данных на сервер является бесшовным (например, как mysql, вы можете реплицировать весь сервер БД, поэтому на базе создается новая база данных, она автоматически распространяется на подчиненный)

MySQL обрабатывает большинство из них достаточно хорошо, но я придерживаюсь некоторой привязанности к PostgreSQL. Кроме того, у нас есть некоторые ситуации, когда это наш единственный вариант, и мы хотели бы добавить репликацию в микс. Что вы используете в настоящее время и как вы относитесь к своему решению? Я обещаю, что это не сообщение MySQL и PostgreSQL, потому что это не то, что я пытаюсь начать. :)


45
2018-05-22 06:22


Источник


Меня интересует ответ на этот вопрос. Исходя из фона MySQL, параметры репликации для PSQL являются, по меньшей мере, сельскохозяйственными. - Dave Cheney
Да, до сих пор у каждого варианта, с которым я играл, были существенные недостатки. Надеюсь, что мне не хватает чего-то очевидного .. но я не думаю, что я - f4nt
Я подозреваю, что больше ничего нет, но я очень хочу, чтобы кто-то доказывал, что я ошибаюсь - Vinko Vrsalovic
Кстати, вы пробовали pgsql-general@postgresql.org? - Vinko Vrsalovic


Ответы:


Короткий ответ - такого решения пока нет для PostgreSQL, если вам нужны онлайн-ведомые только для чтения.

В этой области в настоящее время ведутся два крупных проекта развития, которые включены в PostgreSQL 9.0 (Spring / Summer 2010), а именно:

  • Синхронная репликация:

http://wiki.postgresql.org/wiki/NTT's_Development_Projects

  • Чтение только горячих резервных ведомых:

http://wiki.postgresql.org/wiki/Hot_Standby

которые в совокупности стремятся к простоте использования репликации в стиле MySQL за вычетом ошибок / проблем MySQL, а также надежности пользователей, известных из PostgreSQL.

Все это было вызвано манифестом из Core Team PostgreSQL в 2008 году:

http://archives.postgresql.org/pgsql-hackers/2008-05/msg00913.php

Репликационные решения PostgreSQL по сей день с самой большой пользовательской базой - Slony-I (более дорогие для записи, затруднения в изменении схемы), WAL shipping / walmgr (Slaves нельзя использовать в режиме онлайн) и pgQ / londiste из Skype / Skytools ( больше инструментов / строительных блоков, чем готовое решение).

Я написал несколько вещей в Log Shipping, walmgr и Slony-I, см.

http://blogs.amd.co.at/mt/mt-search.cgi?blog_id=1&tag=pgrep&limit=20 Чтобы получить больше информации.


9
2018-05-29 15:47



Синхронная репликация + горячий режим ожидания теперь доступны - см. wiki.postgresql.org/wiki/... для хорошего резюме доступных методов - David Fraser


И выбросить еще одно решение в кольцо: rubyrep.

Для сравнения с вашими требованиями:

  • Простая настройка
    Да, это на самом деле основное внимание рубирепа.
  • Упрощенный переход на другой ресурс
    Да. На самом деле rubyrep делает репликацию master-master - чтобы провалиться, никакого действия не требуется вообще. Просто начните использовать другую базу данных.
  • Изменения схемы не прерывают репликацию
    Да.
    Для непервичных ключевых изменений репликация даже не должна останавливаться (но убедитесь, что схема изменяется с обеих сторон одновременно)
    Чтобы добавить / удалить таблицы, просто перезапустите демон репликации. Только изменение столбца первичного ключа таблицы требует немного усилий.
  • Добавление новой базы данных на сервер является бесшовным (например, как mysql, вы можете реплицировать весь сервер БД, поэтому на базе создается новая база данных, она автоматически распространяется на подчиненный)
    Это поддерживается только ограниченным образом: каждая настройка rubyrep реплицирует только одну базу данных за раз. (Но очень просто настроить репликацию для нескольких баз данных.)

5
2017-07-01 06:41





Вы не упомянули о том, что в качестве требования требуется «горячий» раб-раб, поэтому я собираюсь предложить использовать Heartbeat с общим хранилищем или DRBD. Он просто делает правильные вещи, и администрация - легкий ветерок. Это эквивалент Linux для более ранней кластеризации Microsoft SQL Server. Один узел активен, а другой узел является пассивным, а данные разделяются между ними. Вам не нужно беспокоиться о репликации на основе SQL, потому что все они обрабатываются ниже на уровне блоков.

Серьезно, это, безусловно, лучшее решение, если вам не нужны чтения подчиненных. Архивный материал WAL был в лучшем случае хоккеем, и вы должны снова настроить все, если вы когда-нибудь нарушите процесс доставки для перезагрузки сервера. slony и londiste не разрезают горчицу. Если вы хотите остаться на основном исходном дереве, а не торговать, Heartbeat - ваш лучший выбор.


4
2018-05-27 18:02





Из ваших требований кажется, что PITR - это самый простой способ решить вашу проблему:

Резервное копирование в режиме on-line и восстановление по времени (PITR)

Вы не сказали, что вам нужно запросить подчиненный сервер, поэтому PITR может быть прав.

Это стандартная часть PostgreSQL с версии 8.0, поэтому у вас, вероятно, уже есть все необходимое для ее запуска и запуска.

Если вы найдете инструкции слишком подробные, взгляните на SkyTools WalMgr который будет выполнять процесс создания / перехода на другой ресурс в одиночную командную задачу «горячего резервирования».

Для более сложных сценариев репликации у меня был хороший опыт Slony-1, но PostgreSQL имеет много хороших вариантов репликации / HA.


2
2018-05-22 13:25



и эти варианты ...? - Dave Cheney
... перечисленные в блоге blog.endpoint.com/2009/05/competitors-to-bucardo-version-1.html в одном из ответов ... - dpavlin


Если вы хотите асинхронную репликацию master / slave, рассмотрите Londiste (часть пакета skytools из Skype) wiki.postgresql.org/wiki/Londiste_Tutorial

Его легко установить, добавив новую БД, легко, репликация просто «догоняет».

Однако отказоустойчивость не встроена. Вам нужно будет изменить строки подключения приложения или обфускать соединение с БД за другим слоем программного обеспечения.

Некоторые изменения схемы просты. Другие труднее. Это зависит от вашего приложения. Следующая версия skytools (ver 3.0) должна обрабатывать DDL и включать средства, облегчающие переход на другой ресурс.

Мы переехали в Лондисте после того, как нашли Slony слишком болезненным для использования.


2
2018-05-27 17:53





См. Обсуждение здесь, может быть, это может помочь:

http://blog.endpoint.com/2009/05/competitors-to-bucardo-version-1.html

а также

Конкуренты на Bucardo Version One, найденные ниже на странице:

http://www.planetpostgresql.org/


1
2018-05-22 09:09





На самом деле нет никаких бесплатных / открытых исходных кодов для обеспечения того, что вы ищете. Если вы хотите что-то такое под ключ, посмотрите на различные сторонние решения для коммерческой репликации.

Теперь это является возможно сортировать рулон вашей собственной репликации с помощью Postgres с использованием журнала записи (WAL):

http://www.postgresql.org/docs/8.3/interactive/warm-standby.html

Это в основном, когда вы можете поместить вторичный узел в режим непрерывного восстановления и импортировать журналы транзакций в него каждый {маленький интервал}. У конфигурации Postgres есть «заглушки», которые позволяют вам делать определенные вещи, когда Postgres, когда WAL завершен, и, следовательно, нет, и это то, на что основана эта настройка, - используя эти «заглушки».

Однако это не позволяет выполнять мастер-мастер и / или циклическую репликацию.

В любом случае, это определенно работает для erdundancy, но я бы не назвал его «простой настройкой», «упрощенным отказоустойчивостью», «бесшовным» или что-то в этом роде.


1
2018-05-27 10:10



этот ответ дублирует предложение PITR, поскольку PITR использует WAL :-) - dpavlin


За исключением «добавления новой базы данных», вы можете попробовать Mammoth Replicator (https://projects.commandprompt.com/public/replicator). Он с открытым исходным кодом, легко настраивается и поддерживает переход на другой ресурс. Основными ограничениями являются единая база данных и невозможность реплицировать изменения DDL, оба находятся в списке TODO.


1
2018-05-29 18:18





Postgres-R, выглядел многообещающим, но я не знаю, жив ли проект.


0
2018-05-26 19:28





В настоящее время я смотрю на репликатор Tungsten, я все еще далек от любого определенного вывода, но, вероятно, стоит посмотреть.

www.continuent.com


0
2018-05-26 18:30