Перейти к основному содержанию

Статьи
FirstDedic


Диагностика серверов

01 марта 2017

Автоматическая диагностика – первое, что мы делаем перед продажей выделенного сервера.

Если это новый сервер – проверяем корректность работы и заносим информацию о конфигурациях в базу.

Если сервер уже был в работе – проверяем исправность компонентов и обновляем данные в базе. Информация на сайте должна соответствовать тому, что мы продаём. Бывает, что прошлому клиенту заменили диски, и нигде это не обозначили, тариф не поменяли. Тогда следующий клиент рискует получить 240 Гб SSD вместо заявленных 4000 Гб HDD.

Мы учитываем эти риски. Если не обновляем информацию вручную, система делает это автоматически для каждого нового или освободившегося сервера. Загружается по сети с ядром ОС Linux и запускает программу диагностики, которая:

  • собирает данные о новых дисках и заносит в базу, оттуда они выгружаются на сайт;
  • выявляет неисправности сервера.

Что проверяем

CPU

  • температуру процессора,
  • корректность работы процессора.

Для стресс-теста CPU на 30 минут запускается программа mprime-bin.

/usr/bin/timeout 30m /opt/mprime -t
/bin/grep -i error /root/result.txt

Каждую минуту ipmi sensors проверяют температуру процессора, допустимая – меньше 60С. Программа выявляет ошибки архитектуры CPU в файлах /proc/kmsg и mprime results.txt.

RAM

Некоторые ячейки памяти могут быть повреждены – нужно проверить каждую. Классический Memtest+ не подойдёт. В бесплатной версии он не сохраняет результаты, только отображает на экране. Поэтому мы используем memtester. Запускаем его из под ОС, при этом проверяются ячейки не занятые ОС.

memtester `cat /proc/meminfo |grep MemFree | awk '{print $2-1024}'`k 5

Смотрим результат запроса: если память работает должным образом программа возвращает 0.

Хранилище

Программа находит все устройства в /dev/sd? и /dev/cciss/c0d? и проверяет каждый элемент – диск это или нет.

hdlist() {
 HDLIST=$(ls /dev/sd?)
 HDLIST="${HDLIST} $(ls /dev/cciss/c0d? 2>/dev/null)"
 REAL_HDLIST=""
 for disk in ${HDLIST}; do
        	if head -c0 ${disk} 2>/dev/null; then
     REAL_HDLIST="${REAL_HDLIST} ${disk}"
        	fi
 done
 echo "${REAL_HDLIST}"
}

Теперь нужно проверить все диски.

HDD

Полностью очищаем жёсткий диск от данных предыдущего пользователя:

for DISK in $(hdlist)
  do
    echo "Clearing ${DISK}"
    parted -s ${DISK} mklabel gpt
    dd if=/dev/zero of=${DISK} bs=512 count=1
  done
  if [ "($FULL_HDD_CLEAR)" = "YES" ]; then
  echo "Clearing disks full (very slow)"
  wget -O /dev/null -q --no-check-certificate "${STATEURL}&info=slowhddclear"
  for DISK in $(hdlist)
  do
    echo "Clearing ${DISK}"
    dd if=/dev/zero of=${DISK} bs=1M
  done
  fi
  • проверяем значение smart атрибута Reallocated Sectors Count – должен быть не меньше 100,
  • проверяем скорость диска.

Программа оценивает скорость в трёх смещениях диска: в начале, середине и конце – каждое смещение 4 Гб. Этого достаточно, чтобы сделать общий вывод. Для каждого смещения мы используем эту функцию:

sysctl -w vm.drop_caches=3 > /dev/null
        	zcav -c 1 -s ${SKIP_COUNT} -r ${OFFSET} -l /tmp/zcav1.log -f ${DISK}
        	if [ $? -ne 0 ]; then
                    	echo err
                    	exit
        	fi
        	SPEED=$(cat /tmp/zcav1.log | awk '! /^#/ {speed+=$2; count+=1}END{print int(speed/count)}')

SSD-накопитель

Проверяем значение smart атрибутов:

  • Media_Wearout_Indicator – это время жизни или износ диска: для нового – 100, минимально допустимое – 10.
  • Reallocated_Sector_Count – количество переназначенных секторов – должно быть меньше 100.

Статус RAID

Идентифицируем диск по модели RAID и проверяем статус массива. Если он в рабочем режиме, будет «optimal».

detect_raid_type() {
  RAIDSTR=$(lspci | grep -i raid)
  if echo ${RAIDSTR} | grep -iq adaptec; then
    # THis is adaptec
    echo "adaptec"
  elif echo ${RAIDSTR} | grep -iqE 'lsi|megaraid'; then
    # THis is LSI
    echo "lsi"
  elif echo ${RAIDSTR} | grep -iq '3ware'; then
    # THis is 3ware
    echo "3ware"
  elif echo ${RAIDSTR} | grep -iqE 'Hewlett-Packard.*Smart'; then
    # THis is HP Smart Array
    echo "HP-SmartArray"
  elif dmesg | grep -q cciss/ ; then
    echo cciss
  else
    echo "unknown"
  fi
}
raid_status_adaptec() {
  RSTATUS=$(arcconf getconfig 1 ld | awk -F: '/Status of logical device/ {print $2}')
  if ! echo "${RSTATUS}" | grep -q 'Optimal' ;then
    echo "${RSTATUS}"
    return 1
  fi
}

raid_status_3ware() {
  echo "We have not support 3ware yet"
  return 0
}

raid_status_lsi() {
  RSTATUS=$(megacli -LDInfo -Lall -aALL |awk -F: '$1 ~ /State/ {print $2}')
  if ! echo "${RSTATUS}" | grep -q 'Optimal' ;then
    echo "${RSTATUS}"
    return 1
  fi
}

raid_status_unknown() {
  echo "Unknown RAID"
  return 0
}

raid_status_cciss() {
  RSTATUS=$(cciss_vol_status /dev/cciss/c*d0)
  if ! echo ${RSTATUS} | grep -q "OK" ; then
    echo "${RSTATUS}"
    return 1
  fi
}

Сеть

Проверяем скорость скачивания по сети – должна быть больше 300 Мбит.

curl -k --progress-bar -w "%{speed_download}" -o /dev/null "($CGI_MGR_URLv4)/speedtest_cgi?id=($AUTH_ID)&func=server.speedtest"

Статистика

Программа диагностики проверяет в среднем 323 сервера в месяц, 124 из них не проходят тест – эти серверы мы не продаём. Сначала инженеры дата-центра меняют диски, ремонтируют кулеры. CPU и RAM мы обычно меняем по гарантии.

Посмотрим статистику по рабочим HDD. Для анализа мы взяли 1800 отчётов для разных дисков – всего 103 модели.

Название атрибута min Ожидаемое значение max Стандартное отклонение Описание
Temperature_Celsius 14 25.81 40 4.09 25C – отличная температура для диска
Power_On_Hours 407 24033 59363 12910 Забавно. Некоторые диски наработали по 6 лет
Reallocated_Sector_Ct 0 92.3496 10728 496 100 – хороший порог
Raw_Read_Error_Rate 0 32416965 4294967295 126899820.1 Все значения большие. При малейшей проблеме набегает много ошибок на триггере
SSD Power_On_Hours 10 23159 918502 134915 Больше двух лет – неплохо

 

Отличные цифры, теперь проверим сколько в среднем работает HDD. Для этого мы составили статистику по сломанным дискам, ориентировались на Raw Read Error Rate.

Название атрибута min Ожидаемое значение max Стандартное отклонение Описание
Power_On_Hours 0 25040 57178 12030 HDD работает 33 ± 16 месяцев. Большой разброс – сложно сделать выводы

 

Статистика интересная вещь, но не главная. Диагностику мы делаем не ради цифр, а для клиентов: чтобы в дата-центре были рабочие серверы, а на сайте – обновлённая информация. Тогда каждый клиент получает:

  • сервер нужной мощности – оплата согласно тарифу;
  • надёжное оборудование – никаких перебоев в работе проектов.

Смотреть все статьи

Сообщить об ошибке

Выделенная ошибка:

Опишите найденную ошибку