¿Hay alguna forma de forzar los latidos para agregar nuevas direcciones IP al sistema sin un reinicio completo?

8

Utilizamos heartbeat para alta disponibilidad. Me gustaría agregar una dirección IP adicional al clúster de latidos, pero no quiero reiniciar por completo el clúster en el proceso. ¿Hay alguna señal que pueda enviar a heartbeat que le pida que vuelva a analizar el archivo "haresources" y actúe sobre él? heartbeat -r no parece hacer el truco.

Peter Grace
fuente

Respuestas:

6

El problema era que no esperé lo suficiente después de ejecutar "heartbeat -r" (el comando que se ejecuta en el script init.d cuando ejecuta "service heartbeat reload"). Después de unos minutos, la IP apareció en La interfaz como se esperaba.

Peter Grace
fuente
Heartbeat aplica el cambio en sí ¿eh? ¡Eso en realidad tiene un cociente de succión muy bajo! Si descubre cuánto tiempo tarda, háganos saber :-)
voretaq7
Me di cuenta después de leer este comentario que era bastante engañoso; Desnudé toda la respuesta y la reescribí.
Peter Grace
mmh, eso es más sensato: tienes que activar la recarga, pero no es instantáneo. (Y es más determinista, lo que me hace feliz.)
voretaq7
2

No necesita volver a cargar Heartbeat en absoluto. Simplemente agregue el nuevo recurso IPaddr a su archivo de recursos, algo como esto

IPaddr::xx.xx.xx.xx

y luego comenzarlo

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

Por supuesto, debe asegurarse de emitir el inicio de IPaddr en el nodo activo. Ahora debería poder enviar y recibir tráfico en la dirección IP recién agregada.

Kendall
fuente
Voy a esperar a aceptar mi propia respuesta como correcta, ya que aunque lo que hice funcionó, su sugerencia suena considerablemente más elegante. Quiero probarlo, pero si funciona, el voto y la respuesta aceptados serán suyos.
Peter Grace
OK, este es el trato. Lo intenté y bajo y he aquí, ¡funcionó! El problema es que hacer esto sin volver a cargar los latidos dejaría el clúster en un estado inconsistente. Verifiqué la fuente, y solo hay tres lugares donde heartbeat analiza el archivo de recursos, y las tres condiciones son durante un reinicio solicitado. Como tal, si un clúster tuviera conmutación por error y recuperación por error, la ip que coloque en los recursos y que se instanciara manualmente con IPaddr <x> start no se volvería a crear en la conmutación por error. No dudes en demostrarme que estoy equivocado, pero parece que es peligroso confiar en este método.
Peter Grace
Muy bien, Heartbeat no mantiene los archivos de configuración (por ejemplo, recursos de recursos) sincronizados para usted; tiene que idear su propio método. En mi entorno, generalmente usamos unísono para esto, y parece funcionar bien. El archivo de recursos no se almacena en caché y, por lo tanto, se lee de nuevo cuando es necesario leerlo. Cualquier entrada en recursos de recursos se iniciará en eventos de reinicio (o eventos que causen la lectura de recursos de recursos); Esto incluye la conmutación por error.
Kendall
0

Hearbeat solo debe reiniciarse en la máquina secundaria, evitando así cualquier tiempo de inactividad relacionado con la gestión de recursos.

En este caso, el nodo primario detecta que la máquina esclava está "muerta" y fuerza una "conmutación por error" que recarga el archivo de recursos e inicia los recursos faltantes.

Los registros son bastante explícitos al hacer esto:

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
fuente