Gibt es eine Möglichkeit, Heartbeat zu zwingen, dem System ohne vollständigen Neustart neue IP-Adressen hinzuzufügen?

8

Wir nutzen den Herzschlag für Hochverfügbarkeit. Ich möchte dem Heartbeat-Cluster eine zusätzliche IP-Adresse hinzufügen, möchte dabei jedoch keinen vollständigen Neustart des Clusters durchführen. Gibt es ein Signal, das ich an Heartbeat senden kann und das ihn dazu veranlasst, die "Haresources" -Datei erneut zu analysieren und darauf zu reagieren? Herzschlag -r scheint den Trick nicht zu tun.

Peter Grace
quelle

Antworten:

6

Das Problem war, dass ich nicht lange genug gewartet habe, nachdem ich "heartbeat -r" ausgeführt habe (der Befehl, der im Skript init.d ausgeführt wird, wenn Sie "service heartbeat reload" ausführen). Nach einigen Minuten wurde die IP angezeigt die Schnittstelle wie erwartet.

Peter Grace
quelle
Herzschlag wendet die Änderung selbst an, oder? Das hat tatsächlich einen sehr niedrigen Saugquotienten! Wenn Sie herausfinden, wie lange es dauert, lassen Sie es uns wissen :-)
voretaq7
Nachdem ich diesen Kommentar gelesen hatte, wurde mir klar, dass er ziemlich irreführend war. Ich habe die gesamte Antwort mit Atomwaffen versehen und neu geschrieben.
Peter Grace
mmh, das ist sinnvoller - Sie müssen das Neuladen auslösen, aber es ist nicht sofort. (Und es ist deterministischer, was mich glücklich macht.)
voretaq7
2

Sie müssen Heartbeat überhaupt nicht neu laden. Fügen Sie einfach die neue IPaddr-Ressource zu Ihrer Haresources-Datei hinzu

IPaddr::xx.xx.xx.xx

und dann starten

/etc/ha.d/resource.d/IPaddr xx.xx.xx.xx start

Natürlich sollten Sie sicherstellen, dass der IPaddr-Start auf dem aktiven Knoten ausgegeben wird. Sie sollten nun in der Lage sein, Datenverkehr über die gerade hinzugefügte IP-Adresse zu senden und zu empfangen.

Kendall
quelle
Ich werde mich zurückhalten, um meine eigene Antwort als richtig zu akzeptieren, denn obwohl das, was ich getan habe, funktioniert hat, klingt Ihr Vorschlag wesentlich eleganter. Ich möchte es ausprobieren, aber wenn es funktioniert, liegt die positive und akzeptierte Antwort bei Ihnen.
Peter Grace
OK, hier ist der Deal. Ich habe es versucht und leise und siehe da, es hat funktioniert! Das Problem ist, dass dies ohne erneutes Laden des Herzschlags den Cluster in einem inkonsistenten Zustand belassen würde. Ich habe die Quelle überprüft, und es gibt nur drei Stellen, an denen Heartbeat die Haresources-Datei erneut analysiert, und alle drei dieser Bedingungen treten während eines angeforderten Neustarts auf. Wenn ein Cluster ein Failover und ein Failback durchführen würde, würde die IP-Adresse, die Sie in Haresources eingegeben und manuell mit IPaddr <x> start instanziiert haben, im Failover nicht neu erstellt. Fühlen Sie sich frei, mir das Gegenteil zu beweisen, aber es scheint gefährlich, sich auf diese Methode zu verlassen.
Peter Grace
Ganz richtig, Heartbeat hält die Konfigurationsdateien (z. B. Haresources) nicht für Sie synchron - Sie müssen Ihre eigene Methode entwickeln. In meiner Umgebung verwenden wir normalerweise unisono, und es scheint gut zu funktionieren. Die Haresources-Datei wird nicht zwischengespeichert und daher neu gelesen, wenn sie gelesen werden muss. Alle Einträge in haresources werden beim Neustart Ereignisse gestartet werden (oder Ereignisse , die Ursache haresources gelesen werden); Dies schließt ein Failover ein.
Kendall
0

Hearbeat muss nur auf dem sekundären Computer neu gestartet werden, um Ausfallzeiten im Zusammenhang mit der Ressourcenverwaltung zu vermeiden.

In diesem Fall erkennt der Primärknoten, dass der Slave-Computer "tot" ist, und erzwingt ein "Failover", bei dem die Ressourcendatei neu geladen und die fehlenden Ressourcen gestartet werden.

Die Protokolle sind dabei ziemlich explizit:

May  9 12:10:40 gw2 heartbeat: [3684]: info: Received shutdown notice from 'gw1'.
May  9 12:10:40 gw2 heartbeat: [3684]: info: Resources being acquired from gw1.
May  9 12:10:40 gw2 heartbeat: [26469]: debug: notify_world: setting SIGCHLD Handler to SIG_DFL
May  9 12:10:40 gw2 harc[26469]: info: Running /etc/ha.d//rc.d/status status
May  9 12:10:40 gw2 mach_down[26521]: info: /usr/share/heartbeat/mach_down: nice_failback: foreign resources acquired
May  9 12:10:40 gw2 mach_down[26521]: info: mach_down takeover complete for node gw1.
May  9 12:10:40 gw2 heartbeat: [3684]: info: mach_down takeover complete.
May  9 12:10:40 gw2 heartbeat: [3684]: debug: StartNextRemoteRscReq(): child count 1
May  9 12:10:40 gw2 IPaddr2[26520]: INFO:  Running OK
May  9 12:10:40 gw2 IPaddr2[26640]: INFO:  Running OK
May  9 12:10:40 gw2 IPaddr2[26725]: INFO:  Running OK
May  9 12:10:40 gw2 IPaddr2[26805]: INFO:  Running OK
May  9 12:10:40 gw2 IPaddr2[26890]: INFO:  Resource is stopped
May  9 12:10:40 gw2 heartbeat: [26470]: info: Local Resource acquisition completed.
May  9 12:10:40 gw2 heartbeat: [3684]: debug: StartNextRemoteRscReq(): child count 1
May  9 12:10:40 gw2 heartbeat: [26953]: debug: notify_world: setting SIGCHLD Handler to SIG_DFL
May  9 12:10:40 gw2 harc[26953]: info: Running /etc/ha.d//rc.d/ip-request-resp ip-request-resp
May  9 12:10:40 gw2 ip-request-resp[26953]: received ip-request-resp IPaddr2::1.2.3.4 OK yes
May  9 12:10:40 gw2 ResourceManager[26976]: info: Acquiring resource group: gw2 IPaddr2::1.2.3.4
May  9 12:10:40 gw2 IPaddr2[27006]: INFO:  Resource is stopped
May  9 12:10:40 gw2 ResourceManager[26976]: info: Running /etc/ha.d/resource.d/IPaddr2 1.2.3.4 start
May  9 12:10:40 gw2 IPaddr2[27115]: INFO: ip -f inet addr add 1.2.3.4/24 brd 1.2.3.255 dev brwan
May  9 12:10:40 gw2 IPaddr2[27115]: INFO: ip link set brwan up
May  9 12:10:40 gw2 IPaddr2[27115]: INFO: /usr/lib/heartbeat/send_arp -i 200 -r 5 -p /var/run/resource-agents/send_arp-1.2.3.4 brwan 1.2.3.4 auto not_used not_used
May  9 12:10:40 gw2 IPaddr2[27091]: INFO:  Success

May  9 12:10:47 gw2 heartbeat: [3684]: WARN: node gw1: is dead
May  9 12:10:47 gw2 heartbeat: [3684]: info: Dead node gw1 gave up resources.
May  9 12:10:47 gw2 heartbeat: [3684]: info: Link gw1:eth0 dead.

May  9 12:10:59 gw2 heartbeat: [3684]: info: Heartbeat restart on node gw1
May  9 12:10:59 gw2 heartbeat: [3684]: info: Link gw1:eth0 up.
May  9 12:10:59 gw2 heartbeat: [3684]: info: Status update for node gw1: status init
May  9 12:10:59 gw2 heartbeat: [3684]: info: Status update for node gw1: status up
May  9 12:10:59 gw2 heartbeat: [3684]: debug: StartNextRemoteRscReq(): child count 1
May  9 12:10:59 gw2 heartbeat: [28604]: debug: notify_world: setting SIGCHLD Handler to SIG_DFL
May  9 12:10:59 gw2 heartbeat: [3684]: debug: get_delnodelist: delnodelist= 
May  9 12:10:59 gw2 harc[28604]: info: Running /etc/ha.d//rc.d/status status
May  9 12:10:59 gw2 heartbeat: [3684]: info: Status update for node gw1: status active
May  9 12:10:59 gw2 heartbeat: [3684]: debug: StartNextRemoteRscReq(): child count 1
May  9 12:10:59 gw2 heartbeat: [28619]: debug: notify_world: setting SIGCHLD Handler to SIG_DFL
May  9 12:10:59 gw2 harc[28619]: info: Running /etc/ha.d//rc.d/status status
May  9 12:10:59 gw2 heartbeat: [28634]: debug: notify_world: setting SIGCHLD Handler to SIG_DFL
May  9 12:10:59 gw2 harc[28634]: info: Running /etc/ha.d//rc.d/status status
May  9 12:11:00 gw2 heartbeat: [3684]: info: remote resource transition completed.
Cyril Bouthors
quelle