Ein paar Informationen zur Umgebung und zu den Konfigurationsdateien:
Zwei nodes (lb1,lb2) via ESX virtualisiert. Jeweils nur ein Interface je node.
Meine alte corosync.conf:
... interface { ringnumber: 0 bindnetaddr: 192.168.1.0 mcastport: 5405 mcastaddr: 226.94.1.10 } ...
Folgendes Problem:
Zwei nodes lb1 und lb2 und eine Ressource FAILOVER-ADDR (Cluster IP). Auf beiden läuft Pacemaker. Beide sehen sich und eigentlich sieht alles ok aus. Mache ich nun ein
lb1$ crm resource migrate FAILOVER-ADDR lb2
Wird FAILOVER-ADDR auf lb2 geschwenkt. Alles wunderbar, aber sobald die Aktion vollzogen ist sehen sich lb1 und lb2 nicht mehr via multicast. Ich habe nicht herausfinden können warum, falls jemand Ideen hat immer her damit.
lb1$ ping 226.94.1.10 64 bytes from 192.168.1.11: icmp_req=878 ttl=64 time=0.021 ms 64 bytes from 192.168.1.11: icmp_req=879 ttl=64 time=0.020 ms
wird nur noch von der IP des jeweiligen nodes beantwortet. Vor dem Schwenk tauchte dort noch richtigerweise die IP des anderen nodes auf.
lb1$ ping 226.94.1.10 64 bytes from 192.168.1.11: icmp_req=878 ttl=64 time=0.021 ms 64 bytes from 192.168.1.12: icmp_req=879 ttl=64 time=0.020 ms
Das ganze hat mich schon sehr (sehr) genervt.
Nun zur recht „einfachen“ Lösung.
Die corosync.conf wird folgendermaßen angepasst:
... interface { member { memberaddr: 192.168.1.11 } member { memberaddr: 192.168.1.12 } # The following values need to be set based on your environment ringnumber: 0 bindnetaddr: 192.168.1.0 mcastport: 5405 } transport: udpu ...
ttl habe ich dabei extra nicht gesetzt. Multicast wird so nicht mehr genutzt und ein broadcast ins ganze Netz findet (hoffentlich) nicht statt. Seit den Anpassungen gab es keinerlei Probleme mehr mit schwenken von Ressourcen.
Notizen:
echo "0" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
nicht vergessen