У меня есть 2 машины (машина Linux запускает мое приложение cpp). О приложении: приложение собирает пакеты из NFQUEUE и регистрирует их, основываясь на некоторой логике. Приложение представляет собой простое приложение cpp, работающее в бесконечном цикле. приложение должно поддерживать пропускную способность 500 Мбит / с. У машин нет IP. Они своего рода невидимые слушатели в сети (идентифицируют ведение журнала бизнес-логики).
Я хочу иметь главное подчиненное устройство с минимальным влиянием на производительность.
Я хочу, чтобы все пакеты были отправлены на машину A, и в случае, если приложение на машине A перестанет работать (мне нужен ваш совет о том, как лучше всего сигнализировать о том, что приложение перестает работать), пакеты должны направляться на машину B. Я не хочу подключать две машины и решение не могут быть единой точкой отказа. Мне нужно что-то вроде обхода, что если пакеты сбоя устройства все еще проходят через него.
Есть ли способ сделать это на оборудовании или на более низком сетевом уровне (не хочу делать это на уровне 7).
Стоимость оборудования (первичный / ведомый «переключатель» ограничен 1500 $).
Использовать keepalived
.
Это позволит реализовать «общий» IP-адрес. IP будет назначен только одному хосту за раз.
Исходя из вашего примера, предположим, что хост А имеет IP .1
и хозяин B имеет IP .2
. Вы можете сделать общий адрес .3
. Пока А Мастер, у него будет и то, и другое .1
и .3
. Когда машина А тогда умирает .3
перейдет к B.
есть коммутатор с зеркалированием портов, который постоянно отправляет трафик на обе машины. в то же время использовать Ucarp/оставайся живым/сердцебиение для включения / выключения вашего приложения на активном узле. вам понадобится какой-то способ связи между вашими серверами, чтобы сигнализировать, кто является активным узлом; вы можете пропустить его через отдельный интерфейс [даже перекрестный кабель между обоими блоками].