Рейтинг:1

Перенаправлять трафик в резервный контейнер, если мастер не работает в Kubernetes.

флаг cn

У меня есть кластер k8 с серверной службой (BS) и службой базы данных (DS).

В DS есть модуль, содержащий один контейнер PgBouncer (прокси для сервера Postgres). BS отправляет свои запросы к базе данных в DS, которые возвращаются к этому единственному модулю.

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

Это возможно? Не могли бы вы подсказать мне, как это сделать, возможно, давая некоторые ссылки?

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

Mikolaj S. avatar
флаг cn
Какую версию Kubernetes вы использовали и как настроили кластер? Вы использовали установку на «голое железо» или какого-то облачного провайдера?
Mikolaj S. avatar
флаг cn
Поэтому я предполагаю, что вы ищете решение для маршрутизации запроса к базе данных только тогда, когда основной модуль не работает. Это верно?
Eranga Heshan avatar
флаг cn
@МиколайС. Я использую службу Azure Kubernetes. Это на версии 1.19.11. Да, именно так, я хочу направлять запросы к базе данных в основной модуль, когда он работает, и только когда он не работает, направлять запросы в резервный модуль.Знаете ли вы какие-либо ресурсы, где я могу найти решение?
Рейтинг:1
флаг ng

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

На основе эта документация PgBouncer не имеет внутренней многоузловой конфигурации. Для балансировки нагрузки запросов между несколькими серверами можно использовать внешние инструменты, такие как:

  1. DNS циклический перебор. Используйте несколько IP-адресов за одним DNS-именем. PgBouncer не ищет DNS каждый раз, когда запускается новое соединение. Вместо этого он кэширует все IP-адреса и выполняет внутренний циклический перебор. Примечание: если за одним именем более 8 IP-адресов, серверная часть DNS должна поддерживать протокол EDNS0. Подробности смотрите в README.

  2. Использовать Балансировщик нагрузки TCP-соединения. Либо ЛВС или же HAProxy кажутся хорошими вариантами. Со стороны PgBouncer может быть хорошей идеей сделать server_lifetime меньше, а также поворот server_round_robin on: по умолчанию простаивающие соединения повторно используются алгоритмом LIFO, который может работать не так хорошо, когда нужна балансировка нагрузки.

Этот блог объясняет, зачем использовать другой механизм балансировки нагрузки с pgBouncer. В соответствии с этим вы не должны использовать pgBouncer вместо HAProxy или другого балансировщика нагрузки.Очевидно, что pgBouncer имеет несколько настраиваемых функций, определяющих, к чему обращается балансировщик нагрузки, но чаще всего в средах prod используется HAProxy или какой-либо другой балансировщик нагрузки для высокой доступности. Причина этого в том, что HAProxy лучше распределяет рабочие нагрузки между действующими серверами, чем pgbouncer.

Хотя pgbouncer лучше подходит для пула соединений postgres, может быть лучше использовать один небольшой демон, который отлично выполняет одну задачу, вместо более крупного демона, который выполняет две задачи, но хуже.

Также неплохо использовать PgPool. Смотрите также этот ответ.

Здесь также статья, в которой сравниваются PgBouncer и PgPool. Небольшая часть этого: | | PGBUNCER | PGPOOL-II | |--|--|--| | Высокая доступность |Не поддерживается. |Высокая доступность PostgreSQL поддерживается встроенными процессами-наблюдателями Pgpool-II. Победитель! | |Балансировки нагрузки|Не поддерживается — PgBouncer рекомендует использовать HAProxy для обеспечения высокой доступности и балансировки нагрузки.| Поддерживает автоматическую балансировку нагрузки — достаточно интеллектуален, чтобы перенаправлять запросы на чтение на резервные серверы и на запись на ведущие. Победитель! |

Wytrzymały Wiktor avatar
флаг it
Привет @ErangaHeshan. Какой-либо прогресс?
Eranga Heshan avatar
флаг cn
@kkopczak Спасибо за понимание. Я надеялся, что для этого может быть готовое решение. Я постараюсь сделать то, что вы предложили, когда у меня будет время.
Eranga Heshan avatar
флаг cn
@WytrzymaÅyWiktor Извините, у меня не было времени проверить ответ.

Ответить или комментировать

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