Во избежание потенциальных проблем с удаленным обновлением ядра, я пользуюсь механизмом fallback, реализованном в grub уже довольно давно.
В данном случае используется grub2, принятый по умолчанию в Debian Wheezy.
Обязательные элементы конфига загрузчика:
GRUB_DEFAULT=saved GRUB_CMDLINE_LINUX_DEFAULT="panic=30"
В случае kernel panic сервер будет автоматически возвращен в последнее стабильное ядро. Мой конфиг загрузчика:
# grep ^[^#] /etc/default/grub GRUB_DEFAULT=saved GRUB_TIMEOUT=15 GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` GRUB_CMDLINE_LINUX_DEFAULT="intel_iommu=on panic=30" GRUB_CMDLINE_LINUX="" GRUB_DISABLE_OS_PROBER=true
Просматриваем доступные загрузчику ядра:
# grub-mkconfig 2>/dev/null | perl -ne 'print "$1\n" if m/^menuentry.+?'\''(.+?)'\''/' Debian GNU/Linux, with Linux 3.11.0-031100rc5-generic Debian GNU/Linux, with Linux 2.6.32-23-pve
Текущее ядро - стабильное, при проблемах мы вернемся именно в него:
# uname -rs Linux 2.6.32-23-pve
Выставляем его в fallback:
# grub-set-default 'Debian GNU/Linux, with Linux 2.6.32-23-pve'
Ядро 3.11-rc5 является релиз-кандидатом, но в нем на данный момент наиболее полно реализована поддержка новых чипсетов под процессоры Haswell.
Команда grub-reboot разрешит загрузиться этому ядру только один раз. Реальной перезагрузки не произойдет.
# grub-reboot 'Debian GNU/Linux, with Linux 3.11.0-031100rc5-generic'
Инсталляции Debian, произведенные не через debian-installer, зачастую не содержат в себе post-hook на перегенерацию initrd.
Поэтому выполняем его вручную:
# update-initramfs -k all -u
Обновляем конфиг загрузчика:
# update-grub2
Перезагружаем сервер в новое ядро:
# reboot
В случае успешной загрузки нового ядра сообщаем grub'у что теперь будем использовать обновленную версию:
# grub-set-default 'Debian GNU/Linux, with Linux 3.11.0-031100rc5-generic'
Все просто.
apt-get install tasksel aptitude install ~pstandard ~prequired ~pimportant -F%p
/etc/apt/apt.conf не должен содержать в себе упоминаний APT::Default-Release
/etc/apt/sources.list
deb http://mirror.yandex.ru/debian/ wheezy main contrib non-free deb http://mirror.yandex.ru/debian/ jessie main contrib non-free deb http://security.debian.org/ jessie/updates main contrib non-free
Для отката с testing до stable достаточно внести в /etc/apt/preferences следующие записи:
Package: * Pin: release a=stable Pin-Priority: 1001 Package: * Pin: release a=testing Pin-Priority: 900 Package: * Pin: release a=unstable Pin-Priority: 800 Package: * Pin: release o=Debian Pin-Priority: -1
Если команда apt-cache policy выдает правильные приоритеты, то поочередно выполняем apt-get upgrade и apt-get dist-upgrade, после чего мы остаемся на ветке stable.
Теперь можем добавить в /etc/apt/apt.conf строку APT::Default-Release "wheezy";
На многих веб-серверах установлены php-скрипты, скомпилированные под старую версию Zend.
Из-за этого пришлось собирать php 5.2 на wheezy, что оказалось несколько нетривиальной процедурой.
# apt-get build-dep php5
# mkdir -p /opt/src # cd /opt/src # wget http://museum.php.net/php5/php-5.2.17.tar.bz2 # tar xf php-5.2.17.tar.bz2
По возможности, избегайте этого, задавая LIBRARY_PATH и libdir при конфигурации
#!/bin/sh CFLAGS="-O2" LIBRARY_PATH=/usr/lib/x86_64-linux-gnu ./configure --prefix=/opt/php-5.2.17 \ --with-libdir=lib/x86_64-linux-gnu \ --enable-calendar \ --enable-sysvsem \ --enable-sysvshm \ --enable-sysvmsg \ --with-jpeg-dir \ --with-mcrypt \ --with-mysql \ --with-mysqli \ --enable-bcmath \ --with-bz2 \ --with-gd \ --with-zlib-dir \ --with-curl \ --enable-sockets \ --with-iconv \ --enable-mbstring \ --enable-mbregex \ --enable-ctype \ --enable-shmop \ --enable-wddx \ --with-freetype-dir \ --with-xmlrpc \ --enable-dbase \ --with-mime-magic \ --with-mhash \ --with-gettext \ --with-pear \ --with-apxs2=/usr/bin/apxs2
Если пан мае багато вильного часу та натхнення, то можно попробовать забекпортить и собрать suhosin.
Congratulations, your wiki is now up and running. Here are a few more tips to get you started.
Enjoy your work with DokuWiki,
– the developers
Your wiki needs to have a start page. As long as it doesn't exist, this link will be red: Last updates.
Go on, follow that link and create the page. If you need help with using the syntax you can always refer to the syntax page.
You might also want to use a sidebar. To create it, just edit the Tags Cloud page. Everything in that page will be shown in a margin column on the side. Read our FAQ on sidebars to learn more.
Please be aware that not all templates support sidebars.
Once you're comfortable with creating and editing pages you might want to have a look at the configuration settings (be sure to login as superuser first).
You may also want to see what plugins and templates are available at DokuWiki.org to extend the functionality and looks of your DokuWiki installation.
DokuWiki is an Open Source project that thrives through user contributions. A good way to stay informed on what's going on and to get useful tips in using DokuWiki is subscribing to the newsletter.
The DokuWiki User Forum is an excellent way to get in contact with other DokuWiki users and is just one of the many ways to get support.
Of course we'd be more than happy to have you getting involved with DokuWiki.
Максимальный размер fs, который поддерживает ext4 - 16TB, в связи с чем на 16TB+ массивах приходится использовать btrfs.
Операционная система: Linux CentOS 6.x amd64 последней версии Роль сервера: хранилище Описание хранимых данных: 10% файлы по 5-7 Mb, 90% файлы 0.5-5Gb Рейд-контроллер: Просьба сразу обновить firmware на raid-контроллере до последней версии, предварительно сохранив копию заводской прошивки. Убедиться что не будет проблем с HDD firmware и данной моделью контроллера. При необходимости обновить прошивку и на дисках. Если у рейд-контроллера есть возможность отправки почтовых извещений о проблемах - настроить ее. Совместимость дисков: http://www.adaptec.com/en-us/_common/compatibility/ IPMI: Если есть возможность - крайне желательно подключить ipmi-интерфейс в dedicated порт и выделить отдельный IP. Если внешнее подключение невозможно и если позволяют стойки - соединить порт ipmi-интерфейса SOHO-свитчом с 2nd NIC любого из серверов. Очень важно чтобы ipmi-интерфейс не работал в shared режиме через сетевые интерфейсы сервера. Иначе при аппаратных проблемах сервер будет полностью недоступен. Так же следует обновить прошивку IPMI-интерфейса, т.к. у Supermicro очень часто бывают проблемы с удаленной работой через консоль IPMI. Система: лучше если это будет программный mdadm-рейд на 2 диска, подключенных к материнской плате, а не к контроллеру т.к. надо оставить возможность загружаться в ОС вне зависимости от состояния контроллера Swap: не использовать вообще Корневая файловая система: единым разделом /dev/md0 подмонтировать в / файловая система ext3 или ext4 никаких отдельных разделов создавать не следует опции монтирования в /etc/fstab оставить по-умолчанию флаги fs так же можно оставить по-умолчанию Приложения: огромная просьба ставить всё нужное из официального репозитория, не собирая ничего из исходников RAID10: Расчет приблизительной производительности рейда http://www.wesworld.net/raidcalculator.html Расчет размера stride http://busybox.net/~aldot/mkfs_stride.html Важно 1. обеспечить автоматический failover при сбоях дисков 2. обеспечить максимальную скорость перестройки массива 3. минимизировать потери дискового пространства Высоких показателей скорости случайного чтения/записи от сервера не требуется. Поэтому необходимо обеспечить максимальную производительность операций линейного чтения и записи. Пожалуйста, выполните в точности описаные ниже действия. Создание RAID10 для 24 дисков: raid10 на 20 диска + 2 диска установить в hotspare stripe size установить в максимальное значение 4096K Файловая система ext4: На массиве будут храниться файлы с размером >4Mb, что позволяет выставить размер блока fs в максимальные 64k. По этой же причине нет нужды в большом количестве инод, поэтому можно уменьшить их общее количество для освобождения зарезервированного места. Это делается при запуске mkfs.ext4 изменением соотношения количества инод к количеству байт с 1 иноды к 16384 байтам на 1 иноду к 32768 байтам. Так же при создании файловой системы ext4 необходимо задать правильный размер stride и stripe-width. stride или размер шага - это количество блоков, которые должны быть прочитаны или записаны на диск перед переходом к следующему. Выставление этого параметра позволяет равномерно распределять метаданные по массиву, не позволяя им скапливаться на одном диске. Если этого не сделать, то в будущем возможно значительное уменьшение скорости работы с RAID-массивом. Stride size = Stripe Size / Block Size stripe width или ширина полосы - параметр, позволяющий задать ширину страйпа в блоках fs. Правильное выставление этого параметра выравнивает файловую систему относительно границ дисков, позволяя избавиться от традиционного недостатка RAID-массивов с контролем четности - операций read-modify-write. Формула расчета stripe width для raid10: Stripe width = Stride size * ( Raid10 Disk Members / 2) Команда для создания файловой системы на raid10 с размером stripe в 4096k: mkfs.ext4 /dev/raid10 –b 65536 -i 32768 –E stride=64,stripe-width=704 Освобождение зарезервированных под суперпользователя блоков, отключение автоматического запуска fsck: tune2fs -i 0 -m 0 -c 0 Точка монтирования raid10: /home Опции монтирования raid10: noatime,nodiratime,errors=remount-ro так же в /etc/fstab два последних поля - fs_freq и fs_passno - должны быть выставлены в 0.
Фантастически полезная вещь для анализа логов вебсервера.
Очень быстро позволяют отловить медленные выполняющиеся запросы, найти использованную уязвимость, определить файлы с самым большим количеством трафика, отфильтровать ддос-ботов, выбрать самые популярные файлы для перемещения на SSD-кеш, собирать гео-статистику в live режиме, а так же железным аргументом дерзко попячить гордое щячло любителей денвера.
Скрипты написаны на python, соответственно, работать должны везде.
Брать по адресу http://code.google.com/p/wtop/
Главная утилита - logrep.
wtop лично мне не пригодился.
Руководство к logrep: http://code.google.com/p/wtop/wiki/UsingLogrep
Примеры использования: http://code.google.com/p/wtop/wiki/LogrepCookbook
Самое замечательное в logrep - это возможность применять к выводимым значениям операторы.
Т.е. мы можем полностью сформировать вывод скрипта, состоящий из заданных нами параметров и с примененными к ним необходимыми операторами.
Полный список выходных параметров, которыми мы можем оперировать, указан в руководстве под строкой AVAILABLE FIELDS.
Ключ -o позволяет указать используемые в output значения, разделенные табуляцией. К каждому выводимому зачению можно применить оператор.
count(*) avg(FIELD) mean average min(FIELD) lowest seen value max(FIELD) highest seen value sum(FIELD) summation of all values var(FIELD) population variance dev(FIELD) deviation (square root of variance)
Ключ -s позволяет нам сортировать список, используя параметры вида -s "LIMIT:FIELDS:DIRECTION",
где LIMIT - это общее количество выводимых строк, FIELDS - выводимые значения, а DIRECTION - направление сортировки: 'd' - descending (по умолчанию), 'a' - acending.
Т.к. изначально скрипт создавался для работы с CustomLog типа combined вебсервера Apache, нам необходимо добавить в формат лога nginx переменную $request_time.
Формат лога для nginx
log_format mp4 '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent "$http_referer" ' '"$http_user_agent" $request_time' ;
Сортировка по top10 URL:
# logrep -o 'url,count(*)' -s '10:2' /home/log/httpd/yziltz.com/access_log /videos/ztod.com/546fg/168nzrr/1.mp4 324 /videos/wtfpass/104ghd/560wyqe/1.mp4 259 /videos/evilangel/1004hf/457elux/1.mp4 205 /videos/ztod.com/546fg/84rqek/1.mp4 203 /videos/wtfpass/104ghd/505dtve/1.mp4 192 /videos/realitykings/986fk/314qiga/1.mp4 173 /videos/wtfpass/104ghd/18ifvr/1.mp4 153 /videos/brazzers/758gf/350ihij/1.mp4 143 /videos/wtfpass/104ghd/533jdzo/1.mp4 125 /videos/bangbros/754hj/100geoo/1.mp4 122
где параметрами -o являются
url - URL файла count(*) - количество всех уникальных вхождений URL,
а параметрами -s
10 - это количество выводимых файлов, 2 - сортировка по полю #2.
В нашем случае поле #2 - это count(*).
Тип сортировки не указан и по умолчанию это 'd' - descending.
Сортировка по top10 URL с отображением дополнительных параметров:
Добавим новые значения в список параметров:
# logrep -o 'url,count(*),avg(msec),sum(bytes)' -s '10:2' /home/log/httpd/yziltz.com/access_log /videos/evilangel/1004hf/457elux/1.mp4 800 63330.12 1265011232 /videos/wtfpass/104ghd/18ifvr/1.mp4 446 55150.93 199966883 /videos/naughty_america/634fs/6kryk/1.mp4 413 66149.11 422437989 /videos/naughty_america/634fs/83nbna/1.mp4 361 41608.23 284347235 /videos/wtfpass/104ghd/606pfgb/1.mp4 352 35669.83 129798205 /videos/wtfpass/104ghd/216pcko/1.mp4 330 50201.86 563510318 /videos/ztod.com/546fg/168nzrr/1.mp4 325 48295.78 238183106 /videos/wtfpass/104ghd/560wyqe/1.mp4 311 121607.30 4415056002 /videos/wtfpass/104ghd/387jkmy/1.mp4 309 52073.58 677026365 /videos/wtfpass/104ghd/505dtve/1.mp4 240 233122.70 1272250219
Дополнительными параметрами будут avg(msec) - среднее время отдачи файла и sum(bytes) - общий трафик, пришедшийся на этот файл.
А теперь добавим фильтр -f, в котором выведем результаты только за последний час (3600 секунд).
Для этого мы применим unixtime как самый простой способ.
# CUR_DATE=`date +"%s"`; HOUR_OFFSET=`echo "$CUR_DATE - 3600" | bc`; logrep -f "ts<$HOUR_OFFSET" -o 'url,count(*),avg(msec),sum(bytes)' -s '10:2' /home/log/httpd/yziltz.com/access_log /videos/ztod.com/546fg/168nzrr/1.mp4 325 48295.78 238183106 /videos/wtfpass/104ghd/560wyqe/1.mp4 267 117390.16 2869373722 /videos/evilangel/1004hf/457elux/1.mp4 225 152913.27 954288822 /videos/ztod.com/546fg/84rqek/1.mp4 203 55998.36 188930211 /videos/wtfpass/104ghd/505dtve/1.mp4 196 216440.77 1093232840 /videos/realitykings/986fk/314qiga/1.mp4 173 203926.49 973211068 /videos/wtfpass/104ghd/18ifvr/1.mp4 161 114550.71 145899888 /videos/wtfpass/104ghd/533jdzo/1.mp4 147 182660.09 1100896430 /videos/bangbros/754hj/100geoo/1.mp4 145 175528.83 609455138 /videos/brazzers/758gf/350ihij/1.mp4 143 213783.88 144107563