Пишу про заинтересовавшие сервисы, блоги, твиттеры, а также собственные идеи и задумки.
4 заметки с тегом

CentOS

Подключаем новый диск к серверу

21 июля 2011, 11:56

Задача: увеличить дисковое пространство путём добавление нового диска к серверу на CentOS 5 или Debian.

Решение:

Первым делом нужно убедиться, что второй диск мы подключили. Вписываем

fdisk -l

Там мы должны увидеть все разделы основного диска, а также новый неподключенный. При этом второй будет ругаться на то, что у него неправильная файловая система. Исправляем эту ошибку, форматируем устройство под систему ext3:

kfs.ext3 /dev/xvdb

Вместо xvdb укажите том своего диска, который высветился при предыдущей команде. Далее создаём раздел:

fdisk /dev/xvdb
Команда (m для справки): n
p
Номер раздела (1-4): 1

Первый и последний цилиндры оставляем по умолчанию (либо указываем первый и последний из предлагаемого диапазона). Записываем таблицу на диск:

w

Проверяем, всё ли в порядке:

fdisk -l

Если наш новый диск отображается с истинным размером, то всё хорошо, можно продолжать. Монтируем его к нужной директории:

mount /dev/xvdb /var/www/html/mysite.ru

Если вы случайно замонтировали диск на заполненную директорию (естественно, в этом случае все файлы в ней будут потеряны) и df -h выдаёт неверную информацию о свободном пространстве, просто перезапустите сервер (команда reboot).

После проведённых манипуляций все файлы, закачиваемые в ту директорию, будут находиться на новом диске.

Если вы подключили диск в качестве хранилища отдельного сайта (виртуального хоста), то не забудьте перезапустить сервисы httpd и nginx (если он у вас установлен). В случае, если httpd будет ругаться на отсутствующий DocumentRoot и, как следствие, выдавать ошибку 403 Forbidden при доступе к сайту, введите команды:

setsebool -P httpd_enable_homedirs 1
chcon -R -t httpd_sys_content_t /директория/к/сайту

И последнее, что нужно сделать — позаботиться о том, чтобы система сама монтировала диск после перезагрузки. Добавьте в файл /etc/fstab строчку вида:

/dev/xvdb /var/www/html/mysite.ru ext3 defaults 0 0

Теперь диск подключен и работает! Поздравляю!

Оптимизируем сервак. eAccelerator

4 марта 2011, 13:34


Уже рассмотрели приёмы освобождения оперативки и установку memcache. Теперь самое сладкое — ускоритель php-скриптов — eAccelerator. При правильной настройке он уменьшит время загрузки страниц до трёх раз!

Хотя с ним возможны и некоторые проблемы, если не расчитать свободной памяти, поэтому, если вы ещё не почитали первую статью и ваш сервер обладает меньше, чем 32 мб свободной оперативки, советую перейти к первой части сначала.

Установка eAccelerator

Узнать о последней версии акселератора можно на http://eaccelerator.net/. На момент публикации, ей является версия 0.9.6.1. Скачиваем и ставим командами из терминала (как обычно, для входа в шелл можно скачать программку PuTTy):

cd /usr/local/src
wget 
bzip2 -d eaccelerator-0.9.6.1.tar.bz2
tar xvf eaccelerator-0.9.6.1.tar
cd eaccelerator-0.9.6.1

Далее нам потребуется phpize. Если при вводе данной команды терминал выдаёт ошибку, то тогда ставим пакет php-devel:

yum install php-devel

Убедитесь, что он установился в /usr/bin/phpize, иначе поправьте следующие директории, если необходимо:

phpize
./configure --enable-eaccelerator=shared --with-php-config=usr/bin/php-config
make
make install

Если возникают проблемы при конфигурировании, попробуйте использовать команду без параметров.

Теперь нужно создать папку, в которой будет храниться кэш акселератора:

mkdir -p /var/cache/eaccelerator
chmod 0777 /var/cache/eaccelerator

Настройка eAccelerator

Далее достаточно тонкий и индивидуальный процесс. Откройте файл php.ini (в /etc/) и в секции [extensions] добавьте следующее:

extension="eaccelerator.so"
eaccelerator.shm_size="16"
eaccelerator.shm_max="0"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"

Перезагрузите httpd:

/etc/init.d/httpd restart или service httpd restart

Введите в шелл команду php -v, чтобы убедиться, что eAccelerator установлен и работает. В сообщении должно быть о нём упоминание.

Возможные ошибки

Если после перезагрузки httpd вам выдаётся ошибка 500 или 502, измените настройки и полностью перезагрузите сервер (частный рестарт httpd не всегда помогает в этом случае).

При ошибках вам нужно исправлять значения shm_size и shm_max. 0 — по умолчанию. Рекомендуемое — 16.

Если в логах ошибок вы обнаружите строки «Cannot allocate shared memory…», необходимо произвести следующие манипуляции:

/proc/sys/kernel/shmmax

Выведенное значение в байтах — максимальный предел выделяемой памяти. Рекомендуется в настройках указывать лишь половину от данного значения.  К примеру, если выдаётся 33554432 (32 Мб), уменьшите значение shm_max в php.ini на 16777216 (16 Мб).

Есть и второй путь — увеличить допустимый предел памяти и, соответственно, увеличить его в настройках акселератора.

echo значение_в_байтах > /proc/sys/kernel/shmmax

И прописать это же значение в файле /etc/sysctl.conf в параметре «kernel.shmmax», не забыв его раскомментировать, если нужно (убрать перед строкой #), чтобы значение автоматически присваивалось при перезагрузке сервера.

Правда, в этом случае есть шанс периодически получать ошибки 500 из-за того, что не хватает оперативной памяти на ускоритель (либо если само ядро не может физически выделять больше).

Оптимизируем сервак. Memcache

4 марта 2011, 12:00


В предыдущей статье я описал пару простых приёмов освобождения оперативной памяти. Сейчас же поговорим насчёт ускорения работы скриптов.

Хорошим тоном нынче является связка Apache + Nginx, которая работает чуть быстрее по сравнению с обычным Апачем, в силу особенностей передачи запросов от Nginx ему. Дополнением к этой связке будет служить мод memcache и eAccelerator, которые призваны кэшировать и ускорять выполнение php-скриптов.

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

Установка memcache. Способ 1

Всё ниже описанное подходит для серверов с CentOS 5 и им подобным.

Зайдите в шелл (для этого можно использовать популярную программку PuTTy) и вводите следующие команды (можно копировать здесь и вставлять туда правой кнопкой мыши):

cd /usr/local/src
wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.1-1.el5.rf.i386.rpm
rpm -ivh rpmforge-release-0.5.1-1.el5.rf.i386.rpm
yum -y install memcached

После чего в файле /etc/sysconfig/memcached и замените параметр OPTIONS на:

OPTIONS="-l 127.0.0.1"

Добавляем memcache в автозагрузку командами:

/etc/init.d/memcached start
chkconfig memcached on

Следующим пунктом нужно установить библиотеку PHP-memcache:

yum -y install php-pecl-memcache

В файл php.ini (в /etc/) в секцию [extensions] внесите строчку:

extension=memcache.so

Перезагрузите httpd:

/etc/init.d/httpd restart

или

service httpd restart

Установка memcache. Способ 2

yum install libmemcache memcached -y

Стартуем:

memcached -d -m 256 -l 127.0.0.1 -p 11211 -u nobody

Можно также добавить в автозагрузку командами из предыдущего способа. Для следующего шага потребуется наличие библиотеки phpize. Если таковой нет, нужно установить php-devel:

yum install zlib-devel

Устанавливаем библиотеку для работы с PHP:

wget http://pecl.php.net/get/memcache-2.1.2.tgz
tar -xvf memcache-2.1.2.tgz && cd memcache-2.1.2
phpize && ./configure --enable-memcache && make && make install

В файл php.ini (в /etc/) в секцию [extensions] внесите строчку:

extension=memcache.so

Теперь библиотека установлена и должна работать. Обычно она ускоряет работу скриптов примерно на 30%.

Оптимизируем сервак. Часть 1.

24 февраля 2011, 1:34

Ну, как и обещал, несколько коротких статей с советами о том, что может помочь ускорить ваш VPS.

Имеется достаточно немаленький по объёму сайт, состоящий из MediaWiki и форума. Поскольку со временем он разросся (хоть и не до таких впечатляющих масштабов, как хотелось бы, но хостеров неприятно впечатлил всё же), пришлось искать новый хостинг. Нашли устраивающий и по цене, и по качеству (о нём я уже писал, оперативный саппорт по-прежнему на высоте).

Но вот незадача: вроде бы купленный VPS и работает, но единственный размещённый сайтец немного тормозит (а MediaWiki — много, время генерации главной страницы было порядка 4-6 секунд).

В один прекрасный момент решил всё-таки получше поштудировать интернетную литературу по данному вопросу. Статей написано немало, потому здесь лишь буду пересказывать их содержимое.

Во-первых, достаточно удобно будет обзавестись FTP-аккаунтом от корня сервера, чтобы проводить манипуляции в нём. В шелле хоть и можно производить действия, но гораздо медленнее. Если есть SSH, то можно попробовать установить и соединение по sFTP с логином и паролем администратора. Например, SmartFTP такое позволяет.

Совет 1

Первым делом, если у вас на серве стоит OpenVZ, то маленькая хитрость существенно увеличит объём свободной оперативки, которая нам частично ещё пригодится.

Найдите файл rc (в моём случае он располагается в /etc/rc.d/) и добавьте где-нибудь вверху строчку:

ulimit -s 1024

Это ограничит потребление ресурсов, которое несколько раздута из-за особенностей OpenVZ. Чем меньше значение (в Кбайтах), тем больше должно освободиться памяти, но всё-таки не стоит с этим перебарщивать. После изменения перезагрузите сервер (командой reboot в шелле, например). Одна строчка освободила порядка 100 Мб оперативки, ну и общая загрузка несколько снизилась.

Совет 2

Если не используете в MySQL базы InnoDB, их можно отключить. Найдите файл my.cnf (у меня он лежит в /etc/) и добавьте в секцию [Mysqld] строчку:

skip-innodb

После сохранения перезагрузите сервер БД из шелла, набрав:

service restart mysqld

или

/etc/init.d/mysqld restart

Отключение этой штуки мне дало около 50-80 Мб освободившейся оперативки.

Часть вторая: Оптимизируем сервак. Memcache
Часть третья: Оптимизируем сервак. eAccelerator