Назад | Перейти на главную страницу

Несколько серверов Postgres (одна запись, несколько устройств чтения) с общим диском

Вот сценарий:

  1. Один шард-диск (Gluster)
  2. Несколько серверов Postgres

Требования:

  1. Используйте общий диск для хранения файлов базы данных
  2. Используйте конфигурацию, обеспечивающую максимальную эффективность

На данный момент выводы,

  1. Можно использовать общий диск для хранения данных, как это документ говорит. Но в нем также говорится, что «Другая проблема заключается в том, что резервный сервер никогда не должен обращаться к совместно используемому хранилищу, пока работает основной сервер». Это означает, что все серверы (кроме главного) остаются неиспользованными, что для нас практически неприемлемо.

  2. Поскольку мы используем общий диск, репликации быть не должно. Это было найдено на этом документ что некоторые конфигурации (режимы Raw и Master / Slave) достаточно хороши. Но другая проблема в том, что они могут вызвать указанную выше проблему.

Проблемы:

  1. В Интернете есть множество документации, которая сбила меня с толку относительно их требований и функций. Я правильно понимаю?
  2. Если да, то есть ли возможность достичь этого дизайна (с помощью pgpool или любых других инструментов)
  3. Если да, то не могли бы вы назвать инструменты и / или ключевые слова, чтобы я мог найти дополнительную информацию.

Примечание (для тех, кто заинтересован в том, чтобы задавать как можно больше вопросов) - Со мной такое случалось раньше. Некоторые говорят, что я ищу ответы, основанные на мнениях. На самом деле нет. Я ищу название технологии или какие-то ключевые слова, несмотря ни на что. Так что, используя их, я могу искать дополнительную информацию. Иногда бывает, что вам нужно знать какие-то ключевые слова для поиска и нахождения информации.

Заранее спасибо.

Невозможно запустить несколько серверов PostgreSQL из одного каталога данных, даже если все, кроме одного, доступны только для чтения. Абсолютно 100% не поддерживается. Не может быть сделано. Сдавайся сейчас же.

Кто-нибудь может однажды добавить такую ​​функцию, но это потребует крупный изменения в PostgreSQL, поскольку Pg в значительной степени полагается на разделяемую память и сигналы для межпроцессной синхронизации. Так же shared_buffers содержат «грязные» буферы, которые еще не записаны; их можно записывать лениво, потому что PostgreSQL знает, что все серверы будут читать оттуда и переходят на диск только в том случае, если данные не находятся в shared_buffers.

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

Ссылки на общее хранилище, которые вы видели, только для аварийного переключения, а не для одновременной работы. В руководстве довольно конкретно сказано, что вам необходимо обеспечить надлежащее ограждение для предотвращения одновременного доступа к хранилищу несколькими серверами БД, и если вы этого не сделаете, это приведет к серьезному повреждению.

Вам придется полагаться на репликацию или использовать другой механизм БД, который поддерживает общее хранилище (и имеет дело с результирующим влиянием на производительность).

Однако по отдельности: базы данных часто ограничены вводом-выводом. Совместное хранилище ничего вам не даст, если у вас теперь есть два сервера, способных на 1000 транзакций в секунду, вместо одного сервера, способного выполнять 2000. Или, учитывая накладные расходы на синхронизацию общей системы хранения без шины с низкой задержкой (подумайте о Infiniband / Myrinet ), больше похоже на два сервера по 200 транзакций в секунду каждый.