Создание jail’ов в FreeBSD

1. Создание джейла

Перед продолжением убедитесь, что у Вас уже установлены исходники в /usr/src и ip адрес x.x.x.x висит альясом на одном из интерфейсов.

Для управления джейлами установим jailadmin:

cd /usr/ports/sysutils/jailadmin/
make install clean

Определимся где будут жить джейлы. Например, это будет /jails. Создадим эту директорию:

mkdir /jails

Создадим директорию для джейла с именем www.

mkdir /jails/www

Скопируем туда мир:

cd /usr/src
make buildworld
make installworld DESTDIR=/jails/www
make distribution DESTDIR=/jails/www

Отредатируем /etc/fstab, добавим туда:

devfs     /jails/www/dev     devfs   rw,noauto  0 0
proc      /jails/www/proc    procfs  rw,noauto 0 0

Отредактируем /usr/local/etc/jailadmin.conf:

jaildir=/jails
maxparallel=5
debug=1
default_devfsruleset=devfsrules_jail
default_fstab=/etc/fstab
default_shutdown=naive
default_startcommand=/bin/sh /etc/rc
default_usejtools=1

# ========= Jails ======
www
    ip: x.x.x.x
    hostname: www.example.com
    mount: /proc,/dev

2. Запуск, остановка, работа с джейлом

Запуск джейла и остановка выполняются командами:

jailadmin start www
jailadmin stop www

Список запущенных джейлов:

jls

Перейти в джейл:

jexec N sh

где N – номер джейла из jls

Мониторим загрузку дисков (Disk I/O) в cacti.

В Windows версии пакета net-snmp отсутствуют mib’ы для мониторинга загрузки дисковой подсистемы. Поэтому мониторить, описанным ниже способом, получится толь только *nix системы.

1. Установка

- Качаем Cacti_Net-SNMP_DevIO_v3.zip (альтернативная ссылка). Распаковываем.

- Файл net-snmp_devio.xml кладём в /путь_к_cacti/resource/snmp_queries/net-snmp_devio.xml.

- Файлы net-snmp_devIO-BytesRW_graphTMPL.xml, net-snmp_devIO-LoadAVG_graphTMPL.xml, net-snmp_devIO-ReadsWrites_graphTMPL.xml импортируем в cacti (“Import Templates” в меню cacti).

- Открываем “Data Queries”, создаем новый “Data Query”:
DataQuery1
 
Подробнее »

Защищаем apache 1.3 в FreeBSD. Процессы с привилегиями пользователя.

В этой статье я рассмотрю решения, которые позволяют процессам apache 1.3 выполняться от имени пользователя, которому принадлежит виртуалхост. Архитектура apache 1.3 предполагает только prefork схему, поэтому все описанные ниже решения работают примерно одинаково: в системе запускается некоторое количество процессов apache. При получении запроса он передается одному из бездействующих процессов, процесс определяет на какой виртуалхост пришел запрос и какому пользователю принадлежит этот виртуалхост, после чего процесс suid’ится в пользователя/группу, которым принадлежит виртуалхост. Вся последующая обработка запроса происходит уже от имени пользователя/группы, которым принадлежит виртуалхост.

1. suexec
2. suphp
3. dklab
4. производительность


1. suexec

Описание:

suexec позволяет выполнять CGI скрипты от пользователя, которому принадлежит виртуалхост.

Установка suexec в FreeBSD:

В /etc/make.conf добавить:

.if ${.CURDIR} == /usr/ports/www/apache13
WITH_APACHE_SUEXEC=yes
APACHE_SUEXEC_DOCROOT= /home
.endif

В “APACHE_SUEXEC_DOCROOT” следует задавать директорию в которой располагаются пользователи и их DocumentRoot директории.

После этого:

# cd /usr/ports/www/apache13
# make install clean

Конфигурирование:

В описание виртуалхоста добавить:

User example
Group example

Преимущества:

+ CGI скрипты работают от имени пользователя.

Недостатки:

- От имени пользователя будут выполняться только CGI скрипты. Скрипты PHP, запущенные под mod_php будут продолжать выполняться от имени веб-сервера.


2. suphp

Описание:

suphp – это DSO-модуль (Dynamic Shared Object) для apache. Позволяет выполнять PHP скрипты от пользователя, которому принадлежит виртуалхост.

Установка suphp в FreeBSD:

# cd /usr/ports/www/suphp
# make install clean

Конфигурирование:

в httpd.conf:

LoadModule suphp_module libexec/apache/mod_suphp.so
AddModule mod_suphp.c
suPHP_Engine on
suPHP_AddHandler x-httpd-php
AddType application/x-httpd-php .php
AddHandler x-httpd-php .php

в описании виртуалхоста:

suPHP_UserGroup example example

Преимущества:

+ PHP cкрипты работают от имени пользователя.

Недостатки:

- От имени пользователя будут выполняться только PHP скрипты. CGI скрипты будут продолжать выполняться от имени веб-сервера.
- PHP скрипты запускаются при помощи php-cgi, что лишает возможности использовать mod_php со всеми его преимуществами в плане производительности.


3. dklab apache

Описание:

dklab apache – это apache 1.3.34 c набором патчей от Дмитрия Котерова. Подробную информацию можно получить по адресу: http://dklab.ru/lib/dklab_apache/

Установка dklab apache в FreeBSD:

Можно скачать порт, распаковать в /usr/ports/www/dklab-apache, затем собрать порт:

# cd /usr/ports/www/dklab-apache
# make install clean

Либо можно скачать готовые пакеты и установить при помощи pkg_add:
http://woland.pl.ua/upload/dklab-apache-i386.tbz
http://woland.pl.ua/upload/dklab-apache-amd64.tbz

Конфигурирование:

В описание виртуалхоста добавляем:

User example
Group example

Преимущества:

+ Удобство конфигурирования. Не требуется конфигурировать отдельно suexec и suphp, достаточно директив User/Group в описании виртуалхоста.

Недостатки:

- Процесс выполняется от имени пользователя даже при обработке запроса на статический файл, что негативно сказывается на общей производительности.


4. производительность

Для тестирования производительности использовались 3 файла.
Первый – статический HTML файл с текстом “Hello world!”.
Второй – PHP скрипт:

<? phpinfo() ?>

Третий – CGI скрипт:

#!/usr/local/bin/perl
print "Content-type: text/html\n\n";
print "Hello world!";

Каждый файл запрашивался 50.000 раз в 50 потоков (“ab -c 50 -n 50000 …”). Засекалось время в секундах за которое полностью выполнится тест.

Время выполнения теста (в сек.):

HTML PHP CGI
apache 1.3.41 5 22 152
apache 1.3.41 с suexec - - 229
apache 1.3.41 с suphp - 388 -
dklab apache 395 293 497

Стоит отметить, что тест синтетический и показывает не то, чтобы реальные цифры производительности, а скорее сколько времени требуется apache‘у для того, чтобы переключить пользователя от которого работает процесс. К примеру, dklab apache c mod_php на реальной живой системе показал всего лишь ~7-10% разницу в потреблении ресурсов CPU по сравнению с mod_php на обычном apache.

Видео с Highload 2009. Блиц-доклады

Видео доклад с конференции Highload 2009.

Название: Блиц-доклады
Год: 2009
Докладчик: Разные докладчики
Компания: N/A
Язык доклада: Русский
Описание: Блиц-доклады – это серия коротких докладов, по 5 минут каждый. На видео представлены 9 докладов:

1. “Виртуальные хосты веб-сервера Apache. Проблемы и решения для массового хостинга“. Кратко: при многотысячном числе виртуальных хостов рестарт apache’а происходит 15-20 секунд. Доклад о том, как этого избежать.

2. “9 способов ответить на HTTP GET“. Беглый обзор и сравнение CGI, mod_perl, FastCGI, ngx_perl, POE, HTTP::Daemon, AnyEvent, HTTP::Engine, PSGI.

3. “Как мы используем nginx“. Представитель mail.ru рассказывает о том, как прикручивали геобазу к существующему проекту.

4. AnyEvent. Обзор возможностей метафреймворка AnyEvent

5. “Python и высокая нагрузка“. Следует ли использовать python там, где нужна высокая нагрузка.

6. “Perl 6 на высоких нагрузках“. Заметка о компиляторах perl 6.

7. “РНР-разгон“. Некоторые аспекты оптимизации PHP кода.

8. Функционал “Мир Тесен” внутри “Вконтакте”. С технической стороны польза от доклада равна нулю, поскольку техническая сторона отсутствует в принципе. Спонсорский доклад, чистая реклама.

9. “PowerDNS в масштабах хостинг-провайдера“.

Подробнее »

Видео с Highload 2009. Модернизация высоконагруженного проекта на примере Рамблер ТОП100

Видео доклад с конференции Highload 2009.

Название: Модернизация высоконагруженного проекта на примере Рамблер ТОП100
Год: 2009
Докладчик: Антон Горохов
Компания: Рамблер
Язык доклада: Русский
Описание: Осень 2007 года. Проходит первый Highload, набирают обороты “Одноклассники”, кругом говорят о Google и читают Roem.ru.

Рамблер ТОП100 перестает справляться с нагрузкой в 10000 хитов в секунду, и этого уже не скроешь.

При модернизации одного из старейших проектов Рамблера было необходимо минимизировать время простоя и сохранить все его основные свойства. Т.е. провести ее незаметно для пользователя.

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

В докладе пойдет речь о том, что и почему изменилось в архитектуре Рамблер ТОП100 за последние два года. (А также о том, что было решено не изменять).

Подробнее »

Rambler's Top100