вторник, 19 января 2016 г.

Оптимизация хранения данных

Предыстория

Есть сервер используемый для веб разработки. На сервере различные конфигурации сайтов (версии PHP, MySQL, Apache и т.д.) настроены в виде контейнеров OpenVZ. Для комфортной работы его наиболее востребованные ресурсы (исходники и базы данных) хранятся на SSD (Intel DC S3500 480G в RAID1), а прочие данные на HDD (обычные SATA диски в RAID1). Посредством LVM хранилище на SSD разбито примерно пополам между исходниками и OpenVZ (основной объем - базы данных).

С некоторых пор в исходниках стало недоставать свободного места. Приходится просить разработчиков убирать ненужные исходники или архивировать давно неиспользуемые. Поскольку atime отключен, то трудно сказать наверняка когда пользовались этими данными, можно ли их архивировать и нужны ли они вообще. Кое-как это работало в самом начале, но позже народ "устал" и делать отказывается под разными предлогами. Я их не виню :)

Поиск решения

Несмотря на внушительный общий объем исходников (около 180G) объем "горячих" данных невелик - 10-30G. С этими данными разработчики работают в данный момент и именно к ним нужно обеспечить быстрый доступ на чтение/запись. Остальной объем данных считается "холодным" и он может потребоваться спустя пару дней, недель или не потребоваться вовсе. Тут предсказать трудно.

Поскольку экстенсивный рост (докупить еще SSD дисков) довольно дорог (сейчас два дополнительных SSD класса Intel DC S3500 на 480G стоят примерно 900$), то я пробую пойти интенсивным путем и оптимизировать использование уже установленных.

Мне нужно ускорить массив обычных SATA дисков через использование SSD. По предварительной прикидке под эту задачу подойдут:
Года два назад у меня уже был опыт использования FlashCache в режиме writeback. Понравилось, что он может быть использован поверх устройства с данными (cache backend) без предварительной подготовки этого устройства. В режиме writeback (на ssd кешируется и запись и чтение) позволяет сохранять состояние кеша между перезагрузками.

EnhanceIO является "улучшенной" версией Flashcache и использует его наработки. Что конкретно там улучшили я пока не разбирался.

Про dm-cache я слышал, но использовать не доводилось. Знаю только, что он требует форматирования cache backend перед использованием.

Аналогично bcache - только слышал, но пользоваться не доводилось.

Btier к кешированию не имеет никакого отношения. Это tiered storage который самостоятельно балансирует данные между разными бэкендами (ssd, sata, iscsi, etc) в зависимости от их использования.

Flashcache, EnhanceIO, dm-cache, bcache - это все варианты реализации кеширования записи на hdd через ssd. Они отличаются деталями реализации, но суть работы у них одна. А вот btier это интересный вариант. Он позволяет создать многоуровневую схему хранения данных значительного объема и автоматически мигрировать данные между уровнями в зависимости от их использования. Попробую для начала его, а дальше будет видно.

среда, 13 января 2016 г.

Munin-node на Arduino

Написал реализацию munin-node для Arduino. Для подключения к сети используется Ethernet shield. Сейчас мониторится относительная влажность и температура, но в планах добавить датчик CO2 и переписать на esp8266. В идеале хочется отказаться от Arduino вообще и использовать только ESP8266 с батарейным питанием.


Вначале было два датчика: DHT11 и DHT22, но их показания по части влажности отличались почти на 10%. Чтобы набрать кворум добавил еще 3 датчика DHT22. Теперь два старых датчика показывают похожие значения, а три новых почти не отличаются в показаниях между собой, но не совпадают с двумя старыми примерно на 10%.

Относительная влажность

Температура
Считается, что комфортный уровень влажности для человека это 40-60%. До включения отопления было 40-50%.