Статус панель Серверы онлайн help.miran.ru Помощь lg.miran.ru Looking Glass

Заказ обратного звонка

    Инженерные системы наших дата-центров и их мониторинг, часть первая

    Так исторически сложилось, что «Миран-1» не имел единого мониторинга инженерной инфраструктуры (посыпаем голову пеплом) и стремимся исправить этот недостаток. Посему речь большей частью пойдет о втором дата-центре.

    Я инженер компании «Миран», которая занимается выдачей в аренду различных серверов, размещением клиентского оборудования в своих дата-центрах и прочими подобными делами.

    Меня продолжительное время уговаривали написать обзорную статью о нашей инженерной инфраструктуре и о том, как мы ее мониторим. Статья долго и упорно не хотела появляться на свет, но все же родилась. Поздравьте меня с почином!

    Введение в ЦОДоведение

    Что есть центр обработки данных? Говорим «ЦОД» — представляем себе бескрайние ангары, заполненные бесчисленными рядами стоек с мерно гудящими железками. Железки загадочно перемигиваются разноцветными огоньками из полумрака. С лицевой стороны их обдувает прохладным бризом от промышленных кондиционеров. В холодных зонах можно наотличненько просквозить себе шею и простудиться. Поэтому админы всегда носят свитера.

    Нашей компанией построены два отдельно стоящих дата-центра, бесхитростно именуемые «Миран-1» и «Миран-2». Первый представляет собой вполне привычный тип, с одним большим машинным залом и несколькими поменьше этажом выше. Второй ЦОД представляет из себя ангар, в котором на данный момент установлены два мобильных малых ЦОДа, а также строится третий. Мобильные ЦОДы — двухэтажные конструкции-контейнеры, первый этаж которых есть серверный зал со стойками и кондиционерами, он еще именуется серверным блоком, на втором же смонтированы ВРУ, установлены ИБП и различные щиты управления.

    Так исторически сложилось, что «Миран-1» не имел единого мониторинга инженерной инфраструктуры (посыпаем голову пеплом) и стремимся исправить этот недостаток. Посему речь большей частью пойдет о втором дата-центре.

    Все картинки взяты из нашей системы мониторинга!
    P.S.: фотографии щитов и их внутренностей тоже наши!

    ТП, ВРУ, PDU

    В «Миран-2» реализована система гарантированного электроснабжения (СГЭ). Как видно из схемы ниже, в обычных условиях дата-центр питается от двух независимых внешних вводов от ТП; в случае пропадания напряжения на внешних вводах (а такое у нас иногда случается) — питание идет от дизель-генераторной установки ДГУ2, фактически; под будущий задел предусмотрено место для еще двух.

    Общая мнемосхема ввода электропитания «Миран-2»

    Идем дальше. ВРУ выполнено двухсекционным с секционным выключателем под управлением АВР1. Контроллер АВР замкнет секционник в случае пропадания напряжения на одном или обоих вводах, в последнем случаем через 15 секунд будет дан сигнал на запуск ДГУ. Все эти неприятности «Модуль-1 и «Модуль-2» переживают на своих внутренних ИБП.

    Фото ВРУ «Миран-2»

    Основное назначение секций и их автоматов, помимо питания различных вспомогательных щитов освещения, управления вентиляцией и прочего — исполнять роль вводов электропитания для «Модуль-1» и «Модуль-2» (QF1.1-.2 и QF2.1-.2 на схеме, соответственно). Каждый модульный ЦОД имеет внутри себя свое собственное ВРУ.

    Мнемосхема главного распределительного щита «Модуль-2»
    Фото главного распределительного щита «Модуль-2»
    Мнемосхема энергоблока «Модуль-1»
    Мнемосхема стоек «Модуль-1»

    Большая часть стоек в «Модуль-1» и «Модуль-2» — производителей Rittal и RiT. Из PDU используем: в «Модуль-1» — сборную солянку из Eurolan, APC, DELTA. «Модуль-2» — целиком на PDU фирмы RiT.

    Окунись в прохладу ©

    Все клиентское железо, а также инженерная инфраструктура в процессе своей работы выделяют много тепла. Это тепло необходимо отводить, иначе железо быстро умрет. Отводом у нас занимаются шесть инверторных фреоновых кондиционеров фирмы Daikin. Вся их деятельность гордо называется «фреоновым режимом», который обеспечивает сухой тропический прохладный климат от +15 до +23 С° в холодном коридоре. Данная система охлаждения применяется и в «Модуле-1», и в «Модуле-2».

    Также в «Модуле-1» существует еще один режим охлаждения, «режим фрикулинга». Его должны обеспечивать четыре приточных установки и дюжина вытяжек. В теории. К сожалению, на практике отвод тепла таким образом был не слишком эффективным, если внутри было задействовано чуть больше половины стоек. Поэтому данный режим для первого модульного ЦОДа так и не используется, оставаясь, по сути, резервным.

    Мнемосхема серверного блока «Модуль-1»
    Мнемосхема серверного блока «Модуль-2». Никаких приточек, только хардкор! фреон!

    От клеммного зажима до ПЛК

    Опросом и агрегацией информации от всей периферии дата-центра «Миран-2» занимаются три ПЛК: по одному на «Модуль» и один общий. Эти вундержелезки носят имя небезызвестной компании WAGO.

    Рассмотрим структуру системы опроса на основе решения для «Модуль-2».

    Схема шины ПЛК с модулями, скриншот из WAGO-IO-Check
    Фото щита диспетчеризации «Модуль-2»

    Как видно из схемы, на шине установлен сам ПЛК серии 750-881, четыре дискретных модуля 750-1405 на 16 каналов каждый и один аналоговый модуль 750-455 на четыре канала. Через дискретные модули ПЛК получает данные о состоянии автоматических выключателей питания («сухие» дополнительные контакты) в обеих секциях ГРЩ, о состоянии автоматов в собственном щите, а также о состоянии вентиляции энергоблока. Посредством аналогового модуля — получает данные от двух датчиков температуры и влажности (4-20 мА) здесь же, внутри энергоблока.

    ПЛК также оснащен двумя Ethernet-портами и через них он общается по Modbus TCP/IP с еще несколькими железяками, как то:

    • два вводных автомата фирмы Schneider Electric, от них же получается информация о входных мощностях, напряжениях, токах и прочем;
    • две системы измерения токов фирмы АВВ в тандеме с двумя модулями ввода от фирмы ОВЕН — результатом их совместного труда есть вычисление по-стоечной мощности;
    • контроллеры CAREL и 6 их подопечных — кондиционеры Daikin;
    • и, наконец, младший братик — каплер 750-342 c семью дискретными модулями. Их задача отслеживать состояние 48 выключателей + 12 резервных в серверном блоке на 24 стойки.
    Фото ABB CMS-600 и трансформаторов тока
    Фото ОВЕН МЭ110-220.3М
    Фото ПЛК CAREL
    Фото щита слаботочных систем «Модуль-2»

    Отдельно стоит упомянуть ИБП, они опрашиваются непосредственно SCADA, минуя ПЛК, по SNMP-протоколу.

    Фото ИБП «Модуль-2»

    Вся получаемая информация посредством программы формируется в собственный список Modbus-регистров, которая уже опрашивается SCADA.

    Небольшой кусочек из основной программы:

    (* PLC_A2 *)
    %QX256.0 := A2_1QF1; //присваиваем каждому биту 256го слова
    %QX256.1 := A2_1QF2; //текущее состояние различных автоматов
    %QX256.2 := A2_QS1;
    %QX256.3 := A2_QS2;
    %QX256.4 := A2_3QF1;
    %QX256.5 := A2_3QF2;
    %QX256.6 := A2_3QF3;
    %QX256.7 := A2_3QF4;
    %QX256.8 := A2_3QF5;
    %QX256.9 := A2_3QF6;
    %QX256.10 := A2_3QF7;
    %QX256.11 := A2_3QF8;
    %QX256.12 := A2_3QF9;
    %QX256.13 := A2_3QF10;
    %QX256.14 := A2_KM1;
    %QX256.15 := A2_KM2;
    
    (* QF1 *) //вводной автоматический выключатель № 1
    %QW332 := QF1_I_L1; //токи по фазам
    %QW333 := QF1_I_L2;
    %QW334 := QF1_I_L3;
    %QW335 := QF1_U_L12; //линейные (межфазные) напряжения
    %QW336 := QF1_U_L23;
    %QW337 := QF1_U_L31;
    %QW338 := QF1_U_L1; //фазные (фаза-нуль) напряжения
    %QW339 := QF1_U_L2;
    %QW340 := QF1_U_L3;
    %QW341 := QF1_P_L1; //активная мощность по фазам
    %QW342 := QF1_P_L2;
    %QW343 := QF1_P_L3;
    %QW344 := QF1_P_Sum; //суммарная активная мощность (кВт)
    %QW345 := QF1_Q_L1; //реактивная мощность по фазам
    %QW346 := QF1_Q_L2;
    %QW347 := QF1_Q_L3;
    %QW348 := QF1_Q_Sum; //суммарная реактивная мощность (квар)
    %QW349 := QF1_S_Sum; //полная мощность (кВА)
    %QW350 := QF1_CosF; //коэффициент мощности

    Небольшой кусочек из основной программы:

    
    //Это работа кодогенератора CODESYS, в котором есть удобный настройщик связи
    //с периферией по Modbus TCP/IP. Эта подпрограмма, в частности, отвечает 
    //за получение от ОВЕН МЭ110-220.3М показаний 
    //по трем напряжениям фаза-нейтраль
    
    PROGRAM MBCFG_subCMS_1(* generated by config one prg for each slave *)
    
    VAR_OUTPUT
    U_L1  :  WORD; (**) 
    U_L2  :  WORD; (**) 
    U_L3  :  WORD; (**)
    
    /*--- system variables (read only) ----------------------------------------*/
    MBCFG_IpAddress     :   STRING(12) := 'ХХХ.ХХХ.ХХХ.ХХХ'; //IP-адрес Slave-устройства
    MBCFG_Port          :   UINT := 502;                  //Порт, дефолтный
    MBCFG_UnitID        :   BYTE := 2;                    //ID Slave-устройства
    MBCFG_TimeOut       :   TIME := t#300ms;           //Таймаут на получение ответа
    MBCFG_RequestDelay  :   TIME := t#1000ms;          //Задержка до следующего опроса
    MBCFG_Error         :   MBCFG_eERROR := MBCFG_START_UP;
    MBCFG_LastJob       :   MBCFG_typCOM_JOB;
    /*-------------------------------------------------------------------------*/
    END_VAR
    
    VAR CONSTANT
        zz_VARIABLECOUNT:   INT := 3; (* number of variables  *)
        zz_JOBCOUNT     :   INT := 1; (* number of jobs *)
    END_VAR
    VAR
    
    /*=== VARIABLE LIST =============*/
    zz_VariableList :   ARRAY[1..zz_VARIABLECOUNT] OF MBCFG_typVARIABLE :=
        ( DataType        := MBCFG_TYPE_WORD,  
          ByteOrder       := MBCFG_BYTE_ORDER_0,
          BitSize         := 16,
          ptVar           := 0,
          ReadJobIndex    := 1,
          ReadStartBitNo  := 0,
          WriteJobIndex   := 0,
          WriteStartBitNo := 0 ),
       (  DataType        := MBCFG_TYPE_WORD,
          ByteOrder       := MBCFG_BYTE_ORDER_0,
          BitSize         := 16,
          ptVar           := 0,
          ReadJobIndex    := 1,
          ReadStartBitNo  := 32,
          WriteJobIndex   := 0,
          WriteStartBitNo := 0 ),
       (  DataType        := MBCFG_TYPE_WORD,
          ByteOrder       := MBCFG_BYTE_ORDER_0,
          BitSize         := 16,
          ptVar           := 0,
          ReadJobIndex    := 1,
          ReadStartBitNo  := 64,
          WriteJobIndex   := 0,
          WriteStartBitNo := 0
       );
    
    /*=== JOB LIST ==================*/
    zz_JobList     :   ARRAY[1..zz_JOBCOUNT] OF MBCFG_typCOM_JOB :=
       (  Functioncode            := 3, //Номер функции, 0x03, Read Holding Registers
          ReadStartAddress        := 26,//Адрес первого регистра
          ReadQuantity            := 5, //Кол-во регистров, которые следует прочесть
          WriteStartAddress       := 0,
          WriteQuantity           := 0,
          ptReadData              := 0, 
          ptWriteData             := 0
       );
    
    zz_DataField_1_Read       :       ARRAY[1..5] OF WORD;
    
    /*=== MODBUS MASTER ==============*/
    zz_MBCFG_MASTER_ETH :       MBCFG_MASTER_TCP;
    
    END_VAR
    
    /*--- for each variable -------------------------*/
       zz_VariableList[1].ptVar := ADR(U_L1);
       zz_VariableList[2].ptVar := ADR(U_L2);
       zz_VariableList[3].ptVar := ADR(U_L3);
    /*-----------------------------------------------*/
    
    /*--- for each job -----------------------------------*/
    zz_JobList[1].ptReadData   := ADR(zz_DataField_1_Read);
    /*----------------------------------------------------*/
    
    /*#### START OF FIXED CODE #####################################*/
    zz_MBCFG_MASTER_ETH(	strIpAddress    := MBCFG_IpAddress,
                            uiPort          := MBCFG_Port,
                            bUnitID         := MBCFG_UnitID,
                            tTimeOut        := MBCFG_TimeOut,
                            iVariableCount  := zz_VARIABLECOUNT,
                            ptVariableList  := ADR(zz_VariableList),
                            iJobCount       := zz_JOBCOUNT,
                            ptJobList       := ADR(zz_JobList),
                            tRequestDelay   := MBCFG_RequestDelay,
                            eError          => MBCFG_Error,
                            LastJob         => MBCFG_LastJob
                        );
    
    %QW377 := U_L1;
    %QW378 := U_L2;
    %QW379 := U_L3;