Memcache - высокопроизводительная система хранения данных в оперативной памяти сервера, применяющаяся, как правило, на высоконагруженных проектах. Memcached целесообразно использовать в случаях повышенной нагрузки на MySQL и дисковую подсистему. Высокая производительность кэширования достигается благодаря тому, что все данные хранятся в оперативной памяти, и для доступа к ним не требуется обращения к дисковой подсистеме. На хостинге «Джино» Memcached развернута на отдельных серверах, соединенных с серверами пользовательских сайтов гигабитной сетью. Все это обеспечивает высокую скорость доступа к кэшу, не нагружая ресурсы основных серверов.
Устанавливаем Memcached и связанные пакеты
Yum -y install memcached
Редактируем файл /etc/sysconfig/memcached:
PORT="11211" USER="memcached" MAXCONN="2048" CACHESIZE="4096" OPTIONS="-l 127.0.0.1"
Сохраняем настройки и перезапускаем Memcached
Systemctl restart memcached
Systemctl start memcached
Добавляем в автозагрузку
Systemctl enable memcached
Проверяем текущий статус
Systemctl status memcached
Для остановки используем
Systemctl stop memcached
Устанавливаем php-pecl-memcached
Yum -y install php-pecl-memcached
Перезапускаем apache
Systemctl restart httpd
Для просмотра свободного и занятого места на разделах диска в Linux можно воспользоваться командой df. Для просмотра размеров папок на диске используется команда du.
В этом руководстве мы покажем вам, как обновить ImageMagick с 6.7 до 7.0 в Centos 7
Как проверить номер мобильного телефона? Проверка правильности, введенного номера телефона является не сложной, но важной задачей. Если пользователь введет некорректный номер, то смс сообщение до него не дойдет.
Memcached — это система которая кеширует все данные в память. Это означает, что вы можете генерировать кэш самым быстрым способом что позволит быстрее использовать приложения с самыми современными языками программирования, таких как Python, PHP, Ruby, и т.д. В своей теме «Установка memcached в Unix/Linux(CentOS/Debian/Ubuntu)» я расскажу как можно установить memcached на Unix/Linux и на готовом примере, покажу как я это делал. Для тестирования, я выбрал CentOS 6 и Debian 8.
$ 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
Для начала, обновим ОС:
# yum update
После обновления, выполняем установку memcached:
# yum install 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? "
У меня возникла ошибка:
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=
# 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
Использование следующую команду, чтобы проверить и убедиться, что Memcached служба работает нормально:
$ echo "stats settings" | nc localhost 11211
Теперь нужно проверить, включено ли расширение и удостоверимся что работает правильно. Создайте файл в домашнем каталоге и пропишите следующий ПХП код:
# echo "" > /var/www/html/php_info.php
Если открыть сайт, то увидим:
Проверьте, установлен ли Memcached как модуль PHP:
# php -i | grep memcache -i
Добавьте слудеющие правила для разрешения соедения (для работы 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)» завершена.
Системы кэширования объектов памяти, такие как Memcached, могут оптимизировать производительность базы данных, временно сохраняя часто запрашиваемые или недавно извлеченные записи в памяти. Таким образом, они уменьшают количество прямых запросов к базам данных.
Поскольку такие системы, как Memcached, при неправильной настройке подвергают сервер dos-атакам, важно заранее обеспечить безопасность серверов Memcached. В этом руководстве вы узнаете, как защитить сервер Memcached, привязав установку к локальному или частному сетевому интерфейсу и создав авторизованного пользователя для экземпляра Memcached.
Для работы вам понадобится:
Если система Memcached еще не установлена на сервере, вы можете установить ее из официальных репозиториев CentOS. Во-первых, обновите локальный индекс пакетов:
Затем установите официальный пакет:
sudo yum install memcached
Также можно установить libmemcached-tools, библиотеку, которая предоставляет несколько инструментов для работы с сервером Memcached:
sudo yum install libmemcached
Теперь Memcached установлен как сервис, а еще на сервере есть инструменты, которые позволят вам проверить его возможности подключения. Можно перейти к конфигурации.
Чтобы убедиться, что экземпляр Memcached прослушивает локальный интерфейс 127.0.0.1, нужно проверить настройку по умолчанию в конфигурационном файле /etc/sysconfig/memcached, а также отключить прослушиватель UDP. Эти действия защитят сервер от атак типа «отказ в обслуживании».
Откройте файл /etc/sysconfig/memcached:
Найдите переменную OPTIONS:
. . .
OPTIONS=""
Подключение к локальному сетевому интерфейсу ограничит трафик клиентами одной машины. Для этого нужно добавить -l 127.0.0.1 в переменную OPTIONS. Это ограничение может быть слишком строгим для определенных сред, но это будет хорошим началом в настройке безопасности.
Поскольку протокол UDP используется в dos атаках намного эффективнее, чем TCP, также можно отключить прослушиватель UDP. Для этого добавьте параметр -U 0 в переменную OPTIONS. В результате файл должен выглядеть следующим образом:
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 127.0.0.1 -U 0"
Сохраните и закройте файл.
Убедитесь, что Memcached привязан к локальному интерфейсу и прослушивает только TCP-соединения:
sudo netstat -plunt
. . .
tcp 0 0 127.0.0.1:11211 0.0.0.0:* LISTEN 2383/memcached
. . .
Это подтверждает, что memcached привязан к адресу 127.0.0.1 и использует только TCP.
Чтобы добавить авторизованных пользователей в Memcached, можно использовать Simple Authentication and Security Layer (SASL), структуру, которая изолирует процедуру аутентификации из протоколов приложений. Включите SASL в конфигурационном файле Memcached, а затем добавьте пользователя с учетными данными для аутентификации.
Сначала нужно проверить подключение экземпляра Memcached с помощью команды memcstat. Это поможет подтвердить, что SASL и аутентификация пользователей включены после внесения изменений в конфигурации.
Чтобы убедиться, что Memcached запущен и работает, введите следующее:
memstat --servers="127.0.0.1"
Server: 127.0.0.1 (11211)
pid: 3831
uptime: 9
time: 1520028517
version: 1.4.25
. . .
Теперь можно включить SASL. Во-первых, нужно добавить параметр -S в переменную OPTIONS в /etc/sysconfig/memcached.conf. Откройте файл еще раз:
sudo vi /etc/sysconfig/memcached
Добавьте в переменную OPTIONS параметры -S и –vv. Последний предоставит подробный вывод в /var/log/memcached, что пригодится при устранении неполадок.
Строка должна выглядеть так:
. . .
OPTIONS="-l 127.0.0.1 -U 0 -S -vv"
Сохраните и закройте файл.
Перезапустите сервис Memcached:
sudo systemctl restart memcached
Затем нужно взглянуть на логи, чтобы убедиться, что поддержка SASL включена:
sudo journalctl -u memcached
Вы должны увидеть следующую строку, которая подтверждает поддержку SASL:
. . .
Mar 05 18:16:11 memcached-server memcached: Initialized SASL.
. . .
Теперь можно снова проверить подключение, но после включения поддержки SASL эта команда должна вернуть ошибку без аутентификации:
memstat --servers="127.0.0.1"
Эта команда не показывает результат на экране. Введите следующее, чтобы проверить ее статус:
$? всегда будет возвращать код вывода последней завершенной команды. Как правило, любой ответ, кроме 0, указывает на сбой процесса. В этом случае вы должны увидеть статус выхода 1, что значит, что команда memcstat была выполнена неправильно.
Теперь нужно загрузить два пакета, которые обеспечивают работу с Cyrus SASL Library и механизмами аутентификации, включая плагины, поддерживающие схемы аутентификации PLAIN. Пакеты cyrus-sasl-devel и cyrus-sasl-plain позволят вам создать пользователя и пройти аутентификацию. Установите пакеты:
sudo yum install cyrus-sasl-devel cyrus-sasl-plain
Затем нужно создать каталог и файл, где Memcached будет проверять параметры конфигурации SASL.
sudo mkdir -p /etc/sasl2
sudo vi /etc/sasl2/memcached.conf
Добавьте следующее в файл:
mech_list: plain
log_level: 5
sasldb_path: /etc/sasl2/memcached-sasldb2
Кроме уровня логирования здесь нужно указать параметр mech_list и присвоить ему значение plain, благодаря чему Memcached сможет использовать свой собственный файл паролей и проверять пароли в виде простого текста. Также нужно указать путь к файлу базы данных пользователя, который будет создан далее. Сохраните и закройте файл.
Теперь нужно создать базу данных SASL с учетными данными пользователя. Используйте команду saslpasswd2, чтобы сделать новую запись для пользователя в базе данных с помощью опции -c. Здесь пользователь условно называется 8host, но вы можете заменить это имя. Используя опцию -f, можно указать путь к базе данных (путь, который вы указали в каталоге /etc/sasl2/memcached.conf):
sudo saslpasswd2 -a memcached -c -f /etc/sasl2/memcached-sasldb2 8host
Теперь передайте пользователю memcache права на БД SASL.
sudo chown memcached:memcached /etc/sasl2/memcached-sasldb2
Перезапустите сервис Memcached:
sudo systemctl restart memcached
Команда memcstat снова подтвердит, сработал ли процесс аутентификации. На этот раз запустите команду с учетными данными:
memstat --servers="127.0.0.1" --username=8host --password=your_password
Вы получите результат:
Server: 127.0.0.1 (11211)
pid: 3831
uptime: 9
time: 1520028517
version: 1.4.25
. . .
Теперь сервис Memcached поддерживает SASL и аутентификацию пользователей.
Теперь вы знаете, как настроить Memcached для прослушивания локального интерфейса, что может предотвратить атаки типа отказ в обслуживании и защитить интерфейс Memcached от воздействия внешних сторон. Однако в некоторых случаях есть необходимость разрешить доступ к Memcached другим серверам. Для этого можно привязать Memcached к интерфейсу частной сети.
Прежде чем приступить к конфигурации, рекомендуется настроить правила брандмауэра, чтобы ограничить доступ к серверу Memcached. Если вы выполнили и не планируете подключаться к Memcached с другого хоста, вам не нужно менять правила брандмауэра. Ваш автономный экземпляр Memcached должен прослушивать 127.0.0.1 благодаря переменной OPTIONS, которую вы определили ранее, и поэтому беспокоиться о входящем трафике не нужно. Однако если вы планируете разрешить доступ к вашему серверу Memcached с других хостов, вам нужно будет внести изменения в настройки брандмауэра с помощью команды firewall-cmd.
Для начала добавьте выделенную зону Memcached в политику firewalld:
sudo firewall-cmd --permanent --new-zone=memcached
Затем укажите порт, который нужно открыть. По умолчанию Memcached использует 11211.
sudo firewall-cmd --permanent --zone=memcached --add-port=11211/tcp
Затем укажите внутренние IP-адреса клиентов, которые должны иметь доступ к Memcached.
sudo firewall-cmd --permanent --zone=memcached --add-source=client_server_private_IP
Чтобы обновить правила, перезапустите брандмауэр:
sudo firewall-cmd --reload
Пакеты, поступающие с IP-адреса клиента, теперь должны обрабатываться в соответствии с правилами в выделенной зоне Memcached. Все остальные соединения будут обрабатываться в зоне по умолчанию public.
После этого можно привязать Memcached к интерфейсу частной сети.
Теперь, когда брандмауэр готов, вы можете привязать Memcached к частному интерфейсу сервера вместо 127.0.0.1, отредактировав переменную OPTIONS.
Откройте /etc/sysconfig/memcached:
sudo vi /etc/sysconfig/memcached
Внутри найдите переменную OPTIONS. Теперь нужно изменить -l 127.0.0.1 и указать внутренний IP-адрес сервера Memcached:
. . .
OPTIONS="-l memcached_servers_private_IP -U 0 -S -vv"
Сохраните и закройте файл.
Перезапустите Memcached:
sudo systemctl restart memcached
Убедитесь, что все работает правильно, с помощью команды netstat:
sudo netstat -plunt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
. . .
tcp 0 0 memcached_servers_private_IP:11211 0.0.0.0:* LISTEN 2383/memcached
. . .
Проверьте подключение с внешнего клиента, чтобы убедиться, что вы все еще можете получить доступ к сервису. Рекомендуется также проверить доступ с неавторизованного клиента, чтобы убедиться, что брандмауэр не пропустит соединение.
Теперь вы умеете устанавливать Memcached и обеспечивать безопасность этого сервиса.
Чтобы узнать больше о Memcached, ознакомьтесь с