Hallo,
ich habe ein Cluster aufgebaut mit insgesamt deutlich über 15 Nodes. Hat auch zu Beginn alles super funktioniert, wir hatten 12 Nodes und alles lief. Haben dann Hardware nachbestellt und nachgeschoben, das heißt es liefen da auf den vorhandenen Nodes auch schon VMs ohne Ende.
Das Cluster besteht eigentlich primär zur einfachen Verwaltung, es gibt kein Ceph und es werden auch seltens irgendwelche VMs irgendwohin migriert.
Ich hatte jedoch HA regeln eingerichtet, sodass VMs auf jeden Fall laufen und auch wieder gestartet werden wenn sie gestoppt werden.
Nun war es soweit und ich habe den 15. Server versucht ins Cluster zu joinen....in dem Moment flog alles auseinander. Mehrere Nodes starteten neu, alle mit HA Regeln. VMs sind gecrasht. Je nachdem welchen Node ich im Browser aufrief sah ich unterschiedliche Status Zustände des Clusters, mal wurden mir die einen Nodes als Offline angezeigt, mal die anderen. Manche Nodes haben auch nur noch sich selbst "gesehen" und alle anderen als Offline.
Ein Blick ins Corosync-Log zeigte dann folgendes eine Menge verlorene Links und ein KNET/pmtud der MTU's ändert.
Ein entfernen des Nodes (runterfahren) brachte keine Besserung mehr. Ich musste dann auf allen Nodes den ARP Cache leeren und plötzlich ging es wieder. Dachte ich mir....OK das war wohl nix. Als ich dann das ganze Chaos beseitigt hatte und alles wieder lief, lies ist den 15. Node aus und installierte den 16. Node ohne eine Ahnung was genau passiert ist. Und das war wieder genau das selbe Spiel. In dem Moment in dem ich ins Cluster joinen wollte crashten zig VMs, die Cluster-Kommunikation ging verloren und so weiter.
Also wieder alles zum Laufen gebracht und recherchiert. Ich fand dann diesen Thread: https://forum.proxmox.com/threads/c...-reboots-as-soon-as-i-join-a-new-node.116804/
Bei mir handelt es sich auch wie bei dem Nutzer im Thread um HPE DL360/380 Gen10 Server. Es gibt zwei (physische) Netzwerke, die jeweils aus einem bond aus zwei Ports bestehen. Das erste Netzwerk ist für die Kommunikation nach außen, das zweite war ein 1Gbit Netzwerk nur für Corosync und die Cluster-Kommunikation.
Hier mal ein Beispiel, wie mein Corosync-Netzwerk konfiguriert war:
Nachdem ich den Thread gefunden habe, hab ich dann das Bonding aufgelöst, hab die Interfaces ohne bond und bridge Konfiguriert und hab jedem Interface eine eigene IP verpasst und sie als link0 und link1 konfiguriert. Ausserdem die MTU auf 9000 gesetzt. Sieht jetzt so aus:
Das ganze Cluster ist jetzt so konfiguriert und installiert und jetzt funktioniert auch alles problemlos mit mehr als 15 Nodes.
So im dem verlinkten Thread wird jetzt spekuliert, dass es dort dadurch verursacht wird, dass durch die zusätzlichen Nodes das Netzwerk überlastet wird, da dort Storage und Corosync auch das selbe Netzwerk teilen. Das ist bei mir nicht der Fall. Aber das mit den springenden MTUs ist sehr wohl der Fall. Als Workaround empfiehlt @fabian den Parameter netmtu zu verwenden. Wenn ich das richtig lese ist das aber in der aktuellen Version von corosync absolet, denn das ganze KNET Zeug kam dazu und es gibt diesen Parameter so nicht mehr.
Ich versteh auch nicht so ganz wie ein 1 Gbit Netzwerk nur mit 15 Nodes die im Cluster miteinander sprechen, überlastet sein soll.
Ich schätze es hat irgendwas mit dem OVS bond zu tun gehabt, denn seitdem ich das raus genommen habe, kam auch keinerlei Meldung mehr von KNET/pmtud das irgendwelche MTUs geändert werden. Solche Meldungen gab es allerdings davor schon zu Hauf, auch ohne das irgendwas kaputt ging.
Versteht Jemand was hier passiert ist und wie sich das verhindern lässt? Ist Bonding auf dem Corosync Interface einfach eine dumme Idee?
ich habe ein Cluster aufgebaut mit insgesamt deutlich über 15 Nodes. Hat auch zu Beginn alles super funktioniert, wir hatten 12 Nodes und alles lief. Haben dann Hardware nachbestellt und nachgeschoben, das heißt es liefen da auf den vorhandenen Nodes auch schon VMs ohne Ende.
Das Cluster besteht eigentlich primär zur einfachen Verwaltung, es gibt kein Ceph und es werden auch seltens irgendwelche VMs irgendwohin migriert.
Ich hatte jedoch HA regeln eingerichtet, sodass VMs auf jeden Fall laufen und auch wieder gestartet werden wenn sie gestoppt werden.
Nun war es soweit und ich habe den 15. Server versucht ins Cluster zu joinen....in dem Moment flog alles auseinander. Mehrere Nodes starteten neu, alle mit HA Regeln. VMs sind gecrasht. Je nachdem welchen Node ich im Browser aufrief sah ich unterschiedliche Status Zustände des Clusters, mal wurden mir die einen Nodes als Offline angezeigt, mal die anderen. Manche Nodes haben auch nur noch sich selbst "gesehen" und alle anderen als Offline.
Ein Blick ins Corosync-Log zeigte dann folgendes eine Menge verlorene Links und ein KNET/pmtud der MTU's ändert.
Ein entfernen des Nodes (runterfahren) brachte keine Besserung mehr. Ich musste dann auf allen Nodes den ARP Cache leeren und plötzlich ging es wieder. Dachte ich mir....OK das war wohl nix. Als ich dann das ganze Chaos beseitigt hatte und alles wieder lief, lies ist den 15. Node aus und installierte den 16. Node ohne eine Ahnung was genau passiert ist. Und das war wieder genau das selbe Spiel. In dem Moment in dem ich ins Cluster joinen wollte crashten zig VMs, die Cluster-Kommunikation ging verloren und so weiter.
Also wieder alles zum Laufen gebracht und recherchiert. Ich fand dann diesen Thread: https://forum.proxmox.com/threads/c...-reboots-as-soon-as-i-join-a-new-node.116804/
Bei mir handelt es sich auch wie bei dem Nutzer im Thread um HPE DL360/380 Gen10 Server. Es gibt zwei (physische) Netzwerke, die jeweils aus einem bond aus zwei Ports bestehen. Das erste Netzwerk ist für die Kommunikation nach außen, das zweite war ein 1Gbit Netzwerk nur für Corosync und die Cluster-Kommunikation.
Hier mal ein Beispiel, wie mein Corosync-Netzwerk konfiguriert war:
Code:
auto bond1
iface bond1 inet manual
ovs_bonds eno1 eno2
ovs_type OVSBond
ovs_bridge vmbr1
ovs_options bond_mode=active-backup
auto vmbr1
iface vmbr1 inet static
address 172.16.0.1/24
ovs_type OVSBridge
ovs_ports bond1
Nachdem ich den Thread gefunden habe, hab ich dann das Bonding aufgelöst, hab die Interfaces ohne bond und bridge Konfiguriert und hab jedem Interface eine eigene IP verpasst und sie als link0 und link1 konfiguriert. Ausserdem die MTU auf 9000 gesetzt. Sieht jetzt so aus:
Code:
auto eno1
iface eno1 inet static
address 172.16.0.1/24
mtu 9000
#Nur Interne Clusterkommunikation
auto eno2
iface eno2 inet static
address 172.16.1.1/24
mtu 9000
#Nur Interne Clusterkommunikation
Das ganze Cluster ist jetzt so konfiguriert und installiert und jetzt funktioniert auch alles problemlos mit mehr als 15 Nodes.
So im dem verlinkten Thread wird jetzt spekuliert, dass es dort dadurch verursacht wird, dass durch die zusätzlichen Nodes das Netzwerk überlastet wird, da dort Storage und Corosync auch das selbe Netzwerk teilen. Das ist bei mir nicht der Fall. Aber das mit den springenden MTUs ist sehr wohl der Fall. Als Workaround empfiehlt @fabian den Parameter netmtu zu verwenden. Wenn ich das richtig lese ist das aber in der aktuellen Version von corosync absolet, denn das ganze KNET Zeug kam dazu und es gibt diesen Parameter so nicht mehr.
Ich versteh auch nicht so ganz wie ein 1 Gbit Netzwerk nur mit 15 Nodes die im Cluster miteinander sprechen, überlastet sein soll.
Ich schätze es hat irgendwas mit dem OVS bond zu tun gehabt, denn seitdem ich das raus genommen habe, kam auch keinerlei Meldung mehr von KNET/pmtud das irgendwelche MTUs geändert werden. Solche Meldungen gab es allerdings davor schon zu Hauf, auch ohne das irgendwas kaputt ging.
Versteht Jemand was hier passiert ist und wie sich das verhindern lässt? Ist Bonding auf dem Corosync Interface einfach eine dumme Idee?