Ad Widget

Collapse

Отказоустойчивость серверов в Zabbix 6.0 и проверка их на Active-Standby

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • staybox
    Junior Member
    • Dec 2021
    • 8

    #1

    Отказоустойчивость серверов в Zabbix 6.0 и проверка их на Active-Standby

    Добрый день коллеги!

    Думаю использовать высокую доступность в Zabbix 6.0. Возникли следующие вопросы, на которые не смог найти ответа:
    1. Сколько необходимо разворачивать нод Zabbix 6.0 для того чтобы ему был не страшен Split Brain? 3? В документации об этом нигде не написано. Показан пример что можно 2, а можно 3 ноды развернуть. Но пока что не понятно как будет Zabbix обратывать ситуацию со Split Brain, например при 2 серверах, и будет ли нормально отрабатывать при такой ситуации с 3 серверами. Кто знает, подскажите пожалуйста.
    2. Хочется поставить перед фронтедном Zabbix 6.0, 2 HA Proxy, и надо как то проверять статус у серверов Zabbix, кто Active а кто Standby. В доке написано что можно проверять либо через веб статус ноды (но это получается надо парсить страницу если проверять с HAProxy) или через лог файл, ну такое себе честно говоря. Кто нибудь знает как можно это сделать по другому, проще чтоли? например через API.

    Спасибо!
  • Kos
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • Aug 2015
    • 3405

    #2
    1. Вопрос задавался на минувшем вебинаре (17.02.2022), и отвечал на него сам Алексей Владышев. Ответ был: отказоустойчивость в кластерной конфигурации обеспечивается только для компонентов самого сервера Zabbix. В любом случае требуется, чтобы была отказоустойчивой его база данных; но это решается уже средствами СУБД. Другими словами: располагаете базу данных на кластере таким способом, как удобно вашему DBA (Zabbix это никак не оговаривает), после чего экземпляры процесса сервера Zabbix обращаются к этой общей базе и через неё, в том числе, общаются друг с другом. Ситуации Split Brain в такой конфигурации быть не может (кто от базы отвалился, тот и проиграл).

    2. Если под фронтендом понимается веб-интерфейс Zabbix, то он сам умеет определять, какая из нод кластера является активной (тем же способом: обращаясь к базе). А зачем это нужно знать HA Proxy? Ей нужно знать, какой из экземпляров веб-интерфейса живой, а не какая из нод кластера активна.

    Comment

    • staybox
      Junior Member
      • Dec 2021
      • 8

      #3
      Спасибо за ответ.
      По СУБД понятно.

      Имел ввиду если например два Zabbix фронтенда и между ними происходит потеря связи. Кто будет в режиме Active? На какой сервер HAProxy должен направлять запросы тогда? Standby будет ли их обрабатывать? HAProxy это надо я полагаю знать чтобы отравлять запросы только на Active фронтенд сервер.

      Уточните пожалуйста.

      Comment

      • Kos
        Senior Member
        Zabbix Certified SpecialistZabbix Certified Professional
        • Aug 2015
        • 3405

        #4
        Фронтенд общается с базой данных (преимущественно) и немного с самим сервером Zabbix (активной нодой). Он не общается с другими экземплярами фронтенда.
        Возможно, я ошибаюсь, но не вижу потенциальных проблем в том, чтобы поднять несколько фронтендов одновременно - например, для распределения нагрузки между ними.

        Comment

        • staybox
          Junior Member
          • Dec 2021
          • 8

          #5
          Под фронтендом я понимаю сам Zabbix сервер с веб-интерфейсом (БД на другом сервере). В документации написано что ноды между собой хертбитятся - https://www.zabbix.com/documentation...epts/server/ha.
          Вот как это выглядит в веб-интерфейсе - https://assets.zabbix.com/img/6.0/hi...y_1200_477.png (https://www.zabbix.com/ru/whats_new_6_0)

          Comment

          • Kos
            Senior Member
            Zabbix Certified SpecialistZabbix Certified Professional
            • Aug 2015
            • 3405

            #6
            Originally posted by staybox
            Под фронтендом я понимаю сам Zabbix сервер с веб-интерфейсом (БД на другом сервере).
            Сервер Zabbix, его веб-интерфейс и база данных - это три разных компонента, которые могут быть разнесены даже на физически разные серверы.
            Штатная кластеризация Zabbix относится только к первому из них (процесс сервера Zabbix) и в своей работе полагается на третий (СУБД, предполагая её надёжность).
            Да, ноды кластера Zabbix (т.е. процессы сервера Zabbix) хертбитятся между собой (если это можно так назвать) - путём постоянного обновления служебной таблички в базе данных и отслеживания через неё состояния друг друга.
            К этой же табличке обращается и веб-интерфейс, чтобы: а) отрисовать картинку, на которую Вы сослались; б) понять, которая из нод кластера является активной сейчас.
            Повторюсь, что при такой архитектуре я не вижу препятствий для того, чтобы поднять несколько экземпляров веб-интерфейсов (например, по одному на каждой ноде) и пользоваться ими одновременно.
            Опять же повторюсь - возможно, я ошибаюсь, и на самом деле такие препятствия есть; но пока о них никто не заявил.

            Comment

            • staybox
              Junior Member
              • Dec 2021
              • 8

              #7
              Спасибо большое за подробный ответ.
              Мне интересно:
              1. Что будет если при наличии двух нод zabbix сервера (там где процесс сервера Zabbix) в режиме кластера произойдет потеря связи между нодами. Кто будет Active? В других системах где используются кластерные решения, для предотвращения ситуации Split Brain используются нечетное количество нод (3,5), в этом случае это ситуация исключена. Мне интересно как будет работать Zabbix сервер в этой ситуации (об этом нигде нет информации).
              2. Чтобы отправлять пользователей на только активную ноду, надо как то проверять какая конкретно нода является активной. И мне интересно как оптимальнее всего это делать. В моей конфигурации не планируется разделять веб-интерфейс и процесс zabbix сервера.

              Comment

              • Kos
                Senior Member
                Zabbix Certified SpecialistZabbix Certified Professional
                • Aug 2015
                • 3405

                #8
                1. Связь между нодами не может пропасть, т.к. её и так нет. Есть связь каждой отдельной ноды с сервером базы данных. У кого она пропала - тот и проиграл.

                2. Каких пользователей вы хотите отправлять? Пользователями нод кластера являются: работающие в активном режиме агенты, активные прокси и веб-интерфейс Zabbix; все они - начиная с шестой версии, умеют находить активную ноду самостоятельно (при правильном конфиге). Есть ещё утилита zabbix_sender, про её способности в данном отношении ничего не знаю.
                А есть пользователи веб-интерфейса. Но про веб-интерфейс я уже говорил: там нет понятия "активной ноды", поднимаете несколько экземпляров веб-интерфейса и работаете с любым.

                Comment

                • staybox
                  Junior Member
                  • Dec 2021
                  • 8

                  #9
                  1. Понятно
                  2. Имею ввиду пользователей которые заходят в веб-интерфейс. Мне хотелось сделать так чтобы перед Zabbix серверами (которые будут включать как веб-интерфейс так и процессы Zabbix сервера) стояло 2 HAProxy, которые бы определяли активную ноду, потому как написано в документации, пассивная нода прекращает всю обработку и переходит в резервный режим. Есть желание сделать чтобы 2 Zabbix сервера были доступны по одному имени и поэтому появляются 2 HAProxy. Задумка у меня есть такая. Или это не совсем правильно?

                  Спасибо за ваши ответы.

                  Comment

                  • Kos
                    Senior Member
                    Zabbix Certified SpecialistZabbix Certified Professional
                    • Aug 2015
                    • 3405

                    #10
                    Т.е. Вы хотите, чтобы ваш HAProxy направлял запросы пользователей на тот экземпляр веб-интерфейса, который работает там же, где и активная нода сервера Zabbix.
                    Не знаю, для чего Вам это нужно, но хотя бы стало понятно, чего Вы пытаетесь добиться: понять, как определить, которая из нод является активной.
                    Я не знаю, как это делать; но могу только высказать некоторые предположения:
                    • проверять, на какой из нод доступен порт 10051 (стандартный порт для приёма входящих соединений на сервере Zabbix);
                    • временно включить в себя в группу Debug и посмотреть, какие запросы используются веб-интерфейсом Zabbix при отрисовке экрана состояния кластера (какие именно API и запросы к базе).

                    Comment

                    Working...