Existe uma maneira de forçar o batimento cardíaco a adicionar novos endereços IP ao sistema sem uma reinicialização completa?

8

Utilizamos batimentos cardíacos para alta disponibilidade. Gostaria de adicionar um endereço IP adicional ao cluster de pulsação, mas não quero fazer uma reinicialização completa do cluster no processo. Existe um sinal que eu possa enviar à pulsação que o solicite a analisar novamente o arquivo "haresources" e a ação sobre ele? heartbeat -r não parece fazer o truque.

Peter Grace
fonte

Respostas:

6

O problema foi que não esperei muito tempo depois de executar "heartbeat -r" (o comando que é executado no script init.d quando você executa "service heartbeat reload".) Depois de alguns minutos, o IP apareceu em a interface conforme o esperado.

Peter Grace
fonte
Os batimentos cardíacos aplicam a mudança em si, eh? Isso realmente tem um quociente de sucção muito baixo! Se você descobrir quanto tempo leva-nos :-)
voretaq7
Percebi depois de ler este comentário que era bastante enganador; Coloquei a resposta inteira em sigilo e a reescrevi.
22612 Peter Peter Grace
mmh, isso é mais sensato - você precisa ativar a recarga, mas não é instantâneo. (E é mais determinista, o que me faz feliz.)
voretaq7
2

Você não precisa recarregar o Heartbeat. Basta adicionar o novo recurso IPaddr ao seu arquivo haresources, algo como isto

IPaddr::xx.xx.xx.xx

e então inicie

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

Obviamente, você deve certificar-se de emitir o IPaddr start no nó ativo. Agora você deve poder enviar e receber tráfego no endereço IP adicionado recentemente.

Kendall
fonte
Vou deixar de aceitar minha própria resposta como correta, pois mesmo que o que fiz tenha funcionado, sua sugestão parece consideravelmente mais elegante. Quero experimentá-lo, mas se funcionar, a resposta positiva e a votação positiva serão suas.
Peter Grace
OK, aqui está o acordo. Eu tentei isso e baixo e eis que funcionou! O problema é que fazer isso sem recarregar a pulsação deixaria o cluster em um estado inconsistente. Eu verifiquei a fonte e há apenas três locais em que a pulsação do coração repara novamente o arquivo haresources, e todas essas três condições ocorrem durante uma reinicialização solicitada. Como tal, se um cluster fizesse failover e failback, o ip que você colocou em haresources e instanciado manualmente com IPaddr <x> start, não seria recriado no failover. Sinta-se à vontade para provar que estou errado, mas parece que esse método é perigoso.
Peter Grace
Muito bem, o Heartbeat não mantém os arquivos de configuração (por exemplo, haresources) sincronizados para você - você deve criar seu próprio método. No meu ambiente, normalmente usamos uníssono para isso, e parece funcionar bem. O arquivo haresources não é armazenado em cache e, portanto, é lido novamente quando precisa ser lido. Quaisquer entradas nos recursos de fontes serão iniciadas nos eventos de reinicialização (ou eventos que fazem com que as fontes de recursos sejam lidas); isso inclui failover.
Kendall
0

O Hearbeat somente precisa ser reiniciado na máquina secundária, evitando, portanto, qualquer tempo de inatividade relacionado ao gerenciamento de recursos.

Nesse caso, o nó primário detecta que a máquina escrava está 'inoperante' e força um 'failover' que recarrega o arquivo de recursos e inicia os recursos ausentes.

Os logs são bastante explícitos ao fazer isso:

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
fonte