nginx vs DDoS: accept-фильтры во FreeBSD

Вот что пишет о механизме accept-фильтров автор web-сервера nginx Игорь Сысоев:

Два года назад во FreeBSD появились accept-фильтры. Они позволяют не передавать в accept() пришедшее соединение до тех пор, пока не придёт первый пакет с данными (фильтр dataready) или заголовок HTTP-запроса (фильтр httpready). Использование фильтров в Apache (а в нём они поддерживаются, начиная с версии 1.3.14) позволяет уменьшить число процессов. В серверах, использующих select(), poll() или kqueue(), например, в thttpd-2.22, фильтры уменьшают число открытых файлов. И наконец, в обоих случаях accept-фильтры уменьшают число переключений контекста процесса.

Таким образом, использование данного инструментария позволить перенести обработку части запросов в ядро и снизить общую загрузку сервера. Читать далее nginx vs DDoS: accept-фильтры во FreeBSD

Optimizing MySQL Performance with ZFS

Наткнулся в интернетах на интереснейшую презентацию с The 2009 MySQL Conference & Expo. Умные мужчины из Sun Microsystems в течении почти часа рассказывают о тонкостях использования MySQL на ZFS.

MySQL на ZFS под FreeBSD: подготовка

Итак, что есть на руках:

# uname -rm
8.0-RELEASE amd64
# atacontrol list
ATA channel 2:
    Master:  ad4 ST3500320NS/SN06 SATA revision 1.x
    Slave:       no device present
ATA channel 3:
    Master:  ad6 ST3500320NS/SN06 SATA revision 1.x
    Slave:       no device present
# zpool status
  pool: tank
 state: ONLINE
 scrub: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        tank        ONLINE       0     0     0
          mirror    ONLINE       0     0     0
            ad4s1d  ONLINE       0     0     0
            ad6s1d  ONLINE       0     0     0

errors: No known data errors

Имеем мы 64 битную FreeBSD 8-й ветки, релиз которой состоялся совсем недавно Операционная система установлена на ZFS зеркале из двух SATA жестких дисков. FreeBSD ZFS Tuning Guide рекомендует именно такие версии софта для наиболее стабильной работы. Для начала создадим в уже имеющемся ZFS пуле с названием tank файловые системы, которые мы будем использовать для хранения данных Не забыв при этом остановить сервер MySQL и сделать бэкап директории с данными.
Читать далее MySQL на ZFS под FreeBSD: подготовка

MySQL и электрики

Макхост предоставляет недорогой и качественный хостинг выделенных серверов. К сожалению, раз в 1-2 месяца на них нападает неведомая хуйня и сервера внезапно выключаются по питанию. Дабы избежать крахов базы данных приходится идти на такие вот извращения:

innodb_flush_log_at_trx_commit=1
sync_binlog=1

Интенсивность ввода-вывода при этом увеличивается на порядок, зато при внезапном отключении сервера не ломается репликация.

Хранение сессий PHP в memcached

Данные всех пользовательских сессий php по умолчанию складывает в особые файлы во временной директории. Количество этих файлов пропорционально количеству пользователей, работающих с проектом.

При определенном уровне нагрузки это приведет к тому, что даже простое открытие файла сессии будет длиться секунду и дольше. Что неизбежно привезет к зависанию клиентских запросов в пуле PHP-FastCGI и появлению ошибок 502 Bad Gateway при попытке открыть любой пхп скрипт — только лишь потому, что большинство воркеров будут заняты открытием файлов сессий.
Читать далее Хранение сессий PHP в memcached

nginx vs DDoS: выносим мусор

Одна из самых простых разновидностей ботнета — сеть, участники которой подключаются к серверу на 80 порт и тупо запрашивают /. Либо вообще ничего не запрашивают и висят, пока сервер не скинет их по client_header_timeout (по умолчанию 60 секунд).
В логах это выглядит следующим образом:

85.192.188.150 - - [01/Dec/2009:09:21:01 +0300] "-" 400 0 "-" "-"
85.192.188.150 - - [01/Dec/2009:09:21:01 +0300] "-" 400 0 "-" "-"
85.192.188.150 - - [01/Dec/2009:09:21:01 +0300] "-" 400 0 "-" "-"
85.192.188.150 - - [01/Dec/2009:09:21:01 +0300] "-" 400 0 "-" "-"
85.192.188.150 - - [01/Dec/2009:09:21:01 +0300] "-" 400 0 "-" "-"

Читать далее nginx vs DDoS: выносим мусор