Ошибка на kern.maxswzone на FreeBSD

Март 2nd, 2010

Однажды ночью сервер перестал отвечать на всяческие запросы кроме пинга. Начальство меня разбудило и полез я разбираться.. Так как сервер ни на что не отвечал – пришлось его перезагрузить.. Жалко было терять аптайм в 200 дней =)

Далее я в логах обнаружил строку kernel: swap zone exhausted, increase kern.maxswzone

Довольно странно – судя по mrtg и логам ROR нагрузки на сервак не было, трафика было мало так как ночь и выходные – только нечастые обращения терминалов к процессингу.. Оперативки достаточно – 12 гигов стоит и используется чуть больше половины, свап тоже есть, но при таком количестве памяти FreeBSD брезгует пользоваться свапом.

Оказалось что не удовлетворительное значение переменной kern.maxswzone сгубило сервак (а установлено по умолчанию было kern.maxswzone: 33554432).

По совету опытного знакомого админа увеличил значение этой переменной в 3 раза и прописал в loader.conf – kern.maxswzone=”100663296″

Почему  же сервер год работал и не падал – не известно.. вероятно что-то случилось с пасажиром…

Тонкости настройки apache как бэкэнда для nginx

Март 2nd, 2010

Хочу упамянуть про некоторые вещи, которые следует учесть при настройке apache.

Во-первых отключаем Keep Alive, для чего проставляем KeepAlive Off

Во вторых настраиваем кол-во соединений.. тут нужно обеспечить балланс расхода оперативной памяти и кол-ва обслуживаемых соединений. У меня апач скомпилен как префорк и по этому настройка такая

<IfModule mpm_prefork_module>

StartServers          8
MinSpareServers       8
MaxSpareServers       32
MaxClients            100
MaxRequestsPerChild   1024

</IfModule>

Мне оперативку жалеть не к чему, тем более что динамику обрабатывает SpawnServer Passenge =)

до этих подстроек раз в 2 недели приходилось перезапускать apache, иначе сайты на Ruby On Rails которые работают под пассажиром начинали переставать отвечать на запросы.

Некоторые проблемы e-mail

Сентябрь 21st, 2009

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

Обычно я настраиваю почтовую связку Postfix + Cyrus Sasl2 + Courier Pop3/Imap + Mysql + Postfixadmin + Postgrey. Но дело совсем не в связке. =)

  1. Самая распространенная проблема – не прописанная реверсивка… Принимающая сторона может не принять сообщение – таких серверов много. Смотрите maillog и просите хостера прописать на ваш ip реверсивную запись, или поищите такую возможность в панели администрирования (например у мастерхоста есть такая прелесть).
  2. Регулярно проверяйте не фигурирует ли ваш ip в листах спамеров (такое случается). Когда вам из Янедекса, Мэйла и прочих сервисов будут возвращаться письма с ошибками -  пишите им в поддержку, цитируя ошибку из вернувшегося письма.
  3. Не прописана текстовая SPF запись… Её надо прописать в dns зоне каждого домена с которого будет уходить почта. Выглядит это чудо техники как

domain.com.       IN      TXT      “v=spf1 ip4:XX.XXX.XXX.XX  a mx ?all”

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

Если к вам не доходят то надо смотреть не забанил ли их антиспам, postgrey или ещё кто..

Резервное копирование mysql-базы. мой путь =)

Сентябрь 17th, 2009

Задача стояла такая – часто бэкапить базу + экономить место на харде.
Прочитав одну статейку по созданию инкрементального бэкапа для дампов через diff понял что это всё бредятина какая-то.
Промелькнула мысль – а почему бы не заливать дамп базы в git? Ведь можно будет и откатиться на нужный коммит, и склонировать репозиторий для экспериментов, и вкушать все прелести данной системы. =)
Сразу определися – я делал всё под FreeBSD. Следовательно под Linux нужно будет подпилить напильничком.
Ну, начинёмс! Сначала ставим гит (если нет в системе)!
Предварительно обновив порты пишем cd /usr/ports/devel/git && make install clean
Git поставился. Выбираем место для папки с бэкапом базы и создаём папку mkdir /backup/bases/test
Далее cd /backup/bases/test и инициализируем там репозиторий командой git init
Я написал скрипт который дампит базу потаблично, добавляет файлы в репозиторий и создаёт коммит с датой бэкапа

#!/usr/local/bin/bash
backupurl=”/backup/bases/test”
for i in `/usr/local/bin/mysql -e “use test;show tables;” -uUSER -pPASS|tr -d “|”|grep -v “Tables_in_”`;do /usr/local/bin/mysqldump –quick –skip-extended-insert –dump-date=false –compact=true -uUSER -pPASS test $i >$backupurl/$i.sql;done
/usr/local/bin/mysqldump  -uUSER -pPASS –no-data test > $backupurl/structure.sql #отдельно бэкапим структуру базы
cd $backupurl
/usr/local/bin/git add . #добавляем файлы
sleep 2
/usr/local/bin/git commit -am “backup `date +%d.%m.%y.%H.%M`” #коммит с чилом и временем

Запечатываем данный скрипт в файл, делаем его исполняемым и плюхаем в крон.
Далее после нескольких бэкапов заходим в папку с бэкапом базы и пишем git log – вам выведется история наших бэкапов.
Напоследок:

  1. Читайте документацию по гиту
  2. Поставьте в крон (в зависимости от объёмов базы.. лично у меня раз в сутки) команду cd /backup/bases/test && git gc – это серьёзно сжимает репозиторий
  3. Для отката желательно склонить репозиторий и сделать откат через git reset HEAD^^
  4. Опция –skip-extended-insert ОБЯЗАТЕЛЬНА. она запрещает расширеные инсерты которые сводят на нет всю мою затею с гитом

Памятка

Сентябрь 9th, 2009

Голова моя дырявая.. Иногда забываю полезные команды которые обладают некой громоздкостьюю их буду писать сюда с коментариями

diskinfo -t /dev/aacd0 #тесты производительности диска делальное
diskinfo -c /dev/aacd0 #тест частичный

cvsup -g -L 2 /usr/local/etc/supfile #обновление портов по cvs

history | awk ‘{a[$2]++}END{for(i in a){print a[i] ” ” i}}’ | sort -rn | head #список частовводимых комманд

netstat -an|grep tcp | wc -l #кол-во активных соединений на tcp

netstat -an|grep udp | wc -l #кол-во активных соединений по udp

find -iname “*.mp3″ -print0 | xargs -0 mid3iconv -e CP1251 –remove-v1 #рекурсивное перекодирование тегов

список дополняется =) только начал собирать всё в кучу

Begining

Сентябрь 8th, 2009

Вот и я дозрел до создания своего блога… Когда-то я работал сисадмином в одной веб-студии – первое время сайты лились рекой, разработчики постоянно начинали юзать новые фишки со стороны сервера. Первое время мне всё было в новинку – и FreeBSD после Linux и svn и некоторые другие вещи. Я немного поднатаскался, организовал нормальную структуру сети, поднял все нужные сервисы сети (до меня сисадмина там не было и этим занимались все сотрудники по очереди – бардак был полный). Но по прошествии некого времени я там заскучал – всё настроено, всё работает, приходилось создавать имитацию работы – читать баш в исходном коде страницы, пялиться с умным видом в вывод netstat –an | grep ESTABLISHED.. короче делать всё чтоб директор не увидел что я гоняю лофу и не заваливал работой левой, которую ему надо делать самому, а ему было лень (сканировать, печатать таблички)..

Я вконец офигел от такого времяпровождения, да ещё и за маленькую и задерживаемую зп. Через знакомую нашёл др. работу так как в нашем городе мало требуются админы занимающиеся *nix системами, в основном берут на работу мальчиков которые умеют в винде делать принтер сетевым за 4-5 т.р. в месяц.

На новой работе пришлось освоить оч много нового. По этому я и взялся писать блог. Может к чему путному приведёт, да и не пропадёт то что я знаю – как никак задокументировано будет.