Статьи
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 месяцев. Большой разброс – сложно сделать выводы |
Статистика интересная вещь, но не главная. Диагностику мы делаем не ради цифр, а для клиентов: чтобы в дата-центре были рабочие серверы, а на сайте – обновлённая информация. Тогда каждый клиент получает:
- сервер нужной мощности – оплата согласно тарифу;
- надёжное оборудование – никаких перебоев в работе проектов.
Смотреть все статьи