Как использовать распределенную базу данных PostgreSQL на веб-сайте?

Я хочу разместить веб-сайт, серверная часть будет базой данных PostgreSQL. Я хотел бы иметь несколько веб-серверов, в разных центрах обработки данных для резервирования. Затем я бы округлял DNS каждого веб-сервера для распределения нагрузки.

Для этого нужно ли мне иметь несколько баз данных и использовать какую-то репликацию? Или было бы лучше иметь одну базу данных и каждый веб-сервер указывать на нее через Интернет?

Обновление 1

Была выдвинута идея, что несколько веб-серверов должны иметь несколько серверов БД, чтобы исключить единую точку отказа. Мне бы очень хотелось, чтобы дубликат был настроен в каждом центре обработки данных. У меня был бы веб-сервер и сервер БД в каждом центре обработки данных. Я не был уверен, возможно ли это, поэтому я остался открытым к идее иметь только один сервер БД или иметь все БД в одном месте. Но в идеале у каждого дата-центра будет свой.

2 ответа

Решение

Недавно я попытался выяснить это и для аналогичного проекта. Я обнаружил, что это не так просто. Есть несколько открытых и коммерческих альтернатив, когда речь идет о репликации. Однако большинство из них не поддерживают несколько решений мастер-мастер, и довольно многие из них сложно поддерживать и настраивать.

У вас есть несколько вариантов продвижения вперед, в зависимости от того, как настроено ваше веб-приложение и насколько вам нужна избыточность. Самым простым из них, вероятно, является теплый резерв (эта функциональность уже включена в версию 8.3), но в случае сбоя у вас будет простои.

Другие решения для репликации, на которые я смотрел, включают:

Из них я нашел Bucardo наиболее интересным, поскольку он поддерживает master-master (но не multi), и, кажется, его довольно легко настроить.

Slony немного сложен в настройке и также требует значительного обслуживания при обновлении таблиц (изменения DDL не реплицируются), а также является только главным-подчиненным, что означает, что вы можете писать только в одну базу данных.

PgCluster, кажется, не поддерживается и не производит серьезного впечатления с документацией и сайтом (сайт не обновлялся с 2005 года).

Выполнение глобального циклического перебора через DNS может привести к нестабильности ваших соединений. Если ваш код не поддерживает узлы, следует ожидать записи в любую из реплицированных баз данных.

Вы можете выполнить настройку репликации с несколькими мастерами с помощью нескольких решений. Я использовал PgCluster раньше с хорошим успехом. На Postgres-R также есть интересный проект.

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

Если большая часть ваших запросов читается, вы можете настроить обычную схему репликации, а затем сделать так, чтобы ваш код делал записи в центральную базу данных master. Это больше работы, но это облегчает решение проблемы согласованности. Вы можете использовать что-то вроде Slony для выполнения "нормальной" репликации.

Изменить: Я согласен с комментариями о том, что PgCluster трудно настроить и имеет плохие документы! Я не ссылался на них, так как их сайт не работает, когда я пишу это.

Другие вопросы по тегам