Я создал двухузловой кластер (оба узла RHEL 7), используя кардиостимулятор
. Он используется для запуска пользовательского приложения. Я создал следующие ресурсы и назначил их кластеру:
Он отлично работает.
Теперь у нас есть требование. В настоящее время аварийное переключение происходит только в том случае, если что-то пойдет не так со всем сервером. Pacemaker не знает о статусе приложения, запущенного на активном узле, и полностью его игнорирует. У нас есть сценарий оболочки, который может запускать проверку работоспособности приложения и возвращать истинные / ложные значения в зависимости от работоспособности приложения.
Может ли кто-нибудь предложить мне, как настроить кардиостимулятор для использования этого сценария оболочки, чтобы регулярно проверять статус приложения на активном узле кластера и инициировать аварийное переключение, если сценарий возвращает ложное значение.
Я видел примеры, в кластерах веб-серверов люди создают образец html-страницы и используют ее ( http://127.0.0.1/samplepage.html
) в качестве ресурса с кардиостимулятором для проверки работоспособности apache. веб-сервер в активном узле.
Подскажите, пожалуйста, как добиться аналогичного результата с помощью сценария оболочки.
Обновление:
Вот моя конфигурация:
[root@node1 ~]# pcs status
Cluster name: webspheremq
Stack: corosync
Current DC: node1 (version 1.1.15-11.el7-e174ec8) - partition with quorum
Last updated: Wed Jun 14 20:38:48 2017 Last change: Tue Jun 13 20:04:58 2017 by root via crm_attribute on svdg-stg29
2 nodes and 3 resources configured: 2 resources DISABLED and 0 BLOCKED from being started due to failures
Online: [ node1 node2 ]
Full list of resources:
Resource Group: websphere
websphere_fs (ocf::heartbeat:Filesystem): Started node1
websphere_vip (ocf::heartbeat:IPaddr2): Started node1
FailOverScript (ocf::heartbeat:Dummy): Started node1
Daemon Status:
corosync: active/enabled
pacemaker: active/enabled
pcsd: active/enabled
Для запуска и остановки приложения у меня есть два сценария оболочки. Во время аварийного переключения мне потребуется остановка .sh
для запуска на узле, с которого будут перемещены ресурсы, и start.sh
для запуска на узле, на который происходит переключение кластера.
Я провел небольшой эксперимент и обнаружил, что люди используют фиктивный ресурс для достижения такого рода требований (для выполнения сценариев во время аварийного переключения).
Вот что я сделал на данный момент:
Я создал фиктивный ресурс ( FailOverScript
) для тестирования скриптов запуска / остановки приложений, как показано ниже:
[root@node1 tmp]# pcs status resources
Resource Group: websphere
websphere_fs (ocf::heartbeat:Filesystem): Started node1
websphere_vip (ocf::heartbeat:IPaddr2): Started node1
**FailOverScript (ocf::heartbeat:Dummy): Started node1**
На данный момент я включил тест скрипты при действиях запуска и остановки ресурса FailOverScript. Он должен выполнять сценарии failoverstartscript.sh и failoverstopscript.sh соответственно, когда этот фиктивный ресурс запускается и останавливается.
[root@node1 heartbeat]# pwd
/usr/lib/ocf/resource.d/heartbeat
[root@node1 heartbeat]#
[root@node1 heartbeat]# grep -A5 "start()" FailOverScript
FailOverScript_start() {
FailOverScript_monitor
/usr/local/bin/failoverstartscript.sh
if [ $? = $OCF_SUCCESS ]; then
return $OCF_SUCCESS
fi
[root@node1 heartbeat]#
[root@node1 heartbeat]#
[root@node1 heartbeat]# grep -A5 "stop()" FailOverScript
FailOverScript_stop() {
FailOverScript_monitor
/usr/local/bin/failoverstopscript.sh
if [ $? = $OCF_SUCCESS ]; then
rm ${OCF_RESKEY_state}
fi
Но когда этот фиктивный ресурс запускается / останавливается (посредством ручного переключения при отказе), сценарий не выполняется. Пробовал разные вещи, но я все еще не могу понять причину этого. Нужна помощь, чтобы найти причину, по которой сценарии не выполняются автоматически во время переключения при отказе.
Вместо того, чтобы пытаться модифицировать фиктивный RA для выполнения произвольных сценариев, вы могли бы рассмотреть возможность использования anything
агента ресурсов -.
# pcs resource describe ocf:heartbeat:anything
ocf:heartbeat:anything - Manages an arbitrary service
This is a generic OCF RA to manage almost anything.
Resource options:
binfile (required): The full name of the binary to be executed.
This is expected to keep running with the
same pid and not just do something and
exit.
cmdline_options: Command line options to pass to the binary
workdir: The path from where the binfile will be executed.
pidfile: File to read/write the PID from/to.
logfile: File to write STDOUT to
errlogfile: File to write STDERR to
user: User to run the command as
monitor_hook: Command to run in monitor operation
stop_timeout: In the stop operation: Seconds to wait for kill
-TERM to succeed before sending kill -SIGKILL.
Defaults to 2/3 of the stop operation timeout.
Вы должны указать агенту anything
свой сценарий в качестве параметра binfile=
, затем, если у вас есть какой-либо способ мониторинга вашего пользовательского приложения, кроме проверки работающего pid (, это то, что агент anything
по умолчанию ), это можно определить в параметре monitor_hook
.