Настраиваем сервер для LiveStreet. Часть VIII. APC, Memcached & Sphinx.
Предыдущие части:
На мой взгляд, на данный момент, есть только два осмысленных варианта настроить кэширование кода и данных (учитывая то, что LiveStreet поддерживает, конечно). Первый вариант — APC + Memcached. Второй вариант — XCache.
Почему?
Из вышеописанного проистекает моё личное мнение:
Еще одно важное замечание: коммуникации между сервисами лучше настраивать не через TCP/IP, а через UNIX socket. В рамках «всё на одном сервере» это и быстрее и надёжней. Именно таким образом настраивалась связка Apache + php-fpm в прошлых частях. Таким же образом, по возможности, будем действовать и дальше.
Слегка правим конфигурационный файл /etc/php5/conf.d/apc.ini:
Копируем GUI для APC в корень нашего сайта:
Чтобы начало работать нужно перестартовать php-fpm.
Убеждаемся что всё работает:
Вносим изменения в конфигурационный файл /etc/memcached.conf. Сначал добавляем в самый конец следующее:
Особое замечание: закомментированная выше опция -I определят максимальный размер объекта данных, который может быть помещён в кэш. По умолчанию = 1m. Менять это значение остро не рекомендуется, однако, в зависимости от конфигурации, плагины LiveStreet могут пытаться запихнуть в кэш нечто большее, что приведёт к характерной PHP-ошибке. Чтобы убрать эту проблему (если вдруг возникнет) можно использовать эту опцию.
Чтобы изменнения вступили в силу перезапускаем:
Простейшая проверка работоспособности:
Для memcached есть несколько GUI высокой навороченности (например phpMemcachedAdmin ), но это всё imho излишество. Я остановил свой выбор на старой версии версии вот этого скрипта. Старой, потому что новая обросла никому не нужными рюшечками, но так и не научилась работать с UNIX socket. Модифицированный мной файл memcache.php взять тут: github.com/Gmugra/memcachephp и закинуть в /var/www/superls.ru/public/. Вызываем:
Идем в консоль и выполняем команду:
В этой команде линк после wget — тот самый что мы нашли на официальном сайте.
После этого устанавливаем командой:
Естественно, с корректировкой номера версии в полученном файле. 2.0.7-release-1 — это актуальное в данный момент.
Однако, последний на данный момент, бинарник sphinx 2.0.7(уж не знаю что будет с будущими версиями) слинкован с MySql 5.1, а у нас стоит MySql 5.5. Поэтому, после установки, нужно дать ему то, что он хочет вот так:
И на этом установка Sphinx завершена.
Продолжение в следующей части. В которой мы наконец-то доберёмся до LiveStreet :)
Часть IX. LiveStreet.
- Часть I. Введение, хостинг и PuTTY.
- Часть II. Vim, файловая система, hostname.
- Часть III. Некоторые настройки ядра, репозитории и базовые утилиты.
- Часть IV. MySQL.
- Часть V. Apache.
- Часть VI. PHP.
- Часть VII. NGINX.
На мой взгляд, на данный момент, есть только два осмысленных варианта настроить кэширование кода и данных (учитывая то, что LiveStreet поддерживает, конечно). Первый вариант — APC + Memcached. Второй вариант — XCache.
Почему?
- Во-первых все остальные PHP оптимизаторы(eAccelerator, например) сильно проигрывают современным версиям APC и XCache. Всесторонне, особенно в разрезе надёжности. ( Особый случай это ZendOptimiser+ — оно, по отзывам, быстрое и надёжное, но не очень открытое и не очень бесплатное. И я, лично, не тестировал )
- Во-вторых, как opcode кэшер APC, актуальных версий, лучше XCache. И быстрее и стабильней. Да, это субъективное мнение. Да, выигрыш незначителен. Но лучше. :)
- А вот с кэшированием данных XCache справляется намного лучше Memcached. И поэтому если говорить именно об общей производительности, то выигрывает XCache. И это вполне ожидаемо, учитывая что Memcached — софт предназначенный, прежде всего, для многосерверных конфигураций.
Из вышеописанного проистекает моё личное мнение:
- Высокая надежность и хорошая производительность = APC + Memcached( и ниже будет описан именно этот вариант).
- Максимально возможная производительность с приемлемой надёжностью = XCache.
Еще одно важное замечание: коммуникации между сервисами лучше настраивать не через TCP/IP, а через UNIX socket. В рамках «всё на одном сервере» это и быстрее и надёжней. Именно таким образом настраивалась связка Apache + php-fpm в прошлых частях. Таким же образом, по возможности, будем действовать и дальше.
Устанавливаем APC
apt-get -t squeeze-backports install php-apc
Слегка правим конфигурационный файл /etc/php5/conf.d/apc.ini:
extension=apc.soНа самом деле, просто добавили пару последних строк. apc.shm_size — определяет сколько памяти выделять. По умолчанию 32M, и этого вполне хватит для не большого сайта. Сколько выделять? — поставить 64, понаблюдать за использованием памяти несколько дней, скорректировать. Более подробно о конфигурационных опциях: www.php.net/manual/en/apc.configuration.php.
apc.enabled=1
apc.shm_size=64M
Копируем GUI для APC в корень нашего сайта:
cp /usr/share/doc/php-apc/apc.php /var/www/superls.ru/public/
Чтобы начало работать нужно перестартовать php-fpm.
/etc/init.d/php5-fpm restart
Убеждаемся что всё работает:
http://superls.ru/apc.php(в прошлой части мы закрыли публичный доступ к этому линку). Если APC заработал как надо, там будет куча текста и картинок. Если нет — так и напишут.
Устанавливаем memcached
apt-get install memcached
Вносим изменения в конфигурационный файл /etc/memcached.conf. Сначал добавляем в самый конец следующее:
# Specify the maximum size permitted for storing an object within the memcached instance.Кроме того вносим в этот файл следующие изменения:
# -I 8m
# Unix socket path to listen on (disables network support).
-s /var/run/memcached.socket
# Permissions (in octal format) for Unix socket created with -s option.
-a 0777
- в строке которая начинается на -m пишем сколько мы выделяем процессу памяти для кэширования (в мегабайтах), по умолчанию там 64(меньше ставить остро не рекомендуется)
- строку которая начинается на -p комментируем
- строку которая начинается на -l комментируем
- в строке которая начинается на -u меняем nobody на root
Особое замечание: закомментированная выше опция -I определят максимальный размер объекта данных, который может быть помещён в кэш. По умолчанию = 1m. Менять это значение остро не рекомендуется, однако, в зависимости от конфигурации, плагины LiveStreet могут пытаться запихнуть в кэш нечто большее, что приведёт к характерной PHP-ошибке. Чтобы убрать эту проблему (если вдруг возникнет) можно использовать эту опцию.
Чтобы изменнения вступили в силу перезапускаем:
/etc/init.d/memcached restart
Простейшая проверка работоспособности:
echo "stats" | socat unix-connect:/var/run/memcached.socket stdio
Для memcached есть несколько GUI высокой навороченности (например phpMemcachedAdmin ), но это всё imho излишество. Я остановил свой выбор на старой версии версии вот этого скрипта. Старой, потому что новая обросла никому не нужными рюшечками, но так и не научилась работать с UNIX socket. Модифицированный мной файл memcache.php взять тут: github.com/Gmugra/memcachephp и закинуть в /var/www/superls.ru/public/. Вызываем:
http://superls.ru/memcache.phpВ прошлой части мы закрыли публичный доступ и к этому линку тоже. Идея так же, что и с APC — наблюдаем за реальным расходом памяти и корректируем настройки.
Устанавливаем Sphinx
Идём сюда: sphinxsearch.com/downloads/release/. Находим наш дистрибутив (для 64bit это будет — Debian 6.0.5 Squeeze x86_64 DEB, для 32bit — Debian 6.0.5 Squeeze i386 DEB ). Кликаем в «Download» справа от нужного дистрибутива. На открывшейся странице ничего не заполняем, просто запоминаем линк, который под текстом «I accept GPLv2, give me the file!» в левом нижнем углу.Идем в консоль и выполняем команду:
wget http://sphinxsearch.com/files/sphinxsearch_2.0.7-release-1_amd64.deb
В этой команде линк после wget — тот самый что мы нашли на официальном сайте.
После этого устанавливаем командой:
dpkg -i sphinxsearch_2.0.7-release-1_amd64.deb
Естественно, с корректировкой номера версии в полученном файле. 2.0.7-release-1 — это актуальное в данный момент.
Однако, последний на данный момент, бинарник sphinx 2.0.7(уж не знаю что будет с будущими версиями) слинкован с MySql 5.1, а у нас стоит MySql 5.5. Поэтому, после установки, нужно дать ему то, что он хочет вот так:
apt-get -f install
И на этом установка Sphinx завершена.
Продолжение в следующей части. В которой мы наконец-то доберёмся до LiveStreet :)
Часть IX. LiveStreet.
67 комментариев
Особенно интересует вопрос тюнинга настроек xcache.
1. XCache, совершено точно, менее стабилен. Я тоже был в восторге от XCache, пока у меня не возникла с ним проблема, приводящая к крашам php-fpm, которую я решить так и не смог. А связка APC+memcached не вызывала проблем стабильности нигде и никогда.
2. Как op code cacher XCache 3.0.1 по производительности проигрывает APC 3.1.9
3. Как дата кэшер XCache выигрывает у memcached. Судя по моим наблюдениям речь идёт о выигрыше в ~25% примерно сравнительно с memcached настроенным через Unix socket. Это очень не мало, да.
В итоге я сознательно описываю наиболее без проблемное решение.
Решение обязано быть стабильным при любых настройках, а уж особенно с настройками по умолчанию. Настройки — это только борьба за производительность.
И уж точно, ни при каких условиях, не должно эпизодически убивать pool php-fpm c «signal 11 (SIGSEGV)» — проблема с которой сталкивается народ(и я в том числе столкнулся), по совершенно разным причинам, что характерно.
APC+memcached будут работать стабильно всегда. чтобы вы там в настройках не навояли. Се ля ви.
Я его уже использую несколько лет, с тех пор как eaccelerator «испортился», использую на апаче и php-fpm, проблем нет. Нагрузка стабильно не мнение 1к соединений в сек. и более 20к юников, 200к пейджвью в сутки, описанных вами проблем не наблюдаю, на сейчас 7 дебиан, до этого был 6 дебиан.
Для меня это все означает только одно — XCache менее стабилен. Это не значит, что конкретно у вас напрмиер будут с ним хоть какие-то проблемы. Это просто значит, что вероятность отхватить проблем с ним больше чем при выборе APC+memcached. Вот и всё.
вообще без кэщирования — 350ms
APC + memcache — 140ms
XCache — 115ms
Кстати, заметил, что Вы почти никогда в своих топиках не указываете версии устанавливаемого ПО (очень редко).
У меня стоит версия 3.1.3p1
Разве только
Зачем?
а в остальном… чуть больше стабильности VS чуть больше производительности. Дело вкуса. Потерю 50ms я лично смогу пережить :)
Подробно об этом в следующей части.
Вы в конфиге закомментировали параметры -l, -p. Так?
В таком случае надо будет указать -s и путь до сокета. Перезапустить memcached и глянуть, что он у вас там точно слушает
Примерно тут указать .
Например «игруки» — > «игрушки»
Подскажите, пожалуйста, где искать проблему?
Установка проблем вызвать не должна, все просто:
1. Снова подключаем репы dotdeb (см. 6 часть)
2. Выполняем apt-get install php5-xcache
Вот мой xcache.ini:
Автоматом кеш сбрасывается раз в сутки, так же управлять можно будет из админки. Параметр xcache.readonly_protection задает кешу режим readonly, что в теории повышает надежность, однако сказывается на производительности(примерно 25%).
Если ОЗУ позволяет — можно выгрузить все в ОЗУ как в случае и с nginx'ом.
Что сказать о стабильности? У меня не было проблем — перевел два сайта общей посещаемостью 3к уников в сутки, запустил рекурсивно с 3 машины siege на 200 соединений по 10 сообщений каждая. Проблем в производительностью не было вообще, держал под нагрузкой до полутора суток. Ни ошибок, ничего. Настройки софта чуть иные, но с Xcache проблем не возникло.
После чего хотел установить sphinx.
Это нормально? Я к тому, что теперь у меня сервер возвразает 500 ошибку Internal Server Error.
Последнее, когда все работало — это после установки memcache. А тепер так. куда копать?
Тут снова со своими ламерскими вопросами. Снова ставлю все с нуля. Вот поставил sphinx. Он вот так ругается:
Это нормально?
Мне, наприер, ни о чем не говорит, что libpq5 is not installed. Что это за библиотека? Почему она не установилась? Чем мне это грозит?
Или вот: error processing sphinxsearch (--install): Так установился сфинкс или нет? Или установился, но с ошибкакми? Судя по всем с ошибками: Errors were encountered while processing: sphinxsearch
И чем мне эти ошибки грозят? Может все будет работать. Или, например, потом все не будет работать.
Вы поймите, у меня нет опыта работы с linux. Поэтому я не в теме, и вне контекста. Как тут поймешь?
С остальным всё вроде понятно, что ничего не поставилось, т.к нет в системе нужных библиотек. Значит её надо установить. Если PostgreSQL не нужен, тогда вообще собрать сфинкс, указав только то, что нужно.
apc.ini чуть отличается, но и как в этом топике написано, также uptime 0 minutes
При этом в APC INFO:
видно, что apc.mmap_file_mask каждый раз меняется при refresh data:
настроил по твоей инструкции мем кеш
у меня дебиан 6.0
все вроде ок прошло
когда меняю в конфиге значиние мемкеш включен на тру:
/**
* Настройка memcached
*/
$config['memcache']['servers'][0]['host'] = 'unix:///var/run/memcached.socket';
$config['memcache']['servers'][0]['port'] = '0';
/**
* Настройки кеширования
*/
// Устанавливаем настройки кеширования
$config['sys']['cache']['use'] = false; // использовать кеширование или нет
$config['sys']['cache']['type'] = 'memory'; // тип кеширования: file, xcache и memory. memory использует мемкеш, xcache — использует XCache
$config['sys']['cache']['prefix'] = 'opensoft'; // произвольный префикс кэша, должен быть уникальным для каждого сайта
сайт кидает ошибку:
Лукавит хостер. php 5.4 есть собранный под шестой дебиан, и он есть в репозиториях dotdeb (правда не в основной ветке, но и не в бетах-тестах, вполне стабилен, но вынесен отдельно).
Вот с php 5.5 да, уже могут быть сложности — насколько я знаю, официально squeeze не поддерживается (хотя при желании запустить можно), и рекомендуется апгрейд до debian 7.