У меня возникла следующая проблема при попытке реализовать двухузловой отказоустойчивый кластер с использованием Hetzner в качестве хостинг-провайдера.
мой corosync.conf выглядит следующим образом:
# Please read the corosync.conf.5 manual page
compatibility: whitetank
totem {
version: 2
secauth: off
interface {
member {
memberaddr: 144.76.91.XXX
}
member {
memberaddr: 5.9.121.XXX
}
ringnumber: 0
bindnetaddr: 5.9.121.0
mcastport: 5405
ttl: 1
}
transport: udpu
}
logging {
fileline: off
to_logfile: yes
to_syslog: yes
debug: on
logfile: /var/log/cluster/corosync.log
debug: off
timestamp: on
logger_subsys {
subsys: AMF
debug: off
}
}
`проблема в том, что 5.9.121.XXX связывается правильно (и отображается в crm_mon как часть кластера)
UDP 0 0 5.9.121.XXX:5405 0.0.0.0:* 8281 / corosync
но 144.76.91.XXX не работает и вместо этого привязывается к localhost.
UDP 0 0 127.0.0.1:5405 0.0.0.0:* 7889 / corosync
Анализ журналов tcpdump показывает, что 144.76.91.XXX отвечает на 5.9.121.XXX с помощью ICMP типа 3 (пункт назначения недоступен), код 3 (порт недоступен).
corosync -f output будет печатать повторно:
24 июня, 12:53:28 corosync [TOTEM] Totem не может сформировать кластер из-за сбоя операционной системы или сети. Наиболее частая причина появления этого сообщения - неправильная настройка локального брандмауэра.
Между двумя хостами включен UDP-трафик, в настоящее время нет брандмауэров, и я использую Debian (таким образом, без SELinux).
Любые идеи для решения этой проблемы? Можно ли вообще создать кластер с 2 машинами в разных подсетях или мне нужно заказать серверы в одной подсети? Заранее благодарим за любые ответы.
Из списка рассылки (который решил мою проблему), любезно предоставлен Дэном Фриску:
«Вы не должны использовать один и тот же bindnetaddr в обоих местах, это актуально только на уровне узла для UDPU (ваш вариант использования). На узле, где у вас есть адрес 144. *, используйте его как bindnetaddr».
Надеюсь, что это кому-то пригодится.