напоминаю про наш предыдущий разговор (на всякий случай) и новая порция данных для размышления...
обнаружил странную вещь.
объект мониторинга: двухузловой актив-актив кластер с MSSQL. на его обеих нодах крутятся по одному SQL-инстансу, в случае обвала одной из нод оба инстанса начинают работать на одной ноде.
мы отслеживаем, что:
1) инстансы вообще живы.
2) оба инстанса не запущены на одной ноде одновременно, если так- слать аларм оператору.
3) состояние кластерных ресурсных групп в норме.
с 3) нет проблем, всё отслеживается отлично. получаю сообщения о переезде ресурсных групп с ноды на ноду.
с 2) возникает периодически проблема. я не знаю, почему оно так, но Condition, созданный для слежения за расположением инстансов, постоянно "залипает". т.е. реакция на нормальное расположение инстансов (один инстанс-одна нода) происходит либо с ооочень большим замедлением (могут сутки пройти, прежде чем монитр чухнется, что всё уже ок, что выполняется условие "один истанс-одна нода"), либо не происходит вообще. приходится руками передёргивать мониторинг.
вот скрипт используемый в Condition: (($1 == 0) && ($2 == 0)) || (($3 == 0) && ($4 == 0))
... где $1-$4 это:
на ноде NODE1
1 - System.ServiceState(MSSQL$INST1) - Associate with cluster resource "INST1 Cluster Group"
2 - System.ServiceState(MSSQL$INST2) - Associate with cluster resource "INST2 Cluster Group"
на ноде NODE2
3 - System.ServiceState(MSSQL$INST2) - Associate with cluster resource "INST2 Cluster Group"
4 - System.ServiceState(MSSQL$INST1) - Associate with cluster resource "INST1 Cluster Group"
может и я чтото напутал при создании DCI, но что-то как-то странно всё...
очень подозрительно выглядит вот что: при использовании в указанной ситуации двух DCI типа System.ServiceState(MSSQL$INST1) и System.ServiceState(MSSQL$INST2), когда оба MSSQL$INSTN приписаны каждый к своей кластерной группе (Asociate with cluster resource) на обих нодах нормально работает только по одному DCI.
на каждой ноде работает (регулярно опрашивает) только тот DCI, который связан с кластерной группой, которая, в свою очередь, в данный момент находится именно на ЭТОЙ ноде. второй же ... второй же может сутками, неделями и месяцами не проверяться (я не уловил закономерности). и это не смотря на то, что в случае перемещения инстанса со своей ноды на соседнюю, Condition помечает весь кластер как сбойный.
и получается что при ручном перемещении инстанса обратно на починеную ноду, повторного ПОЛНОГО переопроса кластера не производится. и статус Warning так и висит на Condition'е и кластере.
и вот ещё один вопрос: (по пункту 1)) - можно ли мониторить состояние кластерных ИМЕННО СЕРВИСОВ? и помечать СЕРВИСЫ типа ...
на ноде NODE1
1 - System.ServiceState(MSSQL$INST1) - Associate with cluster resource "INST1 Cluster Group"
2 - System.ServiceState(MSSQL$INST2) - Associate with cluster resource "INST2 Cluster Group"
на ноде NODE2
3 - System.ServiceState(MSSQL$INST2) - Associate with cluster resource "INST2 Cluster Group"
4 - System.ServiceState(MSSQL$INST1) - Associate with cluster resource "INST1 Cluster Group"
... сбойными, как любой стандартный DCI, через трешолды?
Иди это не возможно, потому что каждый такой сервис приписан в DCI к кластерной группе?
ЕСЛИ КОРОЧЕ
при использовании Condition, отслеживающего расположение инстансов так (($1 == 0) && ($2 == 0)) || (($3 == 0) && ($4 == 0)), для кластера с двумя нодами на каждой из которых запущено по одному инстансу, ЕСЛИ указанное условие перестаёт выполняться (расположение приходит в норму), Кластер может очень долго возвращаться в нормальное состояние, поскольку не происходит полного переопроса всех связанных с кластером DCI.
не удаётся мониторить состояние инстансов НАПРЯМУЮ, поскольку они могут находиться на любой из нод кластера. и соответственно, нельзя использовать прямой мониторинг через DCI с конкретным указанием на инстансы.
правильное положение:
(($1 == 0) && ($2 !== 0)) || (($3 == 0) && ($4 !== 0))
неправильное положение:
(($1 == 0) && ($2 == 0)) || (($3 == 0) && ($4 == 0))
но положение типа (($1 == 0) && ($2 == 0)) || (($3 == 0) && ($4 == 0)) хоть и считается не правильным для кластера, но оно может быть необходимо на время реанимации упавшей ноды. но при этом КАК в это время мониторить здоровье инстансов $1 и $2 или $3 и $4, когда они на одной ноде?
может эти DCI всё же можно вынести на уровень КЛАСТЕРА?