192  /  282

Ручная настройка memcached

Просмотров: 79170
Дата последнего изменения: 24.09.2024
Александр Суворов
Сложность урока:
4 уровень - сложно, требуется сосредоточиться, внимание деталям и точному следованию инструкции.
1
2
3
4
5

Внимание!
  1. Для операций, описанных в данной главе, необходимы знания администрирования *nix-систем. Перед началом проведения данных операций рекомендуется сделать полный бекап «Виртуальной машины».
  2. Приведённые настройки выходят за рамки меню Виртуальной машины. Это означает, что информация - ознакомительная и применять её следует с чётким пониманием того что вы делаете и с собственной ответственностью за совершаемые действия. В нашей техподдержке рассматриваются только вопросы по работе пунктов меню ВМ.

Внимание!

Если некорректно настроен Memcached (доступен снаружи), то этим могут воспользоваться злоумышленники для взлома сайта. Необходимо проверить опцию -l <ip> в его настройках. Обращение к Memcached должно быть разрешено только c вашего сайта.

  Настройка memcached

В случае, если в проекте планируется использовать memcached, необходимо произвести его настройку в соответствии с предполагаемой нагрузкой.

Для этого необходимо:

  1. В файле /etc/sysconfig/memcached задать следующие параметры:
    • MAXCONN = "1024" - количество одновременных подключений (по умолчанию 1024);
    • CACHESIZE="1024" - объем выделяемой памяти для кеша (по умолчанию 64MB);
    • OPTIONS="-t 8" - количество потоков memcached (по умолчанию 4).

    Примечание: Параметры MAXCONN, CACHESIZE и OPTIONS подбираются экспериментальным путем в зависимости от характера нагрузки и от имеющихся ресурсов.

    Оценить объем памяти, необходимой для кеширования (параметр CACHESIZE), можно по размеру вашего файлового кеша. Если у вас на проекте файловый кеш занимает 3 GB, то использование memcached c 256МБ памяти не будет эффективным за счет частого вытеснения.

  2. После настройки memcaсhed необходимо перезапустить командой:

    CentOS 6:

    service memcached restart
    

    CentOS 7:

    systemctl restart memcached.service
    
  3. Далее подключить его в /bitrix/php_interface/dbconn.php:

    define("BX_CACHE_TYPE", "memcache");
    define("BX_CACHE_SID", $_SERVER["DOCUMENT_ROOT"]."#01");
    define("BX_MEMCACHE_HOST", "127.0.0.1");
    define("BX_MEMCACHE_PORT", "11211");
    

    И в файле /bitrix/.settings_extra.php (если его нет, то создать):

    <?php
    return array(
      'cache' => array(
        'value' => array(
          'type' => 'memcache',
          'memcache' => array(
            'host' => '127.0.0.1',
            'port' => '11211',
          ),
          'sid' => $_SERVER["DOCUMENT_ROOT"]."#01"
        ),
      ),
    );
    ?>
    

  Работа с memcached через сокет

В случае, если используется один сервер, то для улучшения производительности можно настроить работу с memcached через сокет:

  1. В файле /etc/sysconfig/memcached задать параметры:

    • USER="bitrix" - пользователь, от которого будет запущен memcached;
    • OPTIONS="-t 8 -s /tmp/memcached.sock" - количество потоков и путь к сокету.

  2. Перезапустить memcached командой:

    CentOS 6:

    service memcached restart
    

    CentOS 7:

    systemctl restart memcached.service
    
  3. После этого необходимо изменить настройки в /bitrix/php_interface/dbconn.php:

    define("BX_CACHE_TYPE", "memcache");
    define("BX_CACHE_SID", $_SERVER["DOCUMENT_ROOT"]."#01");
    define("BX_MEMCACHE_HOST", "unix:///tmp/memcached.sock");
    define("BX_MEMCACHE_PORT", "0");
    

    И в файле /bitrix/.settings_extra.php (если его нет, то создать):

    <?php
    return array(
      'cache' => array(
        'value' => array(
          'type' => 'memcache',
          'memcache' => array(
            'host' => 'unix:///tmp/memcached.sock',
            'port' => '0',
          ),
          'sid' => $_SERVER["DOCUMENT_ROOT"]."#01"
        ),
      ),
    );
    ?>
    

Особенности при многосайтовости

Если используется многосайтовость, то в примере указывается статичный sid Идентификатор сайта, поле ID в параметрах настроек сайта , без $_SERVER["DOCUMENT_ROOT"]. Например, для двух сайтов при многосайтовости на одном ядре, кеш будет отличаться, так как папки у сайтов разные.

<?php
return array(
  'cache' => array(
    'value' => array(
      'type' => 'memcache',
      'memcache' => array(
        'host' => 'unix:///tmp/memcached.sock',
        'port' => '0',
      ),
      'sid' => "#01"
    ),
  ),
);
?>


13
Курсы разработаны в компании «1С-Битрикс»

Если вы нашли неточность в тексте, непонятное объяснение, пожалуйста, сообщите нам об этом в комментариях.
Развернуть комментарии