2 нояб. 2014 г.

О моих чувствах к коллективу разработчиков Debian

Ниже логи попыток установить rrdtool из wheezy и jessie соответственно. rrdtool, если кто не знает, — это инструмент, периодически помещающий новые данные в собственную базу и потом строящий по этой базе няшные PNG-шные графики.

Наверное, тут даже нет особой нужды что-то комментировать. И так видно. Хочу сказать только, что я системный администратор и не хочу запускать иксы, вейланды и colord на Raspberry Pi. Я хочу графиков и фыр-фыр-фыр.

root@raspberrypi:/home/pi# apt-get install -t wheezy rrdtool
Чтение списков пакетов… Готово
Построение дерева зависимостей      
Чтение информации о состоянии… Готово
Будут установлены следующие дополнительные пакеты:
  libdbi1 librrd4 ttf-dejavu ttf-dejavu-extra
Предлагаемые пакеты:
  librrds-perl
НОВЫЕ пакеты, которые будут установлены:
  libdbi1 librrd4 rrdtool ttf-dejavu ttf-dejavu-extra
обновлено 0, установлено 5 новых пакетов, для удаления отмечено 0 пакетов, и 87 пакетов не обновлено.
Необходимо скачать 0 B/2 594 kB архивов.
После данной операции, объём занятого дискового пространства возрастёт на 8 476 kB.
Хотите продолжить [Д/н]? n
Аварийное завершение.
 


root@raspberrypi:/home/pi# apt-get install -t jessie rrdtool
Чтение списков пакетов… Готово
Построение дерева зависимостей      
Чтение информации о состоянии… Готово
Следующие пакеты устанавливались автоматически и больше не требуются:
  lesstif2 libgail18 libgeoclue0 libxp6 ttf-dejavu-core
Для их удаления используйте «apt-get autoremove».
Будут установлены следующие дополнительные пакеты:
  fontconfig-config fonts-dejavu-core geoclue-2.0 glib-networking glib-networking-common glib-networking-services gstreamer1.0-plugins-base
  gstreamer1.0-plugins-good gstreamer1.0-x libatk1.0-0 libatk1.0-data libcairo-gobject2 libcairo2 libdbi1 libdrm-freedreno1 libdrm-nouveau2
  libdrm-radeon1 libdv4 libegl1-mesa libegl1-mesa-drivers libelf1 libffi6 libflac8 libfontconfig1 libgbm1 libgcrypt11 libgl1-mesa-glx libglapi-mesa
  libgles2-mesa libglib2.0-0 libglu1-mesa libgmp10 libgnutls-deb0-28 libgraphite2-3 libgstreamer-plugins-base1.0-0 libgstreamer1.0-0 libharfbuzz-icu0
  libharfbuzz0b libhogweed2 libicu52 libiec61883-0 libjavascriptcoregtk-1.0-0 libjim0.75 libjpeg62 libjpeg62-turbo libjson-glib-1.0-0
  libjson-glib-1.0-common libllvm3.5 libmbim-glib4 libmbim-proxy libmm-glib0 libmotif-common libnettle4 libnm-glib4 libnm-util2 libopenjpeg5
  libopenvg1-mesa liborc-0.4-0 libp11-kit0 libpango-1.0-0 libpango1.0-0 libpangocairo-1.0-0 libpangoft2-1.0-0 libpangox-1.0-0 libpangoxft-1.0-0
  libpixman-1-0 libpoppler46 libproxy1 libqmi-glib1 libqmi-proxy librrd4 libsecret-1-0 libsecret-common libsoup2.4-1 libtasn1-6 libtiff5 libudev1
  libvisual-0.4-0 libvisual-0.4-plugins libvpx1 libwavpack1 libwayland-client0 libwayland-egl1-mesa libwayland-server0 libwebkitgtk-1.0-0
  libwebkitgtk-1.0-common libwebp5 libxcb-dri2-0 libxcb-dri3-0 libxcb-present0 libxcb-sync1 libxcb-xfixes0 libxcb1 libxm4 libxshmfence1 modemmanager
  ttf-dejavu-core usb-modeswitch usb-modeswitch-data xdg-user-dirs xpdf
Предлагаемые пакеты:
  libdv-bin oss-compat rng-tools gnutls-bin gstreamer-codec-install gnome-codec-install gstreamer1.0-tools librrds-perl comgt wvdial
Рекомендуемые пакеты:
  libgl1-mesa-dri
НОВЫЕ пакеты, которые будут установлены:
  fonts-dejavu-core geoclue-2.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-x libcairo-gobject2 libdbi1 libdrm-freedreno1
  libdrm-nouveau2 libdrm-radeon1 libdv4 libegl1-mesa libegl1-mesa-drivers libelf1 libffi6 libgbm1 libgles2-mesa libglu1-mesa libgnutls-deb0-28
  libgraphite2-3 libgstreamer-plugins-base1.0-0 libgstreamer1.0-0 libharfbuzz-icu0 libharfbuzz0b libhogweed2 libicu52 libiec61883-0 libjim0.75
  libjpeg62 libjpeg62-turbo libjson-glib-1.0-0 libjson-glib-1.0-common libllvm3.5 libmbim-glib4 libmbim-proxy libmm-glib0 libmotif-common libnm-glib4
  libnm-util2 libopenjpeg5 libopenvg1-mesa libpango-1.0-0 libpangocairo-1.0-0 libpangoft2-1.0-0 libpangox-1.0-0 libpangoxft-1.0-0 libpoppler46
  libproxy1 libqmi-glib1 libqmi-proxy librrd4 libsecret-1-0 libsecret-common libtasn1-6 libtiff5 libudev1 libvisual-0.4-0 libvisual-0.4-plugins
  libwavpack1 libwayland-client0 libwayland-egl1-mesa libwayland-server0 libwebp5 libxcb-dri2-0 libxcb-dri3-0 libxcb-present0 libxcb-sync1
  libxcb-xfixes0 libxm4 libxshmfence1 modemmanager rrdtool usb-modeswitch usb-modeswitch-data xdg-user-dirs
Пакеты, которые будут обновлены:
  fontconfig-config glib-networking glib-networking-common glib-networking-services libatk1.0-0 libatk1.0-data libcairo2 libflac8 libfontconfig1
  libgcrypt11 libgl1-mesa-glx libglapi-mesa libglib2.0-0 libgmp10 libjavascriptcoregtk-1.0-0 libnettle4 liborc-0.4-0 libp11-kit0 libpango1.0-0
  libpixman-1-0 libsoup2.4-1 libvpx1 libwebkitgtk-1.0-0 libwebkitgtk-1.0-common libxcb1 ttf-dejavu-core xpdf
обновлено 27, установлено 75 новых пакетов, для удаления отмечено 0 пакетов, и 635 пакетов не обновлено.
Необходимо скачать 47,9 MБ архивов.
После данной операции, объём занятого дискового пространства возрастёт на 113 MB.
Хотите продолжить [Д/н]? n
Аварийное завершение.
root@raspberrypi:/home/pi#

17 июл. 2014 г.

Как нам запилить DAS?

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

Итак, проблема, над которой чешется мозх: хочется расширить дисковой пространство на файл- или ещё каком-нибудь сервере. Если всплывут действительно быстрые варианты подключения, то и на сервере БД. Расширить хочется не доустановкой винтов внутрь сервера, а подключением некоей внешней дисковой полки как блочного устройства (а не как NAS, в смысле не по SMB/NFS/что-там-ещё; это принципиально).

Теперь варианты, о которых я знаю (теоретически):
  • Настоящая дисковая полка с Fibre Channel, воткнутая напрямик в сервер через FC. Насколько я понимаю, это будет сильно дорого. Насколько я знаю, это потребует покупки как минимум самой дисковой полки (а можно ли в неё воткнуть не-FCшные винты?), FC-адаптера в сервер, возможно, контроллера этих полок и, возможно, коммутатора FC. Если не так, поправьте, пожалуйста. Вариант ближе уже к SAN, и я как-то даже стесняюсь спрашивать цены таких инсталляций.
  • Мегодевайс из дисков, воткнутых в сервер через USB переходники. Отпадает. Не работает это.
  • Некая хрень, набитая винтами с произвольными интерфейсами и торчащая наружу как AoE/iSCSI target через ethernet. На сегодня наиболее понятный мне как по ценам так и по устройству вариант. Требует покупки десятигиговых ethernet-интерфейсов в полку и сервер, а также десятигигового свитча, что до понимания цен на другие варианты пока кажется дороговатым. И это тоже не совсем DAS, а, скорее, SAN.

Ну и собственно вопрос: возможно ли с помощью некоей бесплатной операционной системы и доступного через eBay дополнительного оборудования создать устройство, которое для сервера, к которому оно будет подключаться, выглядеть как один здоровенный SCSI (или SATA) диск? По цене, составляющей не более 25% от стоимости устанавливаемых винтов, не считая стоимость корпуса и блоков питания. Желаемое количество устанавливаемых в полку дисков - до 25 штук.

5 июл. 2014 г.

Как я парсил дээнэсы.

В дополнение к прошлому посту.

Раз уж PoC был выполнен, решил применить его на деле. Почувствовать, так сказать, себя киберсквоттером.

26 июн. 2014 г.

Как я тестировал доступность доменов в интернете

Увидел вчера в интернетах любопытную задачу: человек хочет проверять домены на существование. Ну или на делегированность (или припаркованность). В общем формулировка задачи проста: берём очередной домен из списка и смотрим наличие для него записей NS. Если вдруг их нет - делаем отметку об этом.

Проста-то проста, но он хотел обходить список из трёх миллиардов доменов за сутки. Это значит, тридцать пять тысяч доменов в секунду. С этого места начинаются трудности:
  1. Если предположить, что на один домен тратится в среднем триста байт входящего трафика, то за секунду подобная инсталляция должна потреблять десять мегабайт. Ну ладно, стомегабитные подключения сейчас не что-то необычное, но эти сто мегабит всегда должны быть ста мегабитами, а не «по вечерам канал сильно загружен».
  2. Надо учитывать, что рекурсивный ресольвинг может иногда занимать по нескольку секунд на домен. То есть последовательная работа не подходит сразу и со всей очевидностью. Нужен параллельный процесс.
В общем, решил посмотреть, что за штука такая — perl mutithreading. Посмотрел.
Инсталляция: клиент на Core i5 - перловый скрипт, читающий список доменов из файла. Запросы посылает BIND'у, работающему на другой машине. Почему-то я пока считаю, что так оно должно работать быстрее. Хотя бы BIND будет делать кэширование TLD-серверов, чтобы не заморачиваться с этим в скрипте. Канал - 50 мегабит в секунду.

Результаты: си-ильно далеки от цели. Максимум, чего мне удалось добиться на некэшированном списке доменов (то есть при первом его проходе) — 110 доменов в секунду. И я бы не сказал, что какая-то часть стенда у меня сильно нагружена.

И вот интересно мне: сто доменов в секунду — это всё, что может выдать связка «один клиент — один кэширующий сервер с рекурсией», или можно выжать больше?