Как использовать распределенную базу данных PostgreSQL на веб-сайте?
Я хочу разместить веб-сайт, серверная часть будет базой данных PostgreSQL. Я хотел бы иметь несколько веб-серверов, в разных центрах обработки данных для резервирования. Затем я бы округлял DNS каждого веб-сервера для распределения нагрузки.
Для этого нужно ли мне иметь несколько баз данных и использовать какую-то репликацию? Или было бы лучше иметь одну базу данных и каждый веб-сервер указывать на нее через Интернет?
Обновление 1
Была выдвинута идея, что несколько веб-серверов должны иметь несколько серверов БД, чтобы исключить единую точку отказа. Мне бы очень хотелось, чтобы дубликат был настроен в каждом центре обработки данных. У меня был бы веб-сервер и сервер БД в каждом центре обработки данных. Я не был уверен, возможно ли это, поэтому я остался открытым к идее иметь только один сервер БД или иметь все БД в одном месте. Но в идеале у каждого дата-центра будет свой.
2 ответа
Недавно я попытался выяснить это и для аналогичного проекта. Я обнаружил, что это не так просто. Есть несколько открытых и коммерческих альтернатив, когда речь идет о репликации. Однако большинство из них не поддерживают несколько решений мастер-мастер, и довольно многие из них сложно поддерживать и настраивать.
У вас есть несколько вариантов продвижения вперед, в зависимости от того, как настроено ваше веб-приложение и насколько вам нужна избыточность. Самым простым из них, вероятно, является теплый резерв (эта функциональность уже включена в версию 8.3), но в случае сбоя у вас будет простои.
Другие решения для репликации, на которые я смотрел, включают:
Из них я нашел Bucardo наиболее интересным, поскольку он поддерживает master-master (но не multi), и, кажется, его довольно легко настроить.
Slony немного сложен в настройке и также требует значительного обслуживания при обновлении таблиц (изменения DDL не реплицируются), а также является только главным-подчиненным, что означает, что вы можете писать только в одну базу данных.
PgCluster, кажется, не поддерживается и не производит серьезного впечатления с документацией и сайтом (сайт не обновлялся с 2005 года).
Выполнение глобального циклического перебора через DNS может привести к нестабильности ваших соединений. Если ваш код не поддерживает узлы, следует ожидать записи в любую из реплицированных баз данных.
Вы можете выполнить настройку репликации с несколькими мастерами с помощью нескольких решений. Я использовал PgCluster раньше с хорошим успехом. На Postgres-R также есть интересный проект.
Имейте в виду, последовательность является вашим врагом здесь. Если вы пишете на один узел, а затем читаете с другого, ваш запрос может превысить вашу фиксацию в другой базе данных.
Если большая часть ваших запросов читается, вы можете настроить обычную схему репликации, а затем сделать так, чтобы ваш код делал записи в центральную базу данных master. Это больше работы, но это облегчает решение проблемы согласованности. Вы можете использовать что-то вроде Slony для выполнения "нормальной" репликации.
Изменить: Я согласен с комментариями о том, что PgCluster трудно настроить и имеет плохие документы! Я не ссылался на них, так как их сайт не работает, когда я пишу это.