Как контролировать кластер Pacemaker с помощью сценария?

Я создал двухузловой кластер (оба узла RHEL 7), используя кардиостимулятор . Он используется для запуска пользовательского приложения. Я создал следующие ресурсы и назначил их кластеру:

  1. Общее хранилище для данных приложения
  2. Виртуальный IP-адрес

Он отлично работает.

Теперь у нас есть требование. В настоящее время аварийное переключение происходит только в том случае, если что-то пойдет не так со всем сервером. 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

Но когда этот фиктивный ресурс запускается / останавливается (посредством ручного переключения при отказе), сценарий не выполняется. Пробовал разные вещи, но я все еще не могу понять причину этого. Нужна помощь, чтобы найти причину, по которой сценарии не выполняются автоматически во время переключения при отказе.

0
14.06.2017, 19:42
1 ответ

Вместо того, чтобы пытаться модифицировать фиктивный 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.

2
28.01.2020, 02:33

Теги

Похожие вопросы