8 (495) 118-30-48
По будням с 11:00 до 19:00 (МСК+5)
← Вернуться назад

Настройка memcached через unix-сокеты в BitrixVM

Евгений Неверов
Битрикс-программист

Практически все проекты на Битриксе (и сайты и корпоративные порталы) рекомендуется устанавливать на VPS или выделенные серверы и обязательно в веб-окружение BitrixVM.

Как пишут сами Битриксы на своём сайте, BitrixVM специально сконфигурирована для быстрого исполнения программных продуктов «1С-Битрикс»: разворачивается за минуты и сразу же готова к работе.

Однако по-умолчанию в виртуальной машине и в самом Битриксе установлена настройка кэширования данных в файловой системе. В современных реалиях с SSD-дисками (особенно NVMe) файловый кэш будет работать достаточно быстро, но всё же гораздо медленнее, чем из оперативной памяти.

Другая проблема заключается в том, что при неправильно настроенном кэшировании вы можете файлами кэша забить всю файловую систему: дальше у вас либо кончится место на диске, либо свободные inodes файловой системы. После этого ваш сайт перестанет открываться с ошибкой MySQL «Got error 122 from storage engine» (об этом мы расскажем в другой статье).

Чтобы настроить хранение кэша в оперативной памяти сервера, в виртуальной машине предусмотрена возможность установить memcached и подключить именно его в качестве хранителя кэша для Битрикса. Чтобы установить и настроить memcached на наилучшую производительность, необходимо:

Устанавливаем memcached

Установить его проще всего через панель инструментов, которая поставляется вместе с виртуальной машиной:

По-умолчанию memcached устанавливается на локальную машину и даёт возможность подключаться через TCP-сокеты (через 11211 порт по-умолчанию). Это не самый производительный способ, поэтому лучше memcached перевести на работу через unix-сокет.

Настройка работы через unix socket

Настройки демона memcached в CentOS 7.5 находятся в файле /etc/sysconfig/memcached. Его содержимое по-умолчанию выглядит следующим образом:

PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS=""

Необходимо изменить параметры на следующие:

PORT="0"
USER="bitrix"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-s /tmp/memcached.sock -a 0600"

Поясним каждое изменение:

PORT="0" позволяет отключить прослушивание TCP-сокета.
USER="bitrix" задаёт владельца сокет-файла, который мы собираемся создать. Никто, кроме владельца, не сможет читать и писать что-либо в сокет.
CACHESIZE="64" мы оставили как есть, однако в этом параметре вы можете указать количество памяти (в мегабайтах), которое хотите выделить для кэша.
OPTIONS — это основные настройки создания сокет-файла, их две:
-s /tmp/memcached.sock задаёт путь и имя будущего файла сокета
-a 0600 определяет права доступа к файлу

После внесения изменений необходимо перезапустить memcached командой:

systemctl restart memcached

Последнее, что нужно сделать, чтобы Битрикс стал писать кэш в memcached, а не в файлы — это внести изменения в файл /bitrix/.settings.php, добавив туда ключ:

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

Убедиться, что всё настроено верно, можно в панели управления Битрикса: Настройки → Производительность → Панель производительности.

На вкладке «Битрикс» в графе «Хранение кэша» должно стоять значение «memcache»:

BXVM Memcache
В онлайне 20 программистов
Золотой
партнёр
Битрикса
8 лет
на рынке
Реагируем
в течение
30 минут
30
человек
в штате

Золотой
партнёр
Битрикса

8 лет
на рынке

Реагируем
в течение
30 минут

Блог