RSS
 

Posts Tagged ‘freebsd’

FreeBSD и OpenSVC

16 Jun

Команда FreeBSD радует как минимум пару раз в месяц. Совсем недавно было объявлено об активном развитии инфраструктуры jail(8), а теперь очередная новость – в FreeBSD доступен OpenSVC, инструментарий для организации cloud computing. Не стоит думать, что подобные технологии – удел больших цифродробительных датацентров: данные технологии существенно упрощают жизнь инженерам даже в средних проектах, будь то более-менее масштабная почтовая система либо отказоустойчивые вэб-приложения.

Как BSD-шник со стажем (некоторые, однозначно, стаж имеют больше, я же начинал с BSDi ‘s BSD/386, которая BSD4.3-based), я это максимально приветствую – FreeBSD Foundation наконец начала движение в правильную сторону. Жаль только, что приходится догонять не только Linux, но и массу других решений в области виртуализации и отказоустойчивости. Времени упущено много.

 

FreeBSD и виртуализация – неужели будет шаг вперед?

10 Jun

Сегодня пришел анонс от FreeBSD Foundation, в котором говорится о том, что получен грант на развитие инфраструктуры jail(8), в частности, будет уделено значительное влияние виртуальной сетевой подсистеме. Стоит отметить, что использование jail(8) значительно экономит ресурсы по сравнению с “полными” виртуальными средами типа VMWare или Xen, так как эмулируется не “полная” i386-машина, а, скажем так, расширенный userland с “виртуальным” root в выделенном окружении. С одной стороны, это существенно экономит ресурсы, что особенно важно для хостинг-провайдеров. Больше клиентских VPS на “физическом” сервере – ниже цены и больше клиентов. С другой стороны – нет возможности, скажем, загрузить свой модуль в ядро либо поменять какой-либо системный параметр в sysctl(8) – но так ли уж часто это нужно делать в VPS ? Для высокопроизводительных сервисов все равно нет вариантов – использовать выделенный визический сервер и/или cloud.

Но вернемся к FreeBSD. В отличие от мира Leenjux, где вокруг OpenVZ построено большое количество оболочек для хостеров (коммерческих и не очень – на любой карман и бюджет), для FreeBSD появилась только одна мне известная коммерческая попытка от ISP System – их VDS Manager. К сожалению, потестировать его так и не удалось – остановило то, что в нем используется “модифицированное ядро FreeBSD”.

Но вчерашний анонс меня, как старого BSD’шника, обрадовал. Он означает, что правильная серверная ОС будет использоваться не только в качестве guest OS в VPS, но и в качестве хост-машины. Жду-недождусь :)

 

Хозяйке на заметку: FreeBSD и большие массивы

27 мая

Если вам придется поднимать под FreeBSD большой дисковый массив (более 2Тб – созданный, например, с помощью RAID-контроллера), случится несколько неприятный момент. fdisk и disklabel не умеют корректно работать с подобным объемом и вместо, скажем, 3Тб (2 диска по 1.5Тб в STRIPE) вы получите несколько поменьше:

iptvts2# df -g /mnt
Filesystem    1G-blocks Used Avail Capacity  Mounted on
/dev/aacd0s1d       718    0   661     0%    /mnt

Если такое случилось, паниковать не нужно. Во-первых, жестоко уничтожаем информацию о разделах на диске с помощью универсального способа – dd(1):


iptvts2# dd if=/dev/zero of=/dev/aacd0 bs=1k count=500
500+0 records in
500+0 records out
512000 bytes transferred in 0.026223 secs (19524886 bytes/sec)

Затем используем glabel(8) для создания метки:


iptvts2# glabel label timeshift1 /dev/aacd0
iptvts2# glabel list
Geom name: aacd0
Providers:
1. Name: label/timeshift1
Mediasize: 2995729202688 (2.7T)
Sectorsize: 512
Mode: r0w0e0
secoffset: 0
offset: 0
seclength: 5851033599
length: 2995729202688
index: 0
Consumers:
1. Name: aacd0
Mediasize: 2995729203200 (2.7T)
Sectorsize: 512
Mode: r0w0e0

Вот и все. Теперь можно делать newfs(8) на /dev/label/timeshift1 и пользоваться массивом.

 

shflags, FreeBSD и ошибка expr

05 мая

После миграции моего мегаскрипта для подготовки видеоконтента с linux на правильную ОС возникла ошибка expr(1):

expr: illegal option -- s
usage: expr [-e] expression

Ошибка генерируется внутри shflags – в сторону expr(1) передается параметр, начинающийся с ‘-’ (минус), чего штатный expr(1) не принимает. Оставим в сторону его корректность или некорректность в данном конкретном случае.

Выйти из ситуации можно достаточно просто: идем в  /usr/ports/sysutils/coreutils, делаем make install clean и получаем установленные GNU Coreutils. Версии утилит имеют префикс g – gexpr, gkill, gdu и т.п. Полный список можно посмотреть в pkg-descr, расположнном в каталоге /usr/ports/sysutils/coreutils.

Итак, мы имеем установленный более другой expr(1) с именем gexpr. Открываем /usr/local/lib/shflags, меняем все строки expr на gexpr и, вуаля – наш суперскрипт работает без проблем.

 

Что лучше nginx ? Спарка nginx + lighttpd !

04 Mar

Пришлось тут переносить один свой любительский сервер на более другое железо. nginx + php в fastcgi, все как обычно, да только со спецификой – раздача файлов. Началось с жесткого (даже экстремального) тюнинга прямо под нагрузкой FreeBSD 7 (сразу накатывайте до stable, 7.0-RELEASE под большой нагрузкой может подложить свинью. Именно может – media.itl.ua отработала на 7.0-RELEASE несколько месяцев, отдавая 300-400Мбит/с в среднем). Затем пришлось заниматься фишками – разные лимиты по разным зонам (допустим, своим отдаем просто без лимитов, в KH-IX – не более 10 сессий с 1 IP, каждая сессия не более 5Мбит/с, остальным – не более 100 соединений вообще, не более 2 или 5 сессий с 1 IP со скоростью каждой сессии, скажем, 200Кбит/с. Прибавим сюда необходимось делать уникальные (не вечные) ссылки.

Оказалось, что на чистом nginx это сделать сложно (если, конечно, не взять в руки C и не написать пару модулей, для чего я уже стар). Лимиты скорости в зависимости от IP в nginx сделать можно достаточно просто, но для уникальных ссылок, ограничения общего количества коннекшнов пришлось ставить бэкэндом lighttpd. Работает, и работает достаточно быстро. В принципе, можно бы обойтись и только lighttpd (поддержка FastCGI там есть), но все-таки по удобству настройки и стабильности nginx (предположительно) лучше.

Кстати, если использовать активно sendfile, можно легко на нагруженном тазике попасть в deadlock. Такое приключилось пару раз, пока я не понял, в чем было дело.