Перейдем к третьем практическому уроку серии и поговорим о настройке Memcached-сервера
Memcached может ускорить работу с базами данных динамического web-сайта. Она должна быть развернута в доверенной сети, где vm01 и vm02 клиенты могут свободно подключиться к нашему серверу. Вам нужно будет ввести следующие команды на vm03 с IP-адресом 192.168.1.12.
Установка Memcached-сервера на vm03
Введите следующую команду yum-менеджера для установки Memcached-сервера на RHEL-подобных операционных системах:
# yum install -y memcached
Установка Memcached-клиента на vm01 и vm02
Возможно, вам придется установить один из следующих пакетов на виртуальных машинах vm01 и vm02 (сервер php5 + Apache / Lighttpd):
- Perl-Cache-Memcached: Perl клиент (библиотека) для работы с Memcached сервером.
- Python-Memcached: Python клиент (библиотека) для работы с Memcached-сервером.
- PHP-PECL-Memcache: PHP расширения для работы с Memcached-сервером.
Настройка memcached
Отредактируем файл конфигурации /etc/sysconfig/memcached введя следующую команду:
# vi /etc/sysconfig/memcached
Пример настройки:
PORT="11211"; USER="memcached"; MAXCONN="1024"; CACHESIZE="512"; ## make sure we accept connection from vm01 and vm02 on 192.168.1.12:11211 OPTIONS="-l 192.168.1.12 -L"
Сохраним и закроем файл. Запустим memcached-сервер:
# chkconfig memcached on # /sbin/service memcached start
Отредактируем файл конфигурации /etc/sysconfig/iptables и убедимся, что только виртуальные сервера vm01 и vm02 имеют соответствующие права на подсоединение к нашему серверу:
## открываем tcp/udp порты vm01 and vm02 для доступа к memcached-серверу ## -A INPUT -m state --state NEW -s 192.168.1.10 -m tcp -p tcp --dport 11211 -j ACCEPT -A INPUT -m state --state NEW -s 192.168.1.11 -m udp -p udp --dport 11211 -j ACCEPT -A INPUT -m state --state NEW -s 192.168.1.10 -m udp -p udp --dport 11211 -j ACCEPT -A INPUT -m state --state NEW -s 192.168.1.11 -m tcp -p tcp --dport 11211 -j ACCEPT
Сохраним и закроем файл. Перезапустим службу iptables следующей командой:
# /sbin/service iptables restart # /sbin/iptables -L -v -n
Увеличение лимитов дескрипторов файлов и портов на vm03
Для нагруженных memcached-серверов следует увеличить количество дескрипторов файлов и IP-портов:
# Увеличить лимит дескрипторов файлов fs.file-max = 50000 # Увеличить число IP-портов net.ipv4.ip_local_port_range = 2000 65000
Применим sysctl-команду, что бы измененные параметры ядра Linux-системы вступили в силу:
# sysctl -p
habr.com
В рамках подробного изучения внутренней кухни мемкэша я обнаружил несколько нюансов, которые позволяют существенно увеличить количество запросов в секунду (request per second) к данным, хранящимся в мемкэше, а также повысить эффективность использования оперативной памяти. По итогам моих экспериментов я выделил 4 основных пункта, каждый из которых существенно влияет на производительность:
1. Доступ к демону осуществляется быстрее через сокеты (что, в принципе, и не удивительно).
2. Библиотика PECL Memcached работает быстрее, чем PECL Memcache (а вот это для меня оказалось сюрпризом).
3. Настройки для библиотек по-умолчанию использовать нельзя, надо конфигурировать самостоятельно.
4. Настройки для демона memcached также необходимо подстраивать под сервер и используемую среду, дефолтные никуда не годятся.
Давайте теперь рассмотрим эти пункты более подробно.
Важно: вся конфигурация представлена для работы под CentOS. Для других систем настройки и расположения файлов могут незначительно отличаться.
Часть первая. Использование сокетов
Не секрет, что сокеты работают быстрее, чем сетевой протокол. К тому же поменять сетевой протокол на сокет достаточно просто, и не требует никаких существенных телодвижений, кроме небольших правок в конфигурационном файле демона.
По-умолчанию настройки демона мемкэша лежат в файле /etc/sysconfig/memcached и выглядят следующим образом:
Будем полагать, что наш сайт более-менее нагружен, и под мемкэш мы можем выделить хотя бы 2 гб памяти. Таким образом, подключение сокета вместо tcp соединения будет выглядеть следующим образом:
После сохранения настроек перезапустите memcached:
Теперь надо настроить модуль Memcache Storage на работу с нашим сокетом. Для этого достаточно в settings.php дописать такую настройку:
Вот и вся хитрость. Уже после этих настроек вы получите прирост в скорости работы с мемкэшем. Однако сокеты всё же имеют какой-то предел на количество одновременных подключений к нему. И если нагрузка на него слишком большая, то он может стать бутылочным горлышком при обращении к оперативной памяти. В этом случае можно использовать несколько сокетов.
Настройка нескольких сокетов несколько сложнее. Я накидал свой конфиг для этих целей (всё тот же файл /etc/sysconfig/memcached):
Этот файл запускает 2 демона мемкэша, каждый из которых работает через свой сокет. Для того, чтобы поменять количество запущенных демонов и объём их оперативной памяти, достаточно поменять параметры здесь:
Давайте коротко расскажу о смысле этих строк:
- start_instance — название функции, которая запускает работу memcached.
- default — название сущности. Может быть любым.
- 2048 — количество памяти в мегабайтах, которое выделится для работы демона.
- /var/run/memcached/memcached.socket0 — путь к сокету. Для добавления ещё одного сокета просто поменяйте последнюю цифру.
Ну и конечно, если добавляете ещё одну сущность мемкэша, не забудьте добавить в конфиг её остановку:
Для двух сокетов настройки Memcache Storage в settings.php будут выглядеть так:
Для более подробного мануала внимательно читайте README.
Часть вторая. PECL Memcached vs PECL Memcache
Изначально я был уверен, что PECL Memcache быстрее, чем PECL Memcached. Подтверждения этому я находил в тестах, проведённых различными разработчиками на просторах интернета. Однако потом мудрые люди натолкнули меня на идею попробовать сделать тесты самостоятельно. В результате оказалось, что PECL Memcached несколько быстрее своего аналога. А если его ещё и правильно настроить — он оказывается существенно быстрее.
Обратите внимание, что минимальная версия PECL Memcached, которая работает с Memcache Storage — 2.0.1. При использовании более старых версий я гаратнировать стабильность и скорость работы не берусь.
Помимо установки расширения PECL Memcached на сервере (если на нём уже стоит PECL Memcache), в settings.php надо указать, какое из расширений использовать в качестве связующего звена между клиентом и демоном memcached:
Часть третья. Настройка PECL Memcached.
Поигравшись со всеми настройками расширения pecl memcached, я получил наиболее оптимальный набор, который даёт прирост в скорости:
Подсказка: на некоторых серверах Memcached::OPT_BINARY_PROTOCOL лучше поставить в FALSE.
Часть четвёртая. Настройка демона memcached.
У memcached есть масса собственных настроек, с которыми его можно запускать. Понаблюдав за нескольми серверами, на которых стоит мемкэш и их взаимодействием с Друпалом, я вывел свой конфиг, который приносит хороший результат как в производительности, так и в эффективном использовании памяти:
В этом конфигурационном файле запускается 2 сокета — один для кэша страниц, второй для остального кэша. Это позволяет мне отдавать кэш анонимам и авторизованным пользователям через разные сокеты, что ведёт к увеличению пропускной способности.
Теперь о настройках, которые я добавлял:
- -a 0766: маска доступа к файлу с сокетом. По идее это оптимальный вариант. На 0755 мемкэш ругается, что нехватает прав на работу с файлом, а 0777 уж слишком небезопасно.
- -c 2048: количетво одновременных подключений к мемкэшу. Учитывая, что это число дублируется для каждого сокета, мне пока хватает. И не думаю, что скоро придётся это число менять.
- -f 1.07: фактор роста размера chunk’ов. Не буду вдаваться в подробности фрагментации памяти мемкэша, но смысл такой: чем меньше этот показатель, тем эффективнее использование памяти (уменьшается показатель wasted). Однако в то же время, чем меньше этот показатель, тем чаще из памяти начинают выбрасываться записи кэша, у которых не истёк срок годности (eviction per second). Поэтому важно словить баланс между количеством памяти и этим показателем, при котором эффективность будет максимальная. Для себя я его нашёл: параметр -f колеблется от 1.07 до 1.1 на разных Drupal проектах.
- -n 512: минимальный размер chunk’a, с которого начинается умножение на фактор роста (-f). Учитывая что Друпал в основном хранит массивы, оставлять значение по умолчанию (64 байта) крайне неэффективно. Опять же, как показывает мой опыт — на более-менее серьёзном проекте практически нет кэшированных данных, размером меньше 500 байт. А необходимости в бесполезной трате памяти я не вижу.
- -L: попытка использование больших страниц памяти. При этой настройке мемкэш пытается объеденить всю предоставленную ему память в один большой chunk. Этот параметр позволяет улучшить производительность при работе с мемкэшем. Однако он может быть недоступен на некоторых операционных системах.
- -v 2>> /var/log/memcached/memcached.$1.log: логирование ошибок и уведомлений при работе с мемкэшем. Может быть полезным, если его начинает штормить по непонятным причинам.
Если мой конфиг не запустится с первого раза, попробуйте сделать 2 вещи:
1. Уберите параметр -L из него (как я уже говорил — он не везде работает).
2. Создайте директорию memcached в /var/log.
А теперь о настройках Memcache Storage для эффективной работы:
Исходя из вышеуказанных настроек, а также учитывая опыт снижения нагрузки на сервер для анонимных пользователей, мой текущий конфиг settings.php выглядит таким образом:
По поводу последней строки конфига — да, Memcache Storage уже позволяет вынести механизм блокировки потоков в memcached 🙂
drupalace.ru
Данная статья носит характер «Скорой помощи». Развернутое описание конкретных действий, которые позволять установить и настроить memcached на сервере.
Начнем с определения.
Memcached — программное обеспечение, реализующее сервис кэширования данных в оперативной памяти на основе хеш-таблицы.
Начальные данные:
- VPS, работающий на операционной системе Debian;
- действующий сайт, к которому можно обратиться по FTP, SSH.
Начнем с последнего пункта. За счет запущенного интернет-ресурса (или его подобия) мы можем просто и быстро выяснить что у нас установлено (быть может, что среди прочего мы найдем и memcached). Создадим файл с названием info.php
, в котором напишем:
<?php phpinfo(); ?>
Выполним код, обратившись в по адресу http://example.com/info.php
:
Если среди всего прочего вы отыскали похожую запись — значит все в порядке и дело уже сделано. В противном случае — этот результат мы получим по итогам действий, описанных в данной публикации.
Установка сервера Memcached
Запустим установку командой
apt-get install memcached php5-memcache
Ожидаем завершения установки. После проверим результаты командой netstat
netstat -tap | grep memcached
В результате получаем:
tcp 0 0 *:11211 *:* LISTEN 13053/memcached
Как мы видим, по умолчанию memcached по-умолчанию «слушает» порт 11211. Следовательно, через данный порт любой желающий сможет подключится и использовать наш memcached-сервер. Обезопасим себя, дадим такое право только своему серверу (localhost). Откроем файл /etc/memcached.conf
через панель управления, либо через консоль:
vi /etc/memcached.conf
Данный файл содержит подробные комментарии. Обязательно ознакомьтесь с ними.
Добавьте строку -l 127.0.0.1
.
Перезагружаем memcached-сервер командой:
/etc/init.d/memcached restart
И проверим еще раз:
netstat -tap | grep memcached
В результате мы должны получить что-то вроде
tcp 0 0 localhost.localdo:11211 *:* LISTEN 13092/memcached
Теперь memcached работает только на локальный сервер.
Установка memcache
Перечень команд (версия memcache может отличаться!):
apt-get install php5-dev libmemcache-dev pecl download memcache tar xzvf memcache-2.2.6.tgz cd memcache-2.2.6/ phpize && ./configure --enable-memcache && make cp modules/memcache.so /usr/lib/php5/20060613/ echo 'extension=memcache.so' >> /etc/php5/apache2/php.ini
Перезагружаем Apache:
apachectl graceful
Проверим скрипт, размещенный нами ранее по адресу http://example.com/info.php
. Теперь мы должны найти там пункт Memcache.
Проверим работу Memcached
Создадим файл result.php
и запустим его.
<?php if (!class_exists("Memcache")) exit("Memcached не установлен"); $memcache = new Memcache; $memcache->connect('localhost', 11211) or exit("Невозможно подключиться к серверу Memcached"); $version = $memcache->getVersion(); echo "Server's version: ".$version."<br/>n"; $tmp_object = new stdClass; $tmp_object->str_attr = 'test'; $tmp_object->int_attr = 123; $memcache->set('key', $tmp_object, false, 10) or die ("Не получилось оставить запись в Memcached"); echo "Записываем данные в кеш Memcached (данные будут храниться 10 секунд)<br/>n"; $get_result = $memcache->get('key'); echo "Данные, записанные в Memcached:<br/>n"; var_dump($get_result); ?>
Результат работы скрипта:
Server's version: 1.4.13 Записываем данные в кеш Memcached (данные будут храниться 10 секунд) Данные, записанные в Memcached: object(stdClass)#3 (2) { ["str_attr"]=> string(4) "test" ["int_attr"]=> int(123) }
Все так или почти так? Тогда все в порядке. Если нет — попробуйте повторить процедуры.
kuzmenov.ru
Memcached — сервер кеширования данных в оперативной памяти. С его помощью можно добиться увеличения скорости работы сайта и снижения нагрузки на сервер.
Для использования Memcached требуется модуль PHP. На наших серверах установлен наиболее стабильный и производительный — Memcache.
Активируйте модуль в Панели управления, раздел «Аккаунт» → «Услуги» и выберите объем памяти. Определить подходящий размер кеша можно опытным путем: воспользуйтесь проверочным скриптом.
В скрипте, который подключается к кеширующему серверу, укажите путь до сокета: unix:///home/login/tmp/memcached.sock
где login — логин вашего аккаунта. Порт — 0.
Сайты на популярных CMS тоже могут работать с Memcached. Рассмотрим процесс настройки для проектов, созданных с помощью WordPress, Joomla! и 1C-Битрикс.
WordPress
В CMS WordPress нет встроенных механизмов подключения к кеширующему серверу, поэтому используйте специальный плагин, например, W3 Total Cache.
Настройка плагина зависит от сайта: не существует алгоритма, который подошел бы каждому проекту. В общем случае рекомендуем включить кеширование страниц (Page cache) и запросов к базе данных (Database cache).
После установки плагина в боковом меню появится пункт «Performance». Перейдите в раздел «General Settings» и найдите блок «Page cache». Включите кеширование (Enable) и в выпадающем списке выберите метод — Memcached. Нажмите «Save all settings».
Выполните те же действия в блоке «Database cache».
В боковом меню перейдите в раздел «Page cache». Если на сайте доступна регистрация пользователей, отключите опцию «Don’t cache pages for logged in users». Нажмите «Save all settings».
В блоке «Cache Preload» установите интервал очистки кеша — 86400 секунд (сутки). Сохраните изменения.
Перейдите к блоку «Advanced». В строке «Memcached hostname» укажите путь до сокета и нажмите «Test». Сокет указан корректно, если в результате получено значение «Test passed».
В строке «Maximum lifetime of cache objects» установите время — 21600 секунд (6 часов). Опуститесь в нижнюю часть страницы и нажмите «Save all settings».
Перейдите в раздел «Database cache» и в строке «Memcached hostname» укажите путь до сокета. Сохраните изменения.
Плагин настроен.
Joomla!
CMS Joomla! поддерживает работу с Memcached по умолчанию.
Чтобы включить кеширование, авторизуйтесь в административной части сайта и перейдите в раздел «Система» → «Общие настройки», вкладка «Система».
В блоке «Настройка кэша» укажите параметры, как на скриншоте. В поле «Сервер Memcache(d)» введите путь до сокета:
Сайт настроен для работы с Memcached.
Для настройки старых версий Joomla! (ниже 2.5) добавьте в конфигурационный файл configuration.php строки: public $memcache_server_host = 'unix:///home/login/tmp/memcached.sock';
«login» замените на логин вашего аккаунта хостинга.
public $memcache_server_port = '0';
1С-Битрикс
Чтобы подключить к Memcached сайт на CMS 1С-Битрикс, создайте в каталоге ~/public_html/bitrix файл .settings_extra.php и добавьте в него инструкции:
<?php
return array (
'cache' => array(
'value' => array (
'type' => 'memcache',
'memcache' => array(
'host' => 'unix:///home/login/tmp/memcached.sock',
'port' => '0'
),
'sid' => $_SERVER["DOCUMENT_ROOT"]."login"
),
),
);
Замените «login» на логин вашего аккаунта в строке: 'host' => 'unix:///home/login/tmp/memcached.sock'
В административной части сайта перейдите в раздел «Настройки» → «Производительность» → «Панель производительности», вкладка «Битрикс (оптимально)», и проверьте, указано ли значение «memcache» в пункте «Хранение кеша».
Вернитесь в раздел «Аккаунт» → «Услуги» Панели управления хостинга и перезагрузите Memcache.
Проверка работы Memcached
Проверьте корректность настроек с помощью специального скрипта.
В корневом каталоге сайта создайте файл memcache.php и поместите в него следующий код.
В строке: $memcache_obj->addServer('unix:///home/login/tmp/memcached.sock', 0);
замените «login» на логин вашего аккаунта хостинга. Сохраните изменения.
Обратитесь к скрипту из браузера по ссылке: http://domain.ru/memcache.php , где domain.ru — доменное имя сайта.
Значение в графе «Используется памяти» должно быть больше нуля. Если оно близко к максимальному объему памяти, увеличьте размер кеша в Панели управлнеия.
help.sprinthost.ru
memcached — Компьютерная программа, реализующая сервис кэширования данных в оперативной памяти на основе парадигмы распределенной хеш-таблицы.
Стандартная связка кеширования для сайтов — php+memcached. Обычно, на форумах рекомендуют использовать примерно такое:
1. Вызывается страница
2. Смотрим, есть ли кеш для нее (создан или истекло время хранения)
3. Если есть, отдаем кешированый контент
4. Если нет, то создаем кеш и отдаем его содержимое.
Такой алгоритм замечательно работает в случае, если у вас время захода отдельных юзеров на сайт не превышает времени генерации отдельной страницы кеша. Простыми словами, если у вас два с половиной юзера в час, то такая схема замечательно работает. Но при этом смыла в таком кешировании нет никакого.
Данный алгоритм, однозначно не работает в случае слешдот эффекта. Хотя, казалось бы, как раз от него мы и пытаемся защититься при помощи нашей системы кеширования.
С алгоритмом выше, при массовом наплыве траффика происходит примерно следующее:
1. Приходит первый юзер с запросом на нашу страницу. В кеше ее нет, поэтому запускается “тяжелая” отработка страницы, с дерганием сложных квери к базе данных и тп.
2. В следующий момент, пока первый запрос еще не отработан. Для второго юзера ситуация аналогична. Начинает снова генерится страница, поскольку данных в кеше еще нет.
3. И так далее. В итоге, все свободные процессы начинают обрабатывать один и тот же запрос, чтобы создать кешированную страницу. Поскольку процесс создания достаточно “тяжел”, сервак утыкается либо в ограничения http-сервера, либо в БД, либо в количество инклюдов итп. Смотря где у нас есть “бутылочные горлышки” (bottleneck)
Выхода из ситуации есть два. Первый (идеальный) — контент для кеша генерится априори на бекэнде, без участия юзеров в принципе. Но это не всегда возможно сделать.
Второй — почти что хак, так сказать перанальный вариант. Тем не менее, простой, как и все гениальное
Состоит он в том, что при первом запросе к странице, первая операция — создание пустой записи в кеше, с увеличенным временем expire. Минус: Пока отрабатывает один (и только один) процесс на создание страницы, остальные юзеры видят пустую страницу (кеш то не создан еще). Обходится просто — (см. первый вариант выше: контент для кеша генерится на бекенде превентивно)
Плюсы все что называется налицо. Слешдот эффект переходит уже в канальную область и возможности железа и операционке по обработке http. БД дергается только один раз для одной страницы.
Настройка Memcached
Отредактируйте /etc/sysconfig/memcached, введите:
vi /etc/sysconfig/memcached
Обновление его следующим образом:
PORT="11211" USER="memcached" # max connection 2048 MAXCONN="2048" # set ram size to 2048 — 2GiB CACHESIZE="4096" # listen to loopback ip 127.0.0.1, for network connection use real ip e.g., 10.0.0.4 OPTIONS="-l 127.0.0.1"
Выше, начинается Memcached в качестве демона, используя 4 Гб оперативной памяти, а также трансляция на IP 127.0.0.1, порт 11211. Сохраните и закройте файл.
Ещё один интересный момент. Memcached, есть PHP API к libmemcached. А Memcache, библиотека для php, не использующая libmemcached.
Хороший топик на хабре в тему: http://habrahabr.ru/blogs/php/108274/
www.linuxshop.ru
Как установить сервер Memcached
Перед установкой нужно обновить репозиторий
apt-get update && apt-get upgrade
Теперь установим memcached и модуль php под него
apt-get install memcached php5-memcache
Идёт установка. После её завершения проверяем, что получилось
netstat -tap | grep memcached
В результате мы увидим что-то навроде
tcp 0 0 *:11211 *:* LISTEN 13053/memcached
Теперь нужно перезагрузить Apache или php-fpm
service apache2 restart
или
service php5-fpm restart
Настройка Memcached
Теперь, когда сервер установлен, его надо поднастроить. Это не сложно и не займёт много времени
Закрываем Memcached от доступа извне
Как вы видите, memcached висит на 11211 порту по умолчанию. Так как в memcached нет встроенных механизмов аутентификации, то выходит, что любой может подсоединиться извне и использовать его в своих целях. Чтобы избежать этого, вы можете либо закрыть порт 11211 с помощью фаервола, либо сконфигурировать memcached-сервер, чтобы он мог использоваться только с локального хоста. Ниже описан последний способ.
- Открываем конфигурационный файл
vi /etc/memcached.conf
- Добавляем строку
-l 127.0.0.1
-
Перезагружаем memcached
service memcached restart
или
/etc/init.d/memcached restart
И снова проверяем
netstat -tap | grep memcached
В итоге мы должны увидеть подобное
tcp 0 0 localhost.localdo:11211 *:* LISTEN 13092/memcached
Также, после всех изменений не забудьте перезапустить Apache
service apache2 restart
Увеличиваем объём рабочей памяти Memcached
По умолчанию, в Memcached отведено на использование 64 мегабайта оперативной памяти. Я увеличу до 1024, вы исходите из параметров вашего сервера
- Открываем конфигурационный файл
vi /etc/memcached.conf
- Находим значение
-m 64
- Меняем его на
-m 1024
- Перезапускаем memcached
service memcached restart
Хранение сессий PHP в Memcached
Если одним сервером или кластером Memcached пользуются несколько разных сайтов, то они могут перехватывать сессии друг друга и получать доступ к аккаунтам их пользователей, что представляет собой потенциальную опасность
Можно ускорить php, перенеся хранилище сессий из hdd в оперативную память с помощью memcached
Вы должны знать, какое расширение php вы используете,
memcache
илиmemcached
. Между ними есть разница, а уточнить, что стоит у вас, можно с помощью phpinfo(), тут есть тонкость в настройках, будьте внимательны
Способ для расширения memcache
- Открыть
/etc/php5/mods-available/memcache.ini
- Добавить
session.save_handler = memcache session.save_path = "tcp://127.0.0.1:11211"
- Перезагрузить apache
service apache2 restart
Способ для расширения memcacheD
- Открыть
/etc/php5/mods-available/memcached.ini
- Добавить
session.save_handler = memcached session.save_path = "127.0.0.1:11211"
- Перезагрузить apache
service apache2 restart
Проверка phpinfo
Теперь нужно проверить, что имеем на выходе. Для этого, открываем страницу с phpinfo() и ищем в коде session.save_path
в столбце с локальными значениями. В значении должно быть tcp://127.0.0.1:11211
или 127.0.0.1:11211
. Если значения не поменялись, смотрите конфиг домена в Апаче (например тут: /etc/apache2/vhosts/sheensay/sheensay.ru.conf
), а ищем
php_admin_value session.save_path
Кстати, также вы можете воспользоваться директивой php_value
, чтобы настраивать не весь сервер глобально, а только конкретные сайты. Для этого, вы можете отредактировать .htaccess
в корне вашего сайта
php_value session.save_handler "memcache" php_value session.save_path "tcp://127.0.0.1:11211"
Готовый рабочий конфигурационный файл Memcached
Вы также можете настроить всё под свои потребности, конфигурационный файл содержит подробные комментарии:
# memcached default config file # 2003 - Jay Bonci <[email protected]> # This configuration file is read by the start-memcached script provided as # part of the Debian GNU/Linux distribution. # Run memcached as a daemon. This command is implied, and is not needed for the # daemon to run. See the README.Debian that comes with this package for more # information. -d # Log memcached's output to /var/log/memcached logfile /var/log/memcached.log # Be verbose # -v # Be even more verbose (print client commands as well) # -vv # Start with a cap of 64 megs of memory. It's reasonable, and the daemon default # Note that the daemon will grow to this size, but does not start out holding this much # memory # Объём памяти в мегабайтах, который отведён для кеширования. По умолчанию, 64 мегабайта. #-m 64 -m 1024 # Порт, на котором будет висеть Memcached, по умолчанию 11211 -p 11211 # Run the daemon as root. The start-memcached will default to running as root if no # -u command is present in this config file -u memcache # Specify which IP address to listen on. The default is to listen on all IP addresses # This parameter is one of the only security measures that memcached has, so make sure # it's listening on a firewalled interface. -l 127.0.0.1 # Limit the number of simultaneous incoming connections. The daemon default is 1024 # # -c 1024 # Lock down all paged memory. Consult with the README and homepage before you do this # -k # Return error when memory is exhausted (rather than removing items) # -M # Maximize core file limit # -r
Установка расширения memcache
Ниже пошагово указаны команды, с помощью которых вы сможете установить php-расширение memcache из консоли вручную
apt-get install php5-dev libmemcache-dev pecl download memcache tar xzvf memcache-2.2.6.tgz cd memcache-2.2.6/ phpize && ./configure --enable-memcache && make cp modules/memcache.so /usr/lib/php5/20060613/ echo 'extension=memcache.so' >> /etc/php5/apache2/php.ini
Перезагрузим Apache, чтобы изменения вступили в силу
service apache2 restart
Как проверить работу Memcached
Создадим в корне сайта файлик memcachetest.php и запишем туда следующий код
<?php if (!class_exists("Memcache")) exit("Memcached не установлен"); $memcache = new Memcache; $memcache->connect('localhost', 11211) or exit("Невозможно подключиться к серверу Memcached"); $version = $memcache->getVersion(); echo "Server's version: ".$version."<br/>n"; $tmp_object = new stdClass; $tmp_object->str_attr = 'test'; $tmp_object->int_attr = 123; $memcache->set('key', $tmp_object, false, 10) or die ("Не получилось оставить запись в Memcached"); echo "Записываем данные в кеш Memcached (данные будут храниться 10 секунд)<br/>n"; $get_result = $memcache->get('key'); echo "Данные, записанные в Memcached:<br/>n"; var_dump($get_result); ?>
Теперь осталось проверить результаты: http://example.com/memcachetest.php
Если всё сделали правильно, увидите что-то навроде
phpMemcachedAdmin — мониторинг, статистика и управление Memcached
phpMemcachedAdmin — это программное обеспечение, предоставляющее веб-интерфейс для мониторинга и управления сервисом Memcached на Linux. Позволяет видеть в реальном времени статистику для всех поддерживаемых сервером операций: get, set, delete, increment, decrement, reclaimed, evictions, cas, а также серверную статистику: сеть, позиции, рабочую версию вкупе с чартами и внутренней серверной конфигурацией.
Установка и настройка phpMemcachedAdmin
Тут можно пойти несколькими путями: выделить отдельный домен или поддомен под работу этого сервиса. А можно сделать поддиректорию в рабочем сайте и поставить пароль на неё или настроить ограничение по IP. Я опишу последний способ с установкой пароля на папку как более простой.
Итак, допустим, у нас есть сайт https://sheensay.ru
cd /var/www/sheensay.ru
Создаём директорию и переходим в неё
mkdir phpMemcachedAdmin && cd phpMemcachedAdmin
Скачиваем последнюю версию дистрибутива
wget http://phpmemcacheadmin.googlecode.com/files/phpMemcachedAdmin-1.2.2-r262.tar.gz
Если не скачивается с гуглокода, я сделал архив phpMemcachedAdmin-1.2.2-r262.tar.gz
Распаковываем и удаляем архив с дистрибутивом
tar -xvzf phpMemcachedAdmin-1.2.2-r262.tar.gz && rm -rf phpMemcachedAdmin-1.2.2-r262.tar.gz
Рекурсивно выставляем нужные права доступа в текущей директории
find ./ -type f -exec chmod 0644 {} ; find ./ -type d -exec chmod 0755 {} ;
Создаём .htaccess для авторизации по паролю (в строку 4 вносите свой логин)
AuthType Basic AuthName "Private Area" AuthUserFile .htpasswd Require user memcachedmanager
Создаём .htpasswd
htpasswd -c .htpasswd memcachedmanager
Вводите свой пароль.
На этом всё. Логин на каталог memcachedmanager
, если вы не меняли его. Открываете https://sheensay.ru/phpMemcachedAdmin
(домен меняете на свой), вводите логин/пароль и пользуетесь
sheensay.ru
Установка memcached
Если не подключили репозиторий, подключаем и устанавливаем memcached:
# rpm -Uvh http://mirrors.kernel.org/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm # yum install memcached
Редактируем настройки:
# nano -w /etc/sysconfig/memcached PORT="11211" USER="memcached" MAXCONN="1024" # максимальное количество подключений CACHESIZE="64" # размер памяти,выделяемой для memcached OPTIONS="-l 127.0.0.1" # какой слушать интерфейс
Добавляем в автозагрузку и запускаем сервер:
# chkconfig memcached on # /etc/init.d/memcached start
Настройка PHP для работы с memcached
Установка библиотеки memcached для PHP:
# yum install php-pecl-memcache
Настройка php.ini для хранения сессий в memcached
[Session] ; Handler used to store/retrieve data. ; http://www.php.net/manual/en/session.configuration.php#ini.session.save-handler session.save_handler = memcached session.save_path = "127.0.0.1:11211"
Установка и настройка phpMemcachedAdmin
Смотреть статистику можно командой:
# echo stats | nc 127.0.0.1 11211
Или установить систему управления сервисом phpMemcachedAdmin.
Качаем и распаковываем исходники
# mkdir /var/www/memcache # cd /var/www/memcache # wget http://phpmemcacheadmin.googlecode.com/files/phpMemcachedAdmin-1.2.2-r262.tar.gz # tar -xvzf phpMemcachedAdmin-1.2.2-r262.tar.gz
Ограничиваем доступ средствами nginx
Создадим файл с паролем:
# htpasswd -c .htpasswd admin
Затем правило для папки, с ограничением доступа по паролю:
location ~* ^/memcache/.+.php { # allow X.X.X.X; // можно так же ограничить доступ по ip # deny all; auth_basic "Require authorization"; auth_basic_user_file /var/www/html/memcache/.htpasswd; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_pass 127.0.0.1:9000; }
Не забудте закрыть доступ к файлу с паролем:
location ~ /. { access_log off; log_not_found off; deny all; }
О том как настроить web-сервер nginx, читайте в статье: Настройка web-сервера nginx, php-fpm на CentOS
itzx.ru
Установка memcached в Unix/Linux(CentOS/Debian/Ubuntu)
Memcached — это система которая кеширует все данные в память. Это означает, что вы можете генерировать кэш самым быстрым способом что позволит быстрее использовать приложения с самыми современными языками программирования, таких как Python, PHP, Ruby, и т.д. В своей теме «Установка memcached в Unix/Linux(CentOS/Debian/Ubuntu)» я расскажу как можно установить memcached на Unix/Linux и на готовом примере, покажу как я это делал. Для тестирования, я выбрал CentOS 6 и Debian 8.
Установка memcached в Debian/Ubuntu
Во-первых, я рекомендую обновить систему:
$ sudo apt-get update
Теперь используйте следующую команду для установки Memcached:
$ sudo apt-get install memcached
Теперь я установлю PHP с несколькими необходимыми пакетами:
# apt-get install php5 php5-dev php-pear php5-memcached
Также необходимо установить модуль MemCache для PHP:
# apt-get install libmemcached-dev build-essential
Наконец выполняем установку расширения Memcache php с помощью PECL:
# pecl install memcache
Теперь включим поддержку MemCache в PHP. Прежде чем создавать новый файл просто убедитесь, возможно он уже существует и если файл уже существует просто пропустите команду что ниже:
$ echo "extension=memcache.so" > /etc/php5/apache2/conf.d/20-memcache.ini
После всех изменений, производим перезапуск службы Apache:
# service apache2 restart
Установка memcached в RedHat/CentOS/Fedora
Для начала, обновим ОС:
# yum update
После обновления, выполняем установку memcached:
# yum install memcached
Настройка memcached
Отредактируем файл:
$ vim /etc/sysconfig/memcached
Убедитесь, что в данном файле конфигурации имеются следующие строки:
PORT="11211" USER="memcached" MAXCONN="256" CACHESIZE="64" OPTIONS="-l 127.0.0.1"
PORT 11211 является портом прослушивания по умолчанию для Memcached.
USER — это пользователь memcached от которого будет запущен демон.
MAXCONN — максимальные количество возможных соединений.
CACHESIZE — это количество мегабайт (64 MB) для использования, если у вас есть много трафика, это хорошо для большинства малых/средних сайтов. Для загруженного сервера вы можете увеличить его на 512 или 1 Гб (1024 MB).
OPTIONS=»-l 127.0.0.1″ — это означает что memcached будет слушать только на localhost-е, избегая каких-либо внешних подключений. Вы можете установить IP-адрес сервера. По умолчанию он установлен в INADDR_ANY. Это важно опция, поскольку нет никакого другого способа обеспечить установку. Привязка к внутреннему или межсетевому интерфейсу предлагается.
Для CentOS/RHEL 6/5:
запуск Memcached выполняется:
# service memcached start
Пропишем memcached в загрузку ОС:
# chkconfig memcached on
Для CentOS/RHEL 7:
# systemctl enable memcached # systemctl start memcached
Устновка PHP расширений с Memcached.
выполняем:
# yum install php-pear pecl_http php-devel
И выполняем:
$ pecl install memcache
Если PECL при установке задаст вам вопрос, который вы видите ниже, просто нажмите ENTER:
"Enable memcache session handler support? [yes]"
У меня возникла ошибка:
ERROR: `/var/tmp/memcache/configure --enable-memcache-session=yes' failed
Исправляем:
# yum install libmemcached libmemcached-devel
Получил следующую:
checking for zlib location... configure: error: memcached support requires ZLIB. Use --with-zlib-dir=<DIR> to specify the prefix where ZLIB headers and library are located ERROR: `/var/tmp/memcached/configure' failed
Фиксим:
# yum install zlib zlib-devel
Добавим модуль memcache.so module в php.ini
# echo "extension=memcache.so" >> /etc/php.ini
Перезапускаем службы.
Если на вашем сервере установлен php-fpm, то чтобы перезапустить его, выполните:
# service php-fpm reload
Если на вашем сервере установлен apache, то чтобы перезапустить его, выполните:
Для CentOS/RHEL 7:
# systemctl restart httpd
Для CentOS/RHEL 6/5:
# service httpd restart
Проверка настройки MemCache
Использование следующую команду, чтобы проверить и убедиться, что Memcached служба работает нормально:
$ echo "stats settings" | nc localhost 11211
Теперь нужно проверить, включено ли расширение и удостоверимся что работает правильно. Создайте файл в домашнем каталоге и пропишите следующий ПХП код:
# echo "<?php phpinfo(); ?>" > /var/www/html/php_info.php
Если открыть сайт, то увидим:
Проверьте, установлен ли Memcached как модуль PHP:
# php -i | grep memcache -i
Настройка фаэрвола для Memcached
Добавьте слудеющие правила для разрешения соедения (для работы memcached):
iptables -A INPUT -p tcp --destination-port 11211 -m state --state NEW -m iprange --src-range 192.168.1.10-192.168.1.15 -j ACCEPT iptables -A INPUT -p udp --destination-port 11211 -m state --state NEW -m iprange --src-range 192.168.1.10-192.168.1.15 -j ACCEPT
Проверяем, запущен ли демон memcached на ОС:
$ ps -aux | grep memcached
На этом, статья «Установка memcached в Unix/Linux(CentOS/Debian/Ubuntu)» завершена.
linux-notes.org