Обеспечение беспрерывной работы Интернет-магазина Magento с помощью ReiserFS

14 Декабря 2018

Служба поддержки Xelent делится своим опытом сопровождения виртуальных серверов с CMS Magento «на борту».

Суть проблемы

Magento в процессе своей работы (особенно, если Интернет-магазин пользуется спросом у пользователей) создает множество файлов сессий, которые хранятся в каталоге var/session (не /var!, а именно в подкаталоге var каталога документов веб-сервера).

Файлов сессий скапливается настолько много, что… заканчивается не свободное место, а доступные иноды. В результате система не может записать данные на диск и Интернет-магазин просто перестает работать. Админ не понимает, почему нельзя записать на диск, если места на диске еще много. Но не все помнят об инодах. Посмотреть информацию о свободных инодах можно командой:

df -i

1.png

Информация об инодах, команда df -i

Варианты решения

Один из вариантов решения проблемы — написать сценарий, удаляющий файлы из var/session и периодически его запускать. Сценарий выглядит так:

cd var/session
for i in sess_*; do rm -fv $i; done

Даже не пытайтесь выполнить команду rm *. Сервер, скорее всего, «подвиснет», не ожидая такого количества файлов. В цикле берем один файл и удаляем его — только так.

Если облака для вас
не просто теория
Широкий спектр услуг
по выделенным северам
и мультиклауд-решениям
Конфигурация VPS и бесплатный тест уже через 2 минуты
Организация вашей IT-инфраструктуры на основе мультиклауд-решения

Решение — так себе. Когда сессий было относительно немного, этот сценарий запускался раз в неделю, потом — раз в день, потом — несколько раз в день. Но удалять файлы сессий — не вариант. Представьте себя на месте пользователя или менеджера. Вы зашли на сайт, добавили товары в корзину, а корзина взяла и обнулилась — ведь информация о выбранных пользователем товарах хранится как раз в сессиях. Или же вы зашли в админку, полчаса тратите на редактирование описания товара, а при сохранении вас выбрасывает из админки. Изменения, естественно, не сохраняются. Частое удаление файлов сессий не очень хорошо сказывается на работе магазина.

Так уж получилось, что штатная файловая система ext4 плохо справляется со множеством мелких файлов. На помощь приходит файловая система reiserfs, которая позволяет в одном блоке хранить несколько мелких файлов.

Этим мы и воспользовались на одном из серверов наших клиентов. Был добавлен еще один жесткий диск небольшого размера (чтобы не переплачивать за пространство) и создана файловая система ReiserFs:

mkfs.reiserfs /dev/sdd2

После этого нужно добавить данный раздел в /etc/fstab для его автоматического монтирования:

/dev/sdd2     /media/reiser-hdd/     reiserfs     defaults   1   0

Точка монтирования может быть другой. В каталоге /media/reiser-hdd создайте каталог session. Далее нужно сообщить Magento, где хранить сессии. Это можно делать или путем редактирования ее файла конфигурации или же просто удалить каталог var/session и вместо него создать ссылку на каталог /media/reiser-hdd/session

2.png

Ссылка на новый каталог с сессиями

Естественно, перед изменением каталога сессий нужно остановить веб-сервер. После запуска веб-сервера Magento будет сохранять сессии в новом каталоге.

Что касается сценария удаления файлов сессий, то его можно запускать для профилактики, но уже не так часто, а, скажем, раз в месяц — ночью, когда активность пользователей низкая.

Получить консультацию специалиста
Персональный ассистент
Cloud.Xelent