Установка и настройка memcached для Drupal 7

Опубликовано admin - пн, 05/07/2012 - 08:09

Memcached — это программное обеспечение, позволяющее хранить данные в оперативной памяти в виде "ключ-значение" (хэш таблицы). Memcached используется для кэширования данных в оперативной памяти, позволяя существенно ускорить работу веб-приложений, уменьшив нагрузку на базу данных. Как уже было описано в статье Кэширование спасет ваш Drupal сайт Memcached можно использовать как кэширующий бэкенд для Drupal 7. В этой статье мы рассмотрим установку Memcached в Debian и настройку как кэширующий бэкенд для Drupal 7.

Установка Memcached

Для установки memcached выполняем команду

aptitude install memcached php7.0-memcached

В файле конфигурации /etc/memcached.conf прописываем настройки

# Запуск memcached как демона
-d

# файл лога memcached
logfile /var/log/memcached.log

# Подробный вывод
# -v

# Максимально подробный вывод
# -vv

# Количество памяти, выделенной под memcached
# Memcached будет постепенно выделять этот объем оперативной памяти. 
-m 128

# Порт для подключения к Memcached
-p 11211 

# Пользователь, под который будет запущен демон Memcached
-u www-data

# IP на котором слушает демон
-l 127.0.0.1

# Можно ограничить количество подключений
# -c 1024

Перезапуск Memcached

/etc/init.d/memcached restart

Существует два модуля для Drupal7, обеспечивающих интеграцию Drupal с демоном memcached. Рассмотрим установку и настройку каждого из них.

Установка модуля Memcache для Drupal 7

Скачиваем и устанавливаем последнюю версию Drupal модуля Memcache, например с помощью drush

drush dl memcache

Для установки Memcache кэширующим класcом в файл settings.php прописываем следующие строки

  $conf['cache_backends'][] = 'sites/all/modules/memcache/memcache.inc';
  $conf['cache_default_class'] = 'MemCacheDrupal';

Настройка модуля Memcache

Доступные серверы memcached указываются в массиве $conf в файле settings.php. Если не указать ниодного сервера, то по умолчанию будет использоваться локальный memcached сервер 127.0.0.1:11211. Поэтому если используется только локальный memcached сервер, то больше никаких настроек не требуется.

Использование нескольких серверов Memcached

Если используется более одного сервер memcached, то необходимо добавить два массива в файл settings.php, как указано в шаблоне:

$conf['memcache_servers'] = array(
  host1:port => cluster, 
  host2:port => cluster, 
  hostN:port => cluster
);
$conf['memcache_bins'] = array(
  bin1 => cluster, 
  bin2 => cluster, 
  binN => cluster
);

Описание:

  • Серверы Memcached описываются как host:port (Ip адрес:Порт).
  • Bins (бины) это группы данных, которые кэшируются вместе и называются как параметр $table в функции cached_set(). Например cache_filter, cache_menu. По умолчанию используется 'cache'.
  • Clusters (кластеры) — это группы серверов, которые функционируют как единый пул памяти.
  • Несколько Bins (бинов) могут быть назначены для одного Cluster.
  • Cluster (кластер) по умолчанию — 'default'.

Пример конфигурации c двумя кластерами 'default' и 'cluster2'. Пять memcached серверов поделены между двумя кластерами. Бины 'cache_filter' и 'cache_menu' размещены на 'cluster2', остальные бины размещены в 'default':

$conf['memcache_servers'] = array(
  '10.1.1.1:11211' => 'default',
  '10.1.1.1:11212' => 'default',
  '10.1.1.2:11211' => 'default',
  '10.1.1.3:11211' => 'cluster2',
  '10.1.1.4:11211' => 'cluster2'
);
$conf['memcache_bins'] = array(
  'cache' => 'default',
  'cache_filter' => 'cluster2',
  'cache_menu' => 'cluster2'
);

Использование сервера Memcached несколькими Drupal сайтами

Если требуется, чтобы несколько Drupal сайтов разделяли memcached сервер, то требуется указать уникальный префикс для каждого Drupal сайт в массиве $conf в файле settings.php, например:

$conf['memcache_key_prefix'] = 'something_unique';

Установка модуля Memcache Storage для Drupal 7

Данный модуль является прямым и единственным конкуретном - модуля Memcache.

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

Скачиваем и устанавливаем последнюю версию Drupal модуля Memcache Storage, например с помощью drush

drush dl memcache_storage
drush en memcache_storage

Редактируем файл settings.php для настройки модуля Memcache Storage. Базовая конфигурация выглядит следующим образом:

$conf['cache_backends'][] = 'sites/all/modules/memcache_storage/memcache_storage.inc';
$conf['cache_default_class'] = 'MemcacheStorage';
$conf['cache_class_cache_form'] = 'DrupalDatabaseCache';
$conf['cache_class_cache_update'] = 'DrupalDatabaseCache';

Переходим на страницу Status report(/admin/reports/status) для проверки статуса Memcache Storage.

Настройка модуля Memcache Storage

Доступные серверы memcached и бины указываются в массиве $conf в файле settings.php, как и в случае настройки модуля Memcache.

$conf['memcache_servers'] = array(
  host1:port => cluster,
  host2:port => cluster,
  hostN:port => cluster
);
$conf['memcache_bins'] = array(
  bin1 => cluster, 
  bin2 => cluster, 
  binN => cluste
);

Инвалидация кэша

Установить пользовательское время окончания срока жизни для кэшированных страниц можно следующим образом:

$conf['memcache_storage_page_cache_custom_expiration'] = TRUE;
$conf['memcache_storage_page_cache_expire'] = 60 * 60 * 24; (1 день)

Вместе с настройкой модуля Cache Expiration позволяет снизить нагрузку с вашего сервера(ов), если вы имеете много анонимных пользователей.

Использование сервера Memcached несколькими Drupal сайтами

Если требуется, чтобы несколько Drupal сайтов разделяли memcached сервер, то требуется указать уникальный префикс для каждого Drupal сайт в массиве $conf в файле settings.php, например:

$conf['memcache_storage_key_prefix'] = 'something_unique';

Режим отладки

Включается установкой настройки memcache_storage_debug в TRUE:

$conf['memcache_storage_debug'] = TRUE;

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

Теги

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

Сайт 1

$conf['cache_backends'][] = 'sites/all/modules/memcache/memcache.inc';
$conf['lock_inc'] = 'sites/all/modules/memcache/memcache-lock.inc';
$conf['memcache_stampede_protection'] = TRUE;
$conf['cache_default_class'] = 'MemCacheDrupal';
$conf['memcache_key_prefix'] = '1';

// The 'cache_form' bin must be assigned to non-volatile storage.
$conf['cache_class_cache_form'] = 'DrupalDatabaseCache';

// Don't bootstrap the database when serving pages from the cache.
$conf['page_cache_without_database'] = TRUE;
$conf['page_cache_invoke_hooks'] = FALSE;
$conf['memcache_servers'] = array('unix:///home/drupalmy/.system/memcache/socket' => 'default');

Сайт 2

$conf['cache_backends'][] = 'sites/all/modules/memcache/memcache.inc';
$conf['lock_inc'] = 'sites/all/modules/memcache/memcache-lock.inc';
$conf['memcache_stampede_protection'] = TRUE;
$conf['cache_default_class'] = 'MemCacheDrupal';
$conf['memcache_key_prefix'] = '1';

// The 'cache_form' bin must be assigned to non-volatile storage.
$conf['cache_class_cache_form'] = 'DrupalDatabaseCache';

// Don't bootstrap the database when serving pages from the cache.
$conf['page_cache_without_database'] = TRUE;
$conf['page_cache_invoke_hooks'] = FALSE;
$conf['memcache_servers'] = array('unix:///home/drupalmy/.system/memcache/socket' => 'default');

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

Filtered HTML

  • Допустимые HTML-теги: <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd>
  • Строки и абзацы переносятся автоматически.
  • Web page addresses and email addresses turn into links automatically.