Я пытаюсь найти правильные элементы для реализации высокодоступной и отказоустойчивой настройки для серверного приложения на основе Java (netty). В идеале TCP-соединения были бы активны в течение месяцев, если не лет (они используются в обмене данными между серверами), и должны были бы отключаться только в том случае, если удаленный сервер отключился или из-за неконтролируемой сетевой проблемы. Цель состоит в том, чтобы не было единой точки отказа.
Данные в соединениях сокетов очень похожи на структуры данных protobuf. Это не HTTP.
До сих пор я смотрел на keepalived и HAProxy, но, похоже, ни один из них не позволяет перенаправить / переключить постоянный сеанс TCP на другой внутренний сервер без отключения внешнего сеанса.
Я пытаюсь понять, что будет работать в системах FE1 и BE1, как показано ниже;
| VIP |
+----+----+ +----+----+
| FE1 | <-VRRP-> | FE2 |
+----+----+ +----+----+
| |
| |
------+---+------------+---+----------
| |
+---+---+ +---+---+
| BE1A | | BE1B |
+---+---+ +---+---+
| |
+------------+
| |
| |
+---+---+ +---+---+
| BE2A | | BE2B |
+---+---+ +---+---+
Внешние серверы подключаются через VIP к активной системе внешнего интерфейса (FE), которая затем устанавливает TCP-соединение с активной внутренней системой 1 (BE1). Или если это делает TCP-прокси; подключается к обеим системам BE1 и отправляет трафик в одну систему.
Серверы BE1 запускают настраиваемое приложение Java, которое обеспечивает, чтобы запросы и ответы попадали в соответствующую систему BE2. Это может быть изменено любым способом для обработки соединения / потока от серверов FE, если это необходимо.
Я ищу, если одна из систем BE1 выходит из строя (намеренно или нет), это сервер FE перенаправляет / повторно устанавливает соединение с другой системой BE1 без какого-либо отключения от подключения к внешнему VIP с удаленного сервера. . Т.е. прозрачная отработка отказа постоянного TCP-соединения.
Как упоминалось ранее, я посмотрел на keepalived / HAProxy, и, насколько я могу судить, они не будут работать - если только я не пропустил для них плагин / мод, который мог бы помочь.
Какие существуют варианты того, что может работать на слое FE? или есть что-то, что может работать на уровне BE1, которое может обрабатывать отказоустойчивость и уведомлять java о перемещении / возобновлении сокета в альтернативной системе (т.е. может ли LVS или tcpcp использоваться с java - я не нашел много разговоров о Это).
Спасибо!