Есть ли способ заставить heartbeat добавлять новые IP-адреса в систему без полного перезапуска?

8

Мы используем биение сердца для высокой доступности. Я хотел бы добавить дополнительный IP-адрес в кластер пульса, но я не хочу делать полный перезапуск кластера в процессе. Есть ли сигнал, который я могу послать в heartbeat, который побудит его повторно проанализировать файл "haresources" и выполнить действия над ним? сердцебиение -r, кажется, не делает трюк.

Питер Грейс
источник

Ответы:

6

Проблема заключалась в том, что я не ждал достаточно долго после выполнения «heartbeat -r» (команды, которая выполняется в сценарии init.d при запуске «service heartbeat reload».) Через несколько минут IP-адрес появился на интерфейс, как и ожидалось.

Питер Грейс
источник
Сердцебиение применяет само изменение, а? Это на самом деле имеет очень низкий коэффициент сосать! Если вы узнаете, сколько времени это займет, дайте нам знать :-)
voretaq7
Прочитав этот комментарий, я понял, что он довольно обманчив; Я обстрелял весь ответ и переписал его.
Питер Грейс
Ммм, это более разумно - вы должны запустить перезагрузку, но это не мгновенно. (И это более детерминистично, что делает меня счастливым.)
voretaq7
2

Вам не нужно перезагружать Heartbeat вообще. Просто добавьте новый ресурс IPaddr в ваш файл haresources, что-то вроде этого

IPaddr::xx.xx.xx.xx

а потом начни

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

Конечно, вы должны обязательно запустить IPaddr на активном узле. Теперь вы сможете отправлять и получать трафик только что добавленного IP-адреса.

Kendall
источник
Я воздержусь от принятия своего собственного ответа как правильного, поскольку, несмотря на то, что я сделал, ваше предложение звучит значительно более элегантно. Я хочу испытать это, но если это сработает, голосование и принятый ответ будут вашими.
Питер Грейс,
Хорошо, вот сделка Я попробовал это и низко и вот, это сработало! Проблема заключается в том, что выполнение этого без перезагрузки пульса приведет к тому, что кластер будет в несовместимом состоянии. Я проверил источник, и есть только три места, где heartbeat анализирует файл haresources, и все три из этих условий находятся во время запрошенного перезапуска. Таким образом, в случае сбоя и восстановления после отказа кластера IP-адрес, введенный вами в haresources и созданный вручную с помощью IPaddr <x> start, не будет воссоздан при восстановлении после сбоя. Не стесняйтесь доказать, что я неправ, но кажется, что на этот метод опасно полагаться.
Питер Грейс,
Совершенно верно, Heartbeat не поддерживает синхронизацию файлов конфигурации (например, haresources) для вас - вы должны разработать свой собственный метод. В моей среде мы обычно используем для этого унисон, и, похоже, это хорошо работает. Файл haresources не кэшируется и, таким образом, читается заново, когда его нужно прочитать. Любые записи в haresources будут запускаться при событиях перезапуска (или событиях, вызывающих чтение haresources); это включает аварийное переключение.
Кендалл
0

Hearbeat должен быть перезапущен только на вторичном компьютере, что позволяет избежать простоев, связанных с управлением ресурсами.

В этом случае первичный узел обнаруживает, что подчиненный компьютер «мертв», и инициирует «аварийное переключение», которое перезагружает файл ресурсов и запускает отсутствующие ресурсы.

Журналы довольно явно при этом:

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.
Кирилл Буторс
источник