четверг, 30 октября 2014 г.

Как собрать RAID-10 на ZFS?

Самый надежный при высокой скорости работы вариант конфигурации диском на мой взгляд. Я буду собирать на Linux, но те же самые команды (за исключением имен устройств применимы и к другим ОС).

Во-первых, нужно на всех дисках, которые планируется добавить в массив создать gpt таблицу разделов, это можно сделать через parted /dev/sdX и там вбит mklabel gpt

После этого собираем первое зеркало:
zpool create data mirror /dev/sdb /dev/sdc

А вот активация страйпа будет хитрая - надо просто в этот же вольюм добавить еще несколько зеркал!

Приступаем:
zpool add data mirror /dev/sdd /dev/sde
zpool  add data mirror /dev/sdf /dev/sdh
zpool  add data mirror /dev/sdg /dev/sdi
Вуаля, у нас создался RAID10 из 8 дисков, то есть stripe по 4м зеркалам:
zpool status
  pool: data
 state: ONLINE
  scan: none requested
config:

    NAME        STATE     READ WRITE CKSUM
    data        ONLINE       0     0     0
      mirror-0  ONLINE       0     0     0
        sdb     ONLINE       0     0     0
        sdc     ONLINE       0     0     0
      mirror-1  ONLINE       0     0     0
        sdd     ONLINE       0     0     0
        sde     ONLINE       0     0     0
      mirror-2  ONLINE       0     0     0
        sdf     ONLINE       0     0     0
        sdh     ONLINE       0     0     0
      mirror-3  ONLINE       0     0     0
        sdg     ONLINE       0     0     0
        sdi     ONLINE       0     0     0
Размером в 11Тб:
df -h /data
Filesystem      Size  Used Avail Use% Mounted on
data             11T  128K   11T   1% /data
На этом все :)

среда, 29 октября 2014 г.

PF_RING ZC vs PF_RING non zc

Update: тесты были проведены из рук вон плохо, не ориентируйтесь на них ВООБЩЕ. Скоро выполню повторно. 

В процессе разработки и тестирования FastNetMon столкнулся с тем, что довольно мало информации о явном преимуществе в скорости выше указанного режима zero copy.

Итак, я провел немного тестов на нагрузке в районе 350 kpps ~2Gbps на i7 2600.

Non zero copy режим, multichannel  опрос сетевой в 8 потоках:



Активирован PF_RING zero copy mode:


Как можно видеть, прирост скорости просто огромный. Причем, что приятно, вовсе не потребовалось изменять интерфейсы приложения написанного под режим one-copy, чтобы заработал ZC режим. Дабы никого не смущать - всплеск на ядре - это моя работа (моего приложения) :)

UPDATE:
Самое смешное, что это оказался не ZC режим, а похоже чудесная конфигурация сетевой скриптом load_driver.sh из папки с патченным ixgbe драйвером.


вторник, 28 октября 2014 г.

Как отлажить фильтры шейпера tc в Linux и не сойти с ума?

Ваш покорный слуга занимается этим уже долгие недели и решил, что хватит это терпеть!

Если Вы работали с фильтрами tc, то, уверен, вспоминаете это время с дрожью и ненавистью.

Почему?

Ну, например, потому, что обычный фильтр (tc -s filter show dev bond0) выглядит так:
filter parent 1: protocol ip pref 10 u32 fh b:37:800 order 2048 key ht b bkt 37 flowid 1:3c  (rule hit 11 success 0)
  match 9ffd1737/ffffffff at 12 (success 0 )

Да, Вы правильно подумали, 9ffd1737 - это IP адрес, который используется в фильтре. Как же его привести в вид IP адреса из этого шестнадцатеричного бреда?

Итак, скрипт спаситель: https://gist.github.com/pavel-odintsov/8bcddca3673f97d18b8f

Он работает как фильтр и запускать его так:

tc -s filter show dev bond0| perl convert_hex_ip_to_human_ip.pl
В итоге указанный Выше участок примет вид:
filter parent 1: protocol ip pref 10 u32 fh 800::80a order 2058 key ht 800 bkt 0 link b:  (rule hit 269307 success 0)
  match 159.253.23.0/255.255.255.0 at 12 (success 32668 )
    hash mask 0.0.0.255 at 16
Пожалуйста :)

четверг, 23 октября 2014 г.

PF_RING and Transparent Mode

PF_RING has been designed for enhancing packet capture performance. This means that the RX path must be accelerated, and in particular a way to accelerate this is by reducing the journey of the packet from the adapter to userland. This is obtained by allowing the driver to push the packet from the NIC to PF_RING directly and not through the usual kernel path. For this reason PF_RING has introduced an option named “transparent mode” whose goal is to tune how packets are moved from the NIC to PF_RING. This option (that can be specified when inserting the PF_RING module via insmod) can have three values:

  1. insmod pf_ring.ko transparent_mode=0
    This is the default and it means that packets are sent to PF_RING via the standard kernel mechanisms. In this setup the packets are both sent to PF_RING but to all other kernel components. All NIC drivers support this mode.
  2. insmod pf_ring.ko transparent_mode=1
    In this mode, packets are sent directly by the NIC driver to PF_RING, packets are still propagated to other kernel components. In this mode packet capture is accelerated because packets are copied by the NIC driver without passing through the usual kernel path. Please note that in order to enable this mode, you must use a NIC driver that supports PF_RING. Available PF_RING-enabled drivers can be found in the drivers/ directory of PF_RING.
  3. insmod pf_ring.ko transparent_mode=2
    In this mode, packets are sent directly by the NIC driver to PF_RING, packets are not propagated to other kernel components as this slows down packet capture. Please note that:
    • in order to enable this mode, you must use a NIC driver that supports PF_RING.
    • Packets are not sent to the kernel after they have been delivered to PF_RING. This means that you won’t have connectivity from NICs driven by PF_RING-aware drivers.
    • This mode is the fastest one as packets are quickly copied to PF_RING and immediately discarded after they have been processed.
    Копипаста из: http://www.ntop.org/pf_ring/pf_ring-and-transparent-mode/ А-то постоянно теряю хелп :)

среда, 22 октября 2014 г.

Защита от DDoS атак с помощью FastNetMon

В наши дни почти у любой компании вне зависимости от сферы деятельности очень часто встает вопрос - как защититься от DDoS атак?

Всегда есть по меньшей мере два решение этой проблемы - программно-аппаратные решения либо готовые услуги по защите. Безусловно, у каждого варианта есть свои сильные и слабые стороны. Но у обоих вариантов есть одна и та же крайне слабая сторона - они очень дороги.

Стоимость оборудования для защиты от атак начинается с 1 миллиона рублей за 1Gbps (а такие атаки уже подбираются к категории "самые слабые", с которых все только начинается), услуги по защите стоят решительно дешевле, расценки начинаются от 10 000 рублей до 50 тысяч и более в особо сложных случаях.

Как же быть компании, которая не готова к таким тратам? Разумеется, ответ есть! Продолжение можно прочесть на LinkedIn: вот ссылка

пятница, 17 октября 2014 г.

Парсинг бинарных UDP DNS сообщений на Go lang

Эту таску легко решить с помощью совершенно волшебного модуля от miekg (на нем работает DNS в CloufFlare, да).

Стягиваем модуль:
go get github.com/miekg/dns 
 Подключаем:

import "github.com/miekg/dns"
А вот простенький пример кода, который извлекает имя домена из пакета:
var msg dns.Msg
err = msg.Unpack(binary_date_payload)

if err != nil { // Send a FormatError back
//fmt.Println("Can't parse!", err)
continue
}

domain_name := strings.ToLower(msg.Question[0].Name)
fmt.Println(domain_name)



среда, 15 октября 2014 г.

Лучшая на Планете замена grep - ack!

Друзья, это пожалуй лучшая тулза изобретенная со времен динозавров :) Не знаю как вы, но я каждый день по полсотни раз использую grep -HiR 'pattern' * для поиска текста в конфигах/коде, это занимает очень много времени и очень неудобно.

Но решение есть - установите ack, что в Дебияне, что в Центосе оно есть!

Прошу:
ack 'Downloaded signature is too small'
fileserver/ovz/CodeLib.pm
346:        CodeLib::debug_print("error", "Downloaded signature is too small  and we can't use it! Please check backup server!");
 За рекомендацию спасибо Alexander Fenster :)

пятница, 10 октября 2014 г.