2010-03-26 1 views
2

Сценариянагрузки и отказоустойчивость для чтения только PostgreSQL Database

Несколько веб-служб сервера приложений хоста, написанных на Java, выполняющихся в SpringSource ого Server. Чтобы реализовать новое требование, им необходимо будет запросить базу данных PostgreSQL, доступную только для чтения.

Выпуск

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

Research

Я рассмотрел официальный PostgreSQL documentation по этому вопросу. Тем не менее, основное внимание уделяется более общему случаю доступа для чтения/записи к базе данных. Результаты Top Google, как правило, приводят к более старым сообщениям новостных групп или мертвым проектам, таким как Sequoia или DB Балансировщик, а также одного активного проекта PG Pool II

Вопрос

Каковы ваши реальные опыты с PG Pool II? Какие еще простые и надежные альтернативы доступны?

+0

ПРИМЕЧАНИЕ. Я вижу, что один человек чувствует, что это принадлежит серверу. Однако речь идет о настройках балансировки загрузки программного обеспечения. Это более подходит для serverfault? –

ответ

1

В вики PostgreSQL также перечислены clustering solutions, а на странице Replication, Clustering, and Connection Pooling приведена таблица, показывающая, какие решения подходят для балансировки нагрузки.

Я с нетерпением жду комбинации PostgreSQL 9.0 в режиме горячего резерва и потоковой репликации.

+0

@ Stephen: Я уже посмотрел PGPool. Другой вариант для балансировки нагрузки, PG Cluster, похоже, получил свое доменное имя, когда кто-то нажал кредитные карты. –

+0

Закончен с использованием PGPool II. –

1

Вы посмотрели на SQL Relay?

+0

Пока нет, но посмотрим сейчас. Спасибо за совет! –

0

Стандартное решение для чего-то подобного - смотреть на Slony, Londiste или Bucardo. Все они предоставляют асинхронную репликацию для многих подчиненных устройств, где ведомые устройства доступны только для чтения.

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

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