Existe-t-il un moyen de forcer Heartbeat à ajouter de nouvelles adresses IP au système sans redémarrage complet?

8

Nous utilisons le rythme cardiaque pour une haute disponibilité. Je voudrais ajouter une adresse IP supplémentaire au cluster de pulsation, mais je ne veux pas faire un redémarrage complet du cluster dans le processus. Y a-t-il un signal que je peux envoyer à heartbeat qui l'inciterait à ré-analyser le fichier "haresources" et à agir dessus? heartbeat -r ne semble pas faire l'affaire.

Peter Grace
la source

Réponses:

6

Le problème était que je n'ai pas attendu assez longtemps après avoir exécuté "heartbeat -r" (la commande qui est exécutée dans le script init.d lorsque vous exécutez "service heartbeat reload".) Après quelques minutes, l'IP est apparue sur l'interface comme prévu.

Peter Grace
la source
Heartbeat applique le changement lui-même hein? Cela a en fait un quotient de succion très bas! Si vous découvrez le temps qu'il faut, faites-le nous savoir :-)
voretaq7
J'ai réalisé après avoir lu ce commentaire qu'il était plutôt trompeur; J'ai détruit toute la réponse et l'ai réécrite.
Peter Grace
mmh, c'est plus sensé - Vous devez déclencher le rechargement, mais ce n'est pas instantané. (Et c'est plus déterministe, ce qui me rend heureux.)
voretaq7
2

Vous n'avez pas du tout besoin de recharger Heartbeat. Ajoutez simplement la nouvelle ressource IPaddr à votre fichier de ressources, quelque chose comme ça

IPaddr::xx.xx.xx.xx

puis lancez-le

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

Bien sûr, vous devez vous assurer d'émettre le démarrage IPaddr sur le nœud actif. Vous devriez maintenant pouvoir envoyer et recevoir du trafic sur l'adresse IP qui vient d'être ajoutée.

Kendall
la source
Je vais m'arrêter d'accepter ma propre réponse comme correcte, car même si ce que j'ai fait a fonctionné, votre suggestion semble beaucoup plus élégante. Je veux l'essayer, mais si cela fonctionne, le vote positif et la réponse acceptée seront les vôtres.
Peter Grace
OK, voici l'affaire. J'ai essayé cela et bas et voici, cela a fonctionné! Le problème est que le faire sans recharger les pulsations laisserait le cluster dans un état incohérent. J'ai vérifié la source, et il n'y a que trois endroits où Heartbeat analyse le fichier de ressources, et ces trois conditions se produisent lors d'un redémarrage demandé. En tant que tel, si un cluster devait basculer et basculer, l'ip que vous mettez dans les ressources et instanciée manuellement avec IPaddr <x> start, ne serait pas recréée dans le basculement. N'hésitez pas à me prouver le contraire, mais il semble que cette méthode soit dangereuse.
Peter Grace
Très bien, Heartbeat ne conserve pas les fichiers de configuration (par exemple, les ressources) synchronisés pour vous - vous devez concevoir votre propre méthode. Dans mon environnement, nous utilisons généralement l'unisson pour cela, et cela semble bien fonctionner. Le fichier de ressources n'est pas mis en cache et est donc relu lorsqu'il doit être lu. Toutes les entrées dans les ressources de ressources seront démarrées lors des événements de redémarrage (ou les événements qui provoquent la lecture des ressources de ressources); cela inclut le basculement.
Kendall
0

Hearbeat ne doit être redémarré que sur la machine secondaire, évitant ainsi tout temps d'arrêt lié à la gestion des ressources.

Dans ce cas, le nœud principal détecte que la machine esclave est «morte» et force un «basculement» qui recharge le fichier de ressources et démarre les ressources manquantes.

Les journaux sont assez explicites lors de cette opération:

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
la source