При обновлении моего кластера с версии 3.4 на 4.0 я столкнулся с серьезными проблемами с мультикастом. Мне потребовалось много усилий, чтобы найти решение. Решил поделиться этим здесь... Обновление с 3.4 на 4.0 также изменило коммуникацию кластера с уникастного UDPU на мультикаст. Поскольку наша сеть должна была поддерживать мультикаст, я ожидал, что проблем не будет. Но ничего не сработало. Симптомы: кластер не заработал, не было кворума. При тестировании с помощью "omping", как указано в справочном руководстве, я увидел полное исчезновение пакетов при мультикасте. Сетевые специалисты сказали мне, что наша сеть готова к мультикасту, так что кластер должен работать. Другие кластеры уже работают. Тесты: Использование отдельного коммутатора с отключенной IGMP-спецификацией показало, что мультикаст в Proxmox работает. Для теста я полностью переустановил все узлы кластера и подключил их обратно к обычному коммутатору. Теперь мультикаст работал частично. Тесты с "omping" показали, что теперь 2 из 3 серверов имеют мультикаст-соединение. Для более глубоких тестов я попробовал "tcpdump igmp". Это показало пакеты "IGMP query" от мультикаст-роутера на каждом узле, но только узлы, которые показали успех с мультикастом в "omping", также демонстрировали пакеты "IGMP report". Причина: интерфейс кластера был сконфигурирован как сетевой мост (интерфейс vmbrx). Сетевой мост имеет IGMP-спецификацию включенной по умолчанию, но не всегда надежно определяет мультикаст-роутер. Быстрое решение: отключите IGMP-спецификацию на сетевом мосту. Код: echo 0 >/sys/class/net/vmbrx/bridge/multicast_snooping. С этим исправлением коммуникация кластера заработала, и я получил кворум. Но почему же это не сработало, как ожидалось? И как я могу исправить это без побочных эффектов? Правильное решение: реальная проблема в том, что сетевой мост иногда не может надежно обнаружить мультикаст-роутер сам по себе. И поскольку пакеты "IGMP query" - это мультикаст-пакеты, они подавляются IGMP-спецификацией. Мне нужно было настроить мой мост так, чтобы он знал о порте, на котором находится мультикаст-роутер. Это делается путем настройки порта с "автоопределить мультикаст-роутер" на "принимать весь мультикаст-трафик". (Смотрите документы по сетевым мостам и IGMP-спецификации). В моем случае мультикаст-роутер находится вне моего сервера Proxmox, так что он находится за физическим интерфейсом ethy. Настроить этот интерфейс немного сложно, поэтому я создал для этого небольшой скрипт в /etc/network/if-up.d/multicastrouter. Код: # установка интерфейса мультикаст-роутера
if [ "$MODE" = "start" ] ; then
PORT=`basename \`find /sys/devices/virtual/net/$IFACE/brif | grep brif/\``
SYS=`find /sys/devices -name multicast_router | grep $PORT`
echo 2 >$SYS
fi. Теперь мой интерфейс кластера получает пакеты "ICMP query" и отвечает с помощью пакетов "IGMP report". Таким образом, мост и внешний коммутатор знают о мультикаст-трафике. Надеюсь, это поможет другим, у кого есть похожие проблемы. Биргер
if [ "$MODE" = "start" ] ; then
PORT=`basename \`find /sys/devices/virtual/net/$IFACE/brif | grep brif/\``
SYS=`find /sys/devices -name multicast_router | grep $PORT`
echo 2 >$SYS
fi. Теперь мой интерфейс кластера получает пакеты "ICMP query" и отвечает с помощью пакетов "IGMP report". Таким образом, мост и внешний коммутатор знают о мультикаст-трафике. Надеюсь, это поможет другим, у кого есть похожие проблемы. Биргер
