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

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

Это довольно конкретный вопрос, но на него я не смог найти ответа. Я запускаю набор служб на контейнере LXC в Ubuntu 16.04 LTS, в частности игровые серверы. Однако известно, что эта служба может давать сбои, как и ее оболочка. Поэтому для поддержания бесперебойной работы и балансировки нагрузки там, где службы зависают или не отвечают, мне нужно иметь возможность перенаправлять как UDP-, так и TCP-трафик в зависимости от того, отвечают ли служба или службы или нет.

Чтобы лучше объяснить сценарий, у меня есть контейнер LXC, выставленный на публичный IP, с другим контейнером LXC, вложенным с iptables, перенаправляющим трафик на порт 21025 во вложенный контейнер. Внутри этого контейнера, если службы, которые принимают трафик (называемые ServiceWrapperи ServiceMain), не отвечают, трафик должен перейти на другую службу на другом порту, который мы назовем ServiceFallback. В противном случае трафик идет, как и ожидалось, в ServiceWrapper, который затем отправляет трафик на ServiceMain.

Моя текущая попытка реализовать этот тип маршрутизации заключалась в использовании HAProxy для балансировки нагрузки между ServiceWrapperи ServiceFallback, однако на первый взгляд кажется, что HAProxy не обнаруживает или не разрешает перенаправление дополнительных портов в зависимости от того, как он балансирует нагрузку ServiceWrapperи ServiceFallback. Видите ли, ServiceMainпринимает трафик UDP на другом порту для упрощения запросов сервера, таких как версия, имя хоста и т. д. и т. п. И насколько я могу судить, HAProxy не будет маршрутизировать или обнаруживать трафик UDP.

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

решение1

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

Связанный контент