Настройка memcached


Перейдем к третьем практическому уроку серии и поговорим о настройке 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):

  1. Perl-Cache-Memcached: Perl клиент (библиотека) для работы с Memcached сервером.
  2. Python-Memcached: Python клиент (библиотека) для работы с Memcached-сервером.
  3. 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

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


Установка сервера 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';
public $memcache_server_port = '0';
«login» замените на логин вашего аккаунта хостинга.

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-сервер, чтобы он мог использоваться только с локального хоста. Ниже описан последний способ.

  1. Открываем конфигурационный файл

    vi /etc/memcached.conf
  2. Добавляем строку

    -l 127.0.0.1
  3. Перезагружаем 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, вы исходите из параметров вашего сервера

  1. Открываем конфигурационный файл
    vi /etc/memcached.conf
  2. Находим значение
    -m 64
  3. Меняем его на
    -m 1024
  4. Перезапускаем memcached
    service memcached restart

Хранение сессий PHP в Memcached

Если одним сервером или кластером Memcached пользуются несколько разных сайтов, то они могут перехватывать сессии друг друга и получать доступ к аккаунтам их пользователей, что представляет собой потенциальную опасность

Можно ускорить php, перенеся хранилище сессий из hdd в оперативную память с помощью memcached

Вы должны знать, какое расширение php вы используете, memcache или memcached. Между ними есть разница, а уточнить, что стоит у вас, можно с помощью phpinfo(), тут есть тонкость в настройках, будьте внимательны

Способ для расширения memcache

  1. Открыть /etc/php5/mods-available/memcache.ini
  2. Добавить
    session.save_handler = memcache  session.save_path = "tcp://127.0.0.1:11211"
  3. Перезагрузить apache
    service apache2 restart

Способ для расширения memcacheD

  1. Открыть /etc/php5/mods-available/memcached.ini
  2. Добавить
    session.save_handler = memcached  session.save_path = "127.0.0.1:11211"
  3. Перезагрузить 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
Если всё сделали правильно, увидите что-то навроде
memcachedtest

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

Если открыть сайт, то увидим:

memcache

Проверьте, установлен ли 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


You May Also Like

About the Author: admind

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.