🐹 CentOS 7: Установка и настройка сервера кэширования Redis для WordPress и Nextcloud.

Содержание:

1. Как работает кэширование?
2. Remote Dictionary Server.
3. Установка Redis.
4. Защита Redis привязкой к IP-адресу.
5. Обеспечение безопасности сервера с помощью iptables.
6. Настройка системы кэширования php-fpm.
7. Настройка пароля Redis.
8. Переименование опасных команд Redis.
9. Права на файлы и каталог данных Redis.
10. Плагин Redis Object Cache для WordPress.

10.1. Параметры соединения.
10.2. Параметры конфигурации.
10.3. Репликация и Кластеризация.
10.4. Команды WP-CLI.
10.5. Подключение плагина Redis Object Cache к WordPress.

11. Подключение Redis к Nextcloud.
12. Мониторинг Redis при помощи redis-cli.
13. Как узнать версию Redis и его модулей.
14. Возможные ошибки.
15. Оригиналы источников информации.


На чем было собрано:

  1. CentOS 7 Linux x86_64 release 7.8.2003.
  2. PHP Version 7.4.10.
  3. Redis Server 6.0.8
  4. WordPress 5.5.1.
  5. Nextcloud 20.

1. Как работает кэширование?

Когда страница web-сервера загружается впервые, сервер выполняет запрос к базе данных. Redis кэширует, грубо говоря – запоминает этот запрос. Когда другой пользователь загружает страницу web-сервера, Redis ищет ее в памяти, благодаря чему нет необходимости обращаться к базе данных.

Реализация Redis, использованная в данном руководстве, работает как постоянный кэш объектов для web-сервера, без срока действия. Кэш объектов работает путем «запоминания» запросов SQL, необходимых для загрузки страницы web-сервера.

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

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

В данном руководстве будет рассмотрена установка и настройка сервера кэширования Redis для WordPress и Nextcloud.

Примечание! официальную документацию WordPress Object Cache можно найти по ссылке ниже.

Ссылка на документацию: https://codex.wordpress.org.

2. Что такое Remote Dictionary Server?

С одной стороны есть традиционные ACID реляционные базы данных такие как MySQL, PostgreSQL, Oracle и другие. Они надежны и стабильны.

Сама аббревиатура ACID описывает требования к транзакционной системе (AtomicityАтомарность, ConsistencyСогласованность, IsolationИзолированность, DurabilityДолговечность). Их основная задаче не просто хранить данные, а хранить с максимальной надежностью, но их основной недостаток — они очень медленные.

С другой стороны есть очень быстрые хранилища в памяти типа ключ-значение, например memcached. Они очень быстрые за счет предельной простоты и отказа от надежности.

Несложно привести несколько примеров задач где нужна производительность даже за счет надежности:

  • система мониторинга с n-ым количеством датчиков, которые должны постоянно отправлять данные;
  • система логирования действий пользователя на каком нибудь сайте;
  • контроль трафика сети в реальном времени;
  • хранение сессий пользователе.

Redis относится к третьему типу хранилищ. Когда нужно быстрая обработка данных и при этом сохранялось бы определенный уровень надежности и возможности масштабирования.

Redis (REmote DIctionary Server) — сетевое журналируемое хранилище данных типа ключзначение с открытым исходным кодом. По сути Redis представляет собой базу данных (как MySQL), только упрощенную и более быструю за счет отсутствия связи между данными, а также простому механизму работы с данными (подход noSql).

У Redis не реляционная структура данных в памяти, используемая в качестве базы данных. Данные хранятся в виде пары ключ-значение. И при этом хранилище умеет масштабироваться путем репликации между серверами. Redis сохраняет все данные в памяти, что позволяет сделать доступ к данным максимально быстрым по сравнению с другими базами данных.

Почему Redis известен своей исключительной высокой производительностью даже среди других key-value хранилищ?

Redis позволяет нам хранить данные в высокоуровневых структурах данных, такие как строки, хэши, списки, наборы. Это дает нам больше гибкости в отношении типа и объема информации, которую мы можем хранить в хранилище данных Redis.

Внимание! В данном руководстве не рассматриваются ситуации, когда сервер Redis и клиентские приложения размещены на разных хостах или в разных дата-центрах. Инфраструктуры, в которых трафик Redis должен пересекать небезопасную или ненадежную сеть, кроме приведенных здесь настроек требуют дополнительного набора конфигураций, таких как настройка прокси SSL или VPN между машинами Redis.

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

По принципу работы Redis схож с memcached — данные также хранятся в оперативной памяти, доступ к данным осуществляется по ключу, однако Redis имеет ряд существенных отличий:

  • в Redis данные можно сохранять на диск, что позволяет снизить вероятность потери данных при аварийном завершении;
  • помимо хранения строк (strings), есть возможность хранить такие типы данные, как списки (lists), множества (sets), хеш-таблицы (hashes), упорядоченные множества (sorted sets).

В Redis, как и в memcached, можно указывать время жизни данных. Существует два способа — «удалить в определенный момент времени» и «удалить заданный промежуток времени«. По умолчанию все данные хранятся вечно.

Также Redis обладает одной интересной особенностью — он является однопоточным сервером. Решение необычное, но оно имеет свои плюсы. Эта особенность обеспечивает атомарность операций, то есть Redis поддерживает транзакции (последовательное выполнение всех операций, либо ни одной), а также пакетную обработку команд (выполнение пакета команд, получение пакета результатов).

Из минусов можно было бы назвать медлительность запросов, но не в случае с Redis. Операции с данными выполняются очень быстро, в среднем можно сделать порядка 28 тысяч запросов в секунду.

Redis, за счет его высокой скорости работы, удобно использовать для хранения различных счетчиков, например, количества просмотров страниц сайта, или же каких-либо временных данных. Достаточно распространено хранение кеша сайта, хранение PHP-сессий.

3. Установка Redis.

Установим YUM утилиты:

# yum -y install yum-utils

Прежде чем установить Redis, нужно добавить репозиторий Extra Packages для Enterprise Linux (EPEL) в списки пакетов сервера.

# yum -y install epel-release

# rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

Нет смысла держать репозитории, которые устарели. В базовой установке CentOS 7 установлен remi-safe репозиторий. Там содержатся копии только старых-добрых программ, которые не обновляются очень долго в угоду стабильности работы некоторых систем. Так как мы будем ставить новую версию репозитория remi, то старую версию remi-safe можно смело деактивировать.

Для активации remi надо вначале отключить remi-safe и ius репозиторий, если он у вас включен, а потом активировать remi выполнив команды:

# yum-config-manager --disable remi-safe

Внимание! Возможны конфликты с репозиторием ius!

Отключим ius, если он активирован ранее:

# yum-config-manager --disable ius

Активируем remi:

# yum-config-manager --enable remi

Посмотрим какие репозитории появились в доступности у CentOS 7:

# yum repolist

Установим остальные необходимые компоненты:

# yum -y install redis php-pecl-redis

Это может занять несколько минут.

По завершении установки запустите сервис Redis:

# systemctl start redis.service

Чтобы добавить Redis в автозагрузку, введите команду:

# systemctl enable redis

Проверяем, что он запустился после установки:

# ps ax | grep redis

и проверим его активность:

# systemctl status redis.service

Ответ:

Убедившись, что Redis запущен, введите команду:

# redis-cli ping

Команда должна вернуть ответ PONG.

Ответ:

Также проверить установку можно при помощи команды:

# redis-benchmark -q -n 1000 -c 10 -P 5

Эта команда запустит redis-benchmark в тихом режиме (максимальное количество запросов – 1000, 10 одновременных подключений, передача 5 запросов).

Примечание: Чтобы получить подробную информацию о redis-benchmark, введите:

# redis-benchmark --help

Запустите эталонный тест.

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

Если это так, значит, теперь Redis работает, можно начать его настройку для повышения безопасности.

4. Защита Redis привязкой к IP-адресу.

Эффективный способ защитить Redis – защитить сервер, на котором он работает.

Вы можете сделать это, привязав Redis к локальному хосту или к внутреннему IP-адресу и настроив брандмауэр.

Создадим резервную копию редактируемого файла:

# cp /etc/redis.conf /etc/redis.conf.original

Откройте файл Redis:

# mcedit /etc/redis.conf

Найдите строку bind и убедитесь, что она раскомментирована:

bind 127.0.0.1

Вот так:

Сохраните файл, если были произведены изменения, и выйдите из текстового редактора.

Убедитесь, что настройки обновились:

# netstat -lnp | grep redis

Ответ:

Этот вывод показывает, что программа redis-server привязана к localhost (127.0.0.1), что и должно быть согласно конфигурации. Если вы видите в этом столбце другой IP-адрес (например, 0.0.0.0), вы должны убедиться, что вы раскомментировали правильную строку. Затем снова перезапустите Redis.

Если вы выполнили предварительные требования к мануалу и установили какой-либо фаервол на свой сервер, и вы не планируете подключаться к Redis с другого хоста, вам не нужно добавлять дополнительные правила брандмауэра для Redis. В конце концов, любой входящий трафик по умолчанию будет сброшен, если его явно не разрешают правила брандмауэра. Поскольку автономная установка сервера Redis по умолчанию прослушивает только интерфейс loopback (127.0.0.1 или localhost), вы можете не переживать по поводу входящего трафика на порт по умолчанию.

5. Обеспечение безопасности сервера с помощью iptables.

Redis — это просто приложение, запущенное на сервере, и так как оно не обладает реальными возможностями для обеспечения безопасности, первым шагом к его защите является обеспечение безопасности сервера, на котором он работает.

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

Открываем файл конфигурации iptables текстовым редактором:

# mcedit /etc/sysconfig/iptables

И в середине массива строк, под разрешением работы SSH с портом 22, добавляем строку точно такую же строку:

  • порт Redis — это порт 6379.
# доступ к Redis c IP 192.168.0.44 если требуется
-A INPUT -s 192.168.0.44/32 -i eth0 -p tcp -m tcp --dport 6379 -j ACCEPT

# Всем остальным запрещаем внешние подключения к Redis
-A INPUT -i eth0 -p tcp -m tcp --dport 6379 -j DROP

Если Redis должен быть доступен для клиентов с внешних IP, необходимо запустить Redis так, чтобы он слушал требуемые IP-адреса, например, 127.0.0.1.

IP-адреса в файле конфигурации можно указать конкретные, через пробел.

Посмотрим какие IP-адреса указаны для Redis в файле конфигурации:

# grep '^bind' /etc/redis.conf

Ответ:

В данном случае Redis доступен с внутреннего технического адреса, так как он установлен локально.

6. Настройка системы кэширования php-fpm.

Fastcgi Process Managerphp-fpm менеджер процессов, используется в связке с Nginx + php.

Инструкция по установке и настройке описана по ссылки ниже.

Ссылка: «CentOS 7: Установка PHP 7.4 и настройка php-fpm.sock — Fastcgi Process Manager для Nginx».

Кэширование повышает производительность за счет хранения данных, кода и других объектов в памяти.

Необходимо установить и настроить конфигурацию кэша памяти для сервера:

  • WordPress;
  • Nextcloud.

Если вы используете установку php-fpm по умолчанию, возможно, вы заметили чрезмерную нагрузку на web-интерфейс или даже проблемы с синхронизацией. Это связано с тем, что каждый одновременный запрос элемента обрабатывается отдельным процессом php-fpm. Таким образом, даже при небольшой установке вы должны разрешить запуск большего количества процессов.

Например, на компьютере с 4 ГБ оперативной памяти и 1 ГБ кэша MariaDB файл www.conf по адресу /etc/php-fpm.d/www.conf должен содержать данные значения переменных из списка ниже по тексту.

Создадим резервную копию www.conf:

# cp /etc/php-fpm.d/www.conf /etc/php-fpm.d/www.conf.original

Открываем файл www.conf по адресу /etc/php-fpm.d/www.conf:

# mcedit /etc/php-fpm.d/www.conf

Переменные:

pm = dynamic
pm.max_children = 120
pm.start_servers = 12
pm.min_spare_servers = 6
pm.max_spare_servers = 18

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

Сохраняем файл и перезапускаем php-fpm:

# systemctl restart php-fpm

7. Настройка пароля Redis.

Теперь, когда установка Redis прослушивается только на локальном хосте, злоумышленникам будет сложнее получить доступ к вашему серверу. Однако Redis в настоящее время не требует аутентификации пользователей. Чтобы исправить это, вы можете включить парольную аутентификацию Redis перед внесением изменений через клиент Redis (redis-cli). Вам необходимо настроить для него пароль.

Настраивая пароль, вы включаете одну из встроенных функций Redis – команду auth, которая требует у клиента пройти аутентификацию, прежде чем открыть ему доступ к базе данных.

Как и параметр bind, пароль настраивается в конфигурационном файле /etc/redis.conf.

Создадим резервную копию главного файла конфигурации Redis:

# cp /etc/redis.conf /etc/redis.conf.original

Откроем для редактирования файл:

# mcedit /etc/redis.conf

Найдите раздел SECURITY и найдите закомментированную директиву:

# requirepass foobared

Раскомментируйте ее, удалив #, и укажите здесь надежный пароль (желательно выбрать посложнее).

Получится нечто такое:

requirepass password_copied_from_output

Установив пароль password_copied_from_output, сохраните и закройте файл.

Вместо того, чтобы создавать пароль самостоятельно, можно использовать утилиту apg или pwgen.

Если вы не хотите устанавливать приложение для генерации пароля, вы можете использовать скрипт ниже.

Измените слово в кавычках на свой пароль.

# echo "Произвольный текст" | sha256sum

Ответ: 960c3dac4fa81b4204779fd16ad7c954f95942876b9c4fb1a255667a9dbe389d.

или

Ссылка на генератор паролей он-лайн находится здесь: onlinepasswordgenerator.ru.

Перезапустите Redis:

# systemctl restart redis.service

Проверим запустилась ли служба после модификации файла конфигурации:

# systemctl status redis.service -l

Ответ:

Если, вдруг не запустилось, установите права на файл заново:

# chown -R redis:root /etc/redis.conf

# chmod -R 640 /etc/redis.conf

Чтобы проверить, работает ли пароль, перейдите в командную строку Redis:

# redis-cli

Чтобы проверить работоспособность пароля Redis, используйте такую последовательность команд. Первая команда пытается присвоить значению без аутентификации.

# set key1 10

Она не сработает, так как для выполнения операции нужен пароль.

Следующая команда проходит аутентификацию с паролем, указанным в файле конфигурации Redis.

# auth your_redis_password

Пароль password_copied_from_output, который вы записали в файл конфигурации, по инструкции выше.

Redis подтверждает, что вы прошли аутентификацию:

После этого повторите предыдущую команду, теперь операция будет выполнена успешно:

# set key1 10

Эта команда извлечет значение нового ключа:

# get key1

Эта команда закроет redis-cli:

# quit

Можно также использовать exit.

Теперь будет очень трудно получить несанкционированный доступ к Redis.

Внимание! Без SSL или VPN посторонние пользователи могут перехватить незашифрованный пароль, если вы подключаетесь к Redis удаленно.

8. Переименование опасных команд Redis.

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

При запуске пользователями, такие команды могут использоваться для изменения конфигурации, уничтожения или повреждения данных. Как и пароль аутентификации, команды переименовываются или отключаются в файле /etc/redis.conf.

Вот краткий список опасных команд:

  • FLUSHDB
  • FLUSHALL
  • KEYS
  • PEXPIRE
  • DEL
  • CONFIG
  • SHUTDOWN
  • BGREWRITEAOF
  • BGSAVE
  • SAVE
  • SPOP
  • SREM RENAME DEBUG

Это не полный список, но для начала достаточно будет переименовать или отключить все команды в этом списке.

Отключать или переименовывать команду – это зависит от конкретной ситуации. Если вы знаете, что никогда не будете использовать опасную команду, вы можете ее отключить. В противном случае вы должны переименовать ее.

Внимание! Данный раздел инструкции не обязательно настраивать, так как иногда в WordPress вам потребуется сбросить накопившийся кэш, а в плагинах WordPress запрограммированы стандартные команды Redis. Если их изменить, то плагины WordPress будут работать не корректно.

Важно! Далее в руководстве пользователя приведены общие примеры. Вы должны отключить или переименовать команды, которые важны в вашей конкретной ситуации. Вы можете узнать больше о вредоносном использовании команд на сайте разработчика Redis.

Как и пароль, переименование или отключение команд настраивается в разделе SECURITY файла /etc/redis.conf.

Откройте файл:

# mcedit /etc/redis.conf

Ссылка на сайт разработчика: https://redis.io.

В блоке:

 # Command renaming.

Сразу после описания блока добавляем:

rename-command FLUSHDB ""
rename-command FLUSHALL ""
rename-command KEYS ""
rename-command PEXPIRE ""
rename-command DEL ""
rename-command CONFIG ""
rename-command SHUTDOWN ""
rename-command BGREWRITEAOF ""
rename-command BGSAVE ""
rename-command SAVE ""
rename-command SPOP ""

Сохраните и закройте файл.

Перезапустите Redis:

# systemctl restart redis.service

9. Права на файлы и каталог данных Redis.

На этом этапе нужно изменить права собственности и доступа к файлам, чтобы улучшить профиль безопасности установки Redis.

Подразумевается, что право на чтение файлов есть только у пользователя, которому такой доступ необходим для работы. Этот пользователь по умолчанию — redis.

Чтобы проверить это, используйте grep:

# ls -l /var/lib | grep redis

Вы увидите, что каталог данных Redis принадлежит пользователю redis и группе redis. Такие права собственности безопасны, но права доступа к каталогу (755) – нет.

Чтобы только пользователь redis имел доступ к папке и ее содержимому, измените права доступа на 700:

# chmod 700 /var/lib/redis

Также нужно изменить права доступа к конфигурационному файлу.

Еще одно право доступа, которое следует изменить, это права доступа конфигурационного файла Redis. По умолчанию, права доступа файла 644 и принадлежит пользователю root, c предоставлением вторичного доступа группе redis.

По умолчанию это 644, файл принадлежит пользователю и группе root:

# ls -l /etc/redis.conf

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

Для этого запустите следующую команду:

# chown redis:redis /etc/redis.conf

Теперь передайте все права на чтение и запись владельцу файла:

# chmod 600 /etc/redis.conf

Проверить права может эта команда:

# ls -l /etc/redis.conf

Чтобы ваш web-сервер мог читать и писать, пользоваться Redis, нужно добавить пользователя web-сервера под именем учетной записи ‘nginx‘ в группу ‘redis‘:

# usermod -a -G redis nginx

Перезапустите Redis:

# systemctl restart redis.service

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

Чтобы защитить Redis в небезопасной сети, вам придется использовать прокси SSL, как рекомендовано разработчиками Redis.

Ссылка на официальное руководство Redis: https://redis.io.

10. Плагин Redis Object Cache для WordPress.

Для использования Redis на WordPress существует плагин Redis Object Cache.

Результаты выполнения данного руководства таковы:

  • Загрузка стандартной страницы WordPress до настройки Redis – 804 миллисекунды.
  • Загрузка стандартной страницы WordPress после настройки Redis – 449 миллисекунд.

Внимание! Данная реализация кэширования Redis для WordPress зависит от стороннего плагина по имени Redis Object Cache.

Ссылка на официальную страницу Redis Object Cache в магазине плагинов WordPress: https://ru.wordpress.org.

Ссылка на плагин: https://wordpress.org/plugins/redis-cache/

Он создает постоянный объект кэш. Работает на сервере Redis. Поддерживает Predis, PhpRedis (PECL), HHVM, репликации, кластеризации и WP-CLI.

Позволяет настроить параметры подключения, префиксы ключей кэша, репликацию/кластеризацию.

Настройка плагина будет описана ниже по тексту инструкции, после описания параметров файла конфигурации WordPress.

10.1. Параметры соединения.

По умолчанию кэш объектов подключается к Redis по протоколу TCP через 127.0.0.1:6379 и устанавливает database 0.

Чтобы настроить параметры соединения, задайте любую из следующих констант в файле wp-config.php.

WP_REDIS_CLIENT(default: not set)

Устанавливает клиента используемого для связи с Redis. Поддерживает hhvm, pecl и predis.

WP_REDIS_SCHEME(default: tcp)

Задает протокол, используемый для связи с экземпляром Redis. Внутренне клиент использует класс соединения, связанный с указанной схемой соединения. Поддерживает TCP (протокол TCP/IP), Unix (Unix сокеты домена), TLS (безопасность транспортного уровня) или HTTP (протокол HTTP через Webdis).

WP_REDIS_HOST(default: 127.0.0.1)

IP или имя хоста целевого сервера. Игнорируется при подключении к Redis с помощью сокетов домена UNIX.

WP_REDIS_PORT(default: 6379)

Порт TCP/IP целевого сервера. Игнорируется при подключении к Redis с помощью сокетов домена UNIX.

WP_REDIS_PATH(default: not set)

Путь файла сокета домена UNIX, используемого при подключении к Redis с помощью сокетов домена UNIX.

WP_REDIS_DATABASE(default: 0)

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

WP_REDIS_PASSWORD(default: not set)

Принимает значение, используемое для аутентификации на сервере Redis, защищенном паролем с помощью команды AUTH.

10.2. Параметры конфигурации.

Чтобы настроить конфигурацию, определите любую из следующих констант в wp-config.php.

WP_CACHE_KEY_SALT (default: not set)

Задает префикс для всех ключей кэша. Полезно когда множественные установки используют общий wp-config.php или $table_prefix. Установка этой константы гарантирует уникальность ключей кэша.

WP_REDIS_SELECTIVE_FLUSH (default: not set)

Если задано значение true, при очистке кэша удаляются только ключи с префиксом WP_CACHE_KEY_SALT (вместо очистки всей базы данных Redis).

WP_REDIS_MAXTTL (default: not set)

Устанавливает максимальное время жизни (в секундах) для кэша с временем жизни 0.

WP_REDIS_GLOBAL_GROUPS(default: ['blog-details', 'blog-id-cache', 'blog-lookup', 'global-posts', 'networks', 'rss', 'sites', 'site-details', 'site-lookup', 'site-options', 'site-transient', 'users', 'useremail', 'userlogins', 'usermeta', 'user_meta', 'userslugs'])

Задайте список глобальных групп Кэша (network-wide групп), к которым не следует добавлять префикс blog-id (для мультисайта).

WP_REDIS_IGNORED_GROUPS (default: ['counts', 'plugins'])

Задает группы кэша, которые не должны кэшироваться в Redis.

WP_REDIS_DISABLED (default: not set)

Установите значение в true, чтобы отключить кэш объектов. Нужно для дебага.

WP_REDIS_IGBINARY (default: not set)

Установите значение true, чтобы включить сериализатор igbinary.

10.3. Репликация и Кластеризация.

Чтобы использовать репликацию, сегментирование или кластеризацию, убедитесь, что сервер работает под управлением PHP7 или выше (HHVM не поддерживается) и обратитесь к документации Predi или PhpRedis.

Ссылок на документацию, в рамках данной инструкции, не будет.

Для репликации используется константа WP_REDIS_SERVERS, для сегментирования WP_REDIS_SHARDS и для кластеризация WP_REDIS_CLUSTER.

Для аутентификации используйте константу WP_REDIS_PASSWORD.

Репликация Master-Slave:

define( 'WP_REDIS_SERVERS', [
   'tcp://127.0.0.1:6379?database=5&alias=master',
   'tcp://127.0.0.2:6379?database=5&alias=slave-01',
] );

Репликация Redis Sentinel:

define( 'WP_REDIS_CLIENT', 'predis' );
define( 'WP_REDIS_SENTINEL', 'mymaster' );
define( 'WP_REDIS_SERVERS', [
   'tcp://127.0.0.1:5380',
   'tcp://127.0.0.2:5381',
   'tcp://127.0.0.3:5382',
] );

Шардинг:

define( 'WP_REDIS_SHARDS', [
   'tcp://127.0.0.1:6379?database=10&alias=shard-01',
   'tcp://127.0.0.2:6379?database=10&alias=shard-02',
   'tcp://127.0.0.3:6379?database=10&alias=shard-03',
] );

Кластеризация Redis 3.0+:

define( 'WP_REDIS_CLUSTER', [
   'tcp://127.0.0.1:6379?database=15&alias=node-01',
   'tcp://127.0.0.2:6379?database=15&alias=node-02',
] );

10.4. Команды WP-CLI.

Чтобы использовать команды WP-CLI, убедитесь, что плагин активирован:

  • wp plugin activate redis-cache

Поддерживаются следующие команды:

  • wp redis status

Показать состояние кэша объектов Redis и (по возможности) клиента.

  • wp redis enable

Включает кэш объектов Redis. Создает drop-in файл object-cache.php в папке wp-content, если его там еще нет.

  • wp redis disable

Отключает кэш объектов Redis. Удаляет drop-in файл object-cache.php в папке wp-content, если это известный файл (добавлен плагином).

  • wp redis update-dropin

Обновляет drop-in файл object-cache.php в каталоге wp-content.

10.5. Подключение плагина Redis Object Cache к WordPress.

Итак, чтобы настроить кэширование Redis, нужно выполнить следующие действия.

Для начала откройте для редактирования /etc/redis.conf:

# mcedit /etc/redis.conf

и внесите в конец файла следующие строки:

maxmemory 256mb
maxmemory-policy allkeys-lru

Затем сохраните и закройте файл.

Перезапустите Redis:

# systemctl restart redis.service

Для подключения Redis к CMS WordPress в первую очередь необходимо зайти в административную часть сайта.

В качестве примера рассмотрим домен my-site.com, в этом случае ссылка будет следующая: http://my-site.com/wp-login.php или http://my-site.com/wp-admin.

В административной панели следует выбрать пункт меню Плагины, затем подпункт Добавить новый.

На открывшейся странице ввести Redis Object Cache в поле поиска плагинов Redis.

Затем нажать Установить в окне плагина Redis Object Cache, после чего появится сообщение о успешной установке плагина:

Затем следует перейти в раздел Плагины, подраздел Установленные, и активировать плагин.

Открыть настройки плагина — кнопка settings.

И включить.

После чего появится сообщение о том, что WordPress подключен к Redis, но требуется сделать подключение плагина в общей системе Redis:

Плагин установлен и активирован, осталось добавить нужные директивы в конфигурационный файл wp-config.php.

Сделать это можно через Файловый менеджер.

Открываем директорию сайта и нажимаем Править в любом текстовом редакторе файл конфигурации сайта wp-config.php.

В открывшемся окне добавляем в самом конце файла конфигурации в раздел Уникальные ключи и соли для аутентификации:

Следующие строки:

/** Задание Redis непосредственно в WordPress */
define('WP_CACHE_KEY_SALT', 'my-site.com');
define('WP_CACHE', true);
define('WP_REDIS_SCHEME', 'tcp');
define('WP_REDIS_HOST', '127.0.0.1');
define('WP_REDIS_PORT', '6379');
define('WP_REDIS_DATABASE', '0');
define('WP_REDIS_PASSWORD', 'your_redis_password');
define('WP_REDIS_TIMEOUT', '5');
define('WP_REDIS_READ_TIMEOUT', '5');

где

  • my-site.com — имя вашего сайта.
  • your_redis_password — пароль от Redis из его файла конфигурации.

После чего нажимаем Сохранить.

В завершение нужно перезапустить службы redis-service и nginx.

Чтобы перезапустить Redis:

# systemctl restart redis.service

Для перезапуска Nginx:

# systemctl restart nginx

При использовании php-fpm перезапустите его:

# systemctl restart php-fpm

Теперь обновим страничку в браузере с окном настроек плагина Redis и сайт WordPress использует кэширование Redis.

Проверьте скорость загрузки страницы и использование ресурсов – и вы заметите улучшения.

Зайдем в систему Redis:

# redis-cli

Следующая команда проходит аутентификацию с паролем, указанным в файле конфигурации Redis.

> auth your_redis_password

Пароль password_copied_from_output, который вы записали в файл конфигурации, по инструкции выше.

Проверяем, что данные действительно пишутся в Redis.

Активируем мониторинг сайта:

> keys my-site.com*

Ответ:

127.0.0.1:6379> keys my-site.com*
1) "my-site.com_wp_user_meta:1"
2) "my-site.com_wp_:post_tag_relationships:1"
3) "my-site.com_wp_:transient:is_multi_author"
4) "my-site.com_wp_:category:1"
5) "my-site.com_wp_site-transient:update_core"
6) "my-site.com_wp_:transient:twentyfifteen_categories"
7) "my-site.com_wp_userslugs:testtest"
8) "my-site.com_wp_:widget:widget_recent_comments"
9) "my-site.com_wp_:transient:plugin_slugs"
10) "my-site.com_wp_useremail:test@test.test"
11) "my-site.com_wp_:posts:last_changed"
12) "my-site.com_wp_:options:alloptions"
13) "my-site.com_wp_:terms:last_changed"
14) "my-site.com_wp_:posts:1"
15) "my-site.com_wp_users:1"
16) "my-site.com_wp_:posts:wp_get_archives:53058f6b83972cfc3253e30ef06fcaa9:0.660622001447243344"
17) "my-site.com_wp_:post_meta:1"
18) "my-site.com_wp_userlogins:testtest"
19) "my-site.com_wp_site-transient:theme_roots"
20) "my-site.com_wp_:category_relationships:1"
21) "my-site.com_wp_:default:is_blog_installed"
22) "my-site.com_wp_:terms:get_terms:eccb28b0f03fa3589e317f658d286d32:0.661676001447243344"
23) "my-site.com_wp_:widget:widget_recent_posts"
24) "my-site.com_wp_:options:notoptions"
25) "my-site.com_wp_:terms:get_terms:28955b20311515a81c5f5c1ff65448e7:0.661676001447243344"
26) "my-site.com_wp_site-transient:update_plugins"
27) "my-site.com_wp_site-transient:update_themes"
28) "my-site.com_wp_:post_format_relationships:1"

Выход из оболочки Redis:

> exit

11. Подключение Redis к Nextcloud.

Если у вас имеется установленная система хранения персональных данных Nextcloud, то и для него вы можете подключить кэширование Redis.

Инструкция по установке и настройке Nextcloud: «CentOS 7: Установка и настройка облачного хранилища Nextcloud».

Настроим систему кэширования, состоящую из локальной системы кэширования на основе APCu и системы распределённого кэширования Redis.

Выполним команду установки:

# yum -y install php-apcu

Открываем php.ini по адресу /etc/php.ini:

# mcedit /etc/php.ini

Вставим в начало:

apc.enable_cli = 1

Сохраняем файл и перезапускаем php-fpm:

# systemctl restart php-fpm

Сохраняем файл и перезапускаем php-fpm:

# systemctl restart php-fpm

Для активации данного модуля, просто вставьте параметр, если его ещё нет, в файл конфигурации config.php в директории установки Nextcloud.

В конец файла до закрывающей скобки и точки с запятой вставьте эту команду:

'maintenance' => true,

Обратите внимание на запятую в конце строки — она важна!

Вставляем следующую строку

'memcache.local' => '\\OC\\Memcache\\APCu',

В случае установки по инструкции это будет выглядеть так:

# mcedit путь_до_nextcloud/config/config.php

Так как Redis у нас работает на том же сервере, что и Nextcloud, то конфигурация для php 7.4 примет вид ниже по тексту.

В конец файла до закрывающей скобки и точки с запятой вставьте эту команду:

  'filelocking.enabled' => true,
  'memcache.distributed' => '\OC\Memcache\Redis',
  'memcache.locking' => '\OC\Memcache\Redis',
  'memcache.local' => '\OC\Memcache\APCu',
  'redis' => array (
  'host' => 'localhost',
  'port' => 6379,
  'password' => 'your_redis_password',
  ),

* your_redis_password — ваш секретный пароль, который мы прописывали в конфигурационный файл Redis, выше по тексту инструкции!

Обратите внимание на запятую в конце строки — она важна!

Сохраняем файл и перезапускаем php-fpm:

# systemctl restart php-fpm

Кэширование на облачном хранилище Nextcloud выполнено в полной мере.

12. Мониторинг Redis при помощи redis-cli.

Зайдем в систему redis:

# redis-cli

Следующая команда проходит аутентификацию с паролем, указанным в файле конфигурации Redis.

> auth your_redis_password

Пароль password_copied_from_output, который вы записали в файл конфигурации, по инструкции выше.

Для отслеживания работы redis используется команда redis-cli:

> monitor

При запуске этой команды на экране появится результат кэширования запросов redis в режиме реального времени.

Если ничего не появилось, посетите сайт и перезагрузите страницу.

Ответ:

OK
1412273195.815838 "monitor"
1412273198.428472 "EXISTS" "example.comwp_:default:is_blog_installed"
1412273198.428650 "GET" "example.comwp_:default:is_blog_installed"
1412273198.432252 "EXISTS" "example.comwp_:options:notoptions"
1412273198.432443 "GET" "example.comwp_:options:notoptions"
1412273198.432626 "EXISTS" "example.comwp_:options:alloptions"
1412273198.432799 "GET" "example.comwp_:options:alloptions"
1412273198.433572 "EXISTS" "example.comwp_site-options:0:notoptions"
1412273198.433729 "EXISTS" "example.comwp_:options:notoptions"
1412273198.433876 "GET" "example.comwp_:options:notoptions"
1412273198.434018 "EXISTS" "example.comwp_:options:alloptions"

Чтобы остановить вывод, нажмите CTRL-C.

Эта функция полезна при необходимости просмотреть, какие именно запросы обрабатывает redis.

13. Как узнать версию Redis и его модулей.

Узнать это можно с помощью простой команд.

13.1. Информация про версию redis сервера:

# redis-server

Ответ:

13.2. Краткая информация про версию redis сервера:

# redis-server -v

# redis-server --version

Ответ:

или

# redis-cli -v

Ответ:

13.3. Подробная информация про всё:

# redis-cli

> auth your_redis_password

> INFO

> exit

Ход команд:

Ответ:

Разверните спойлер для просмотра ответа.
# Server
redis_version:6.0.8
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:611051ae86733216
redis_mode:standalone
os:Linux 3.10.0-1127.19.1.el7.x86_64 x86_64
arch_bits:64
multiplexing_api:epoll
atomicvar_api:atomic-builtin
gcc_version:8.3.1
process_id:1098
run_id:841687ce015042156fa727b37045488e1d78cd2f
tcp_port:6379
uptime_in_seconds:178419
uptime_in_days:2
hz:10
configured_hz:10
lru_clock:9262161
executable:/usr/bin/redis-server
config_file:/etc/redis.conf
io_threads_active:0

# Clients
connected_clients:1
client_recent_max_input_buffer:2
client_recent_max_output_buffer:0
blocked_clients:0
tracking_clients:0
clients_in_timeout_table:0

# Memory
used_memory:36719280
used_memory_human:35.02M
used_memory_rss:50847744
used_memory_rss_human:48.49M
used_memory_peak:41157336
used_memory_peak_human:39.25M
used_memory_peak_perc:89.22%
used_memory_overhead:1697794
used_memory_startup:805096
used_memory_dataset:35021486
used_memory_dataset_perc:97.51%
allocator_allocated:37159904
allocator_active:40636416
allocator_resident:45187072
total_system_memory:4069261312
total_system_memory_human:3.79G
used_memory_lua:37888
used_memory_lua_human:37.00K
used_memory_scripts:0
used_memory_scripts_human:0B
number_of_cached_scripts:0
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
allocator_frag_ratio:1.09
allocator_frag_bytes:3476512
allocator_rss_ratio:1.11
allocator_rss_bytes:4550656
rss_overhead_ratio:1.13
rss_overhead_bytes:5660672
mem_fragmentation_ratio:1.39
mem_fragmentation_bytes:14170968
mem_not_counted_for_evict:0
mem_replication_backlog:0
mem_clients_slaves:0
mem_clients_normal:16986
mem_aof_buffer:0
mem_allocator:jemalloc-5.1.0
active_defrag_running:0
lazyfree_pending_objects:0

# Persistence
loading:0
rdb_changes_since_last_save:233
rdb_bgsave_in_progress:0
rdb_last_save_time:1603097403
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:0
rdb_current_bgsave_time_sec:-1
rdb_last_cow_size:1482752
aof_enabled:0
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok
aof_last_cow_size:0
module_fork_in_progress:0
module_fork_last_cow_size:0

# Stats
total_connections_received:8171
total_commands_processed:823766
instantaneous_ops_per_sec:0
total_net_input_bytes:535432874
total_net_output_bytes:3009001987
instantaneous_input_kbps:0.00
instantaneous_output_kbps:0.00
rejected_connections:0
sync_full:0
sync_partial_ok:0
sync_partial_err:0
expired_keys:6375
expired_stale_perc:0.00
expired_time_cap_reached_count:0
expire_cycle_cpu_milliseconds:12702
evicted_keys:0
keyspace_hits:645335
keyspace_misses:18322
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:1590
migrate_cached_sockets:0
slave_expires_tracked_keys:0
active_defrag_hits:0
active_defrag_misses:0
active_defrag_key_hits:0
active_defrag_key_misses:0
tracking_total_keys:0
tracking_total_items:0
tracking_total_prefixes:0
unexpected_error_replies:0
total_reads_processed:883626
total_writes_processed:834508
io_threaded_reads_processed:0
io_threaded_writes_processed:0

# Replication
role:master
connected_slaves:0
master_replid:7dfffd745b22fc2bf40e2b37e8c3395b3531fc8b
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0

# CPU
used_cpu_sys:95.972328
used_cpu_user:144.302569
used_cpu_sys_children:16.743433
used_cpu_user_children:134.599090

# Modules

# Cluster
cluster_enabled:0

# Keyspace
db0:keys=15447,expires=2551,avg_ttl=106209761

14. Возможные ошибки.

14.1. Соединение с сервером Redis успешно инициализируется, но всякий раз, когда происходит попытка очистить кеш, получается ошибка вида:

PredisResponseServerException : ERR unknown command 'FLUSHDB', with args beginning with:

Это означает, что FLUSHDB был отключен. Это опасная команда, поэтому многие администраторы отключают эту команду, переименовывая команду с помощью команды rename-command configuration в redis.conf. Проверьте файл .conf для получения подробной информации о переименовании команд.

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

При возникновении проблем с кэшированием можно удалить кэш Redis с помощью команды flushall, запущенной из командной строки Redis:

redis-cli
flushall

15. Оригиналы источников информации.

  1. 8host.com «Защита защита Redis».
  2. ru.wikipedia.org «Установка и защита Redis в Centos 7».
  3. redis.io «Command reference».
  4. stackoverflow.com «How to check Redis instance version?»
  5. netpoint-dc.com «Усиление безопасности сервера Redis».
  6. beget.com «Использование Redis».
  7. https://quares.ru «Redis ERR неизвестная команда FLUSHDB».
  8. 8host.com «Настройка кэширования Redis для ускорения WordPress».
  9. ru.wordpress.org «Redis Object Cache».
  10. webdevblog.ru «Redis для начинающих».
  11. github.com «Connection Parameters».
  12. wp-kama.ru «Redis Object Cache».

Читайте также: