Вопрос или проблема
Я настроил VIP с 2 реальными серверами за ним. Есть удаленный клиент с включенным мультихомингом SCTP (с 2 IP-адресами – первичным и вторичным). Здесь создана ассоциация SCTP между 2 IP-адресами клиента и VIP. В данный момент соединение установлено с реальным сервером 1, и сообщения пересылаются туда же. Когда первичный адрес выходит из строя, вторичный адрес начинает отправлять сообщения, но IPVS перенаправляет их на реальный сервер 2 вместо реального сервера 1, и соединение закрывается.
Возможно ли в этом случае переслать сообщение на тот же реальный сервер?
Примечание: Когда сообщения пересылаются на реальный сервер 1 через IPVS, проблем не наблюдается, т.е. обмен сообщениями проходит успешно.
Версия IPVS: IPVS v1.2.1
Ответ или решение
Вопрос, который вы подняли, касается поддержки мультихоминга SCTP в IPVS (IP Virtual Server) на Linux и поведения при переключении между адресами. Давайте рассмотрим вашу ситуацию более подробно.
Вы правильно отметили, что у вас настроен виртуальный IP (VIP), на который сконфигурированы два реальных сервера. С учетом того, что клиент поддерживает мультихоминг SCTP и использует два адреса (основной и резервный), основное поведение зависит от настроек IPVS и его способностей к обработке SCTP.
К сожалению, стандартная версия IPVS (включая версию 1.2.1, которую вы указали) имеет ограничения в поддержке SCTP мультихоминга. При переключении с основного адреса на резервный, IPVS не сохраняет состояние соединения между реальными серверами. Это значит, что, когда связь на реальном сервере (real-server-1) обрывается и сообщение приходит с резервного адреса, IPVS может неправильно определить, к какому реальному серверу направить трафик. В вашем случае это приводит к тому, что трафик по умолчанию перенаправляется к real-server-2.
Чтобы решить эту проблему, есть несколько возможных подходов:
-
Использование одинаковых параметров для всех реальных серверов: Убедитесь, что для всех серверов создается одинаковая конфигурация и режим работы. Это позволит IPVS поддерживать более стабильную связь.
-
Рассмотрите возможность использования других балансировщиков нагрузки: Если ваша инфраструктура допускает это, возможно стоит рассмотреть более современные решения, такие как HAProxy или NGINX с поддержкой SCTP, которые могут лучше управлять состоянием соединений и мультихомингом.
-
Патчи и обновления: Иногда существуют патчи или новые версии, которые могут улучшить поддержку SCTP. Убедитесь, что вы используете актуальную версию IPVS с последними исправлениями и улучшениями, хотя это не гарантирует решение вашей проблемы.
-
Настройка Keepalived или других инструментов: Используйте Keepalived для управления состоянием виртуальных IP-адресов и для обеспечения более надежного переключения между реальными серверами.
-
Логирование и мониторинг: Включите детальное логирование трафика SCTP и следите за его поведением. Это позволит вам иметь представление о том, что происходит во время переключения адресов и на каких этапах возникают сбои.
Таким образом, вы сталкиваетесь с ограничениями IPVS в обработке многоадресного соединения SCTP. Чтоб обеспечить устойчивую работу с мультихомингом, возможно, потребуется пересмотреть архитектуру вашего решения или использовать альтернативные методы балансировки нагрузки.