Вступление
Redis - это система кеширования и хранения ключей с открытым исходным кодом, также называемая сервером структуры данных за расширенную поддержку нескольких типов данных, таких как хеши, списки, наборы и растровые изображения. Он также поддерживает кластеризацию, что делает его часто используемым для высокодоступных и масштабируемых сред.
В этом руководстве мы увидим, как установить и настроить внешний сервер Redis для использования в качестве обработчика сеанса для приложения PHP, работающего в Ubuntu 14.04.
Обработчик сеанса отвечает за хранение и извлечение данных, сохраненных в сеансах - по умолчанию PHP использует для этого * files *. Внешний обработчик сеанса может использоваться для создания scalable сред PHP за https://www.digitalocean.com/community/ учебные пособия / концепции введения в haproxy-and-load-балансировки [балансировщик нагрузки], где все узлы приложений будут подключаться к центральному серверу для обмена информацией о сеансе.
Предпосылки
В этом уроке мы будем работать с двумя разными серверами. По соображениям безопасности и производительности важно, чтобы обе капли располагались в одном центре обработки данных с https://www.digitalocean.com/community/tutorials/how-to-set-up-and-use-digitalocean-private-networking [ частная сеть] включена. Это то, что вам нужно:
-
Веб-сервер PHP, на котором работает LAMP или https: //www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-on-ubuntu-14-04[LEMP] в Ubuntu 14.04 - мы будем ссылаться на этот сервер как * сеть *
-
Второй, чистый сервер Ubuntu 14.04, на котором будет установлен Redis - мы будем называть этот сервер * redis *
Вам понадобится правильный SSH-доступ к обоим серверам как обычному пользователю с разрешения sudo.
Шаг 1 - Установите Redis Server
Первое, что нам нужно сделать, это запустить и запустить сервер Redis на нашем * redis * Droplet.
Мы будем использовать обычный менеджер пакетов Ubuntu с доверенным репозиторием PPA, предоставленным Крисом Ли. Это необходимо для того, чтобы мы получили последнюю стабильную версию Redis.
Сначала добавьте хранилище PPA, выполнив:
sudo add-apt-repository ppa:chris-lea/redis-server
Нажмите + ENTER +
для подтверждения.
Теперь вам нужно обновить кеш менеджера пакетов:
sudo apt-get update
И наконец, давайте установим Redis, запустив:
sudo apt-get install redis-server
Redis теперь должен быть установлен на вашем сервере. Чтобы проверить установку, попробуйте эту команду:
redis-cli ping
Это подключится к экземпляру Redis, работающему на * localhost * через порт * 6379 *. Вы должны получить * PONG * в качестве ответа.
Шаг 2 - Настройте Redis для принятия внешних подключений
По умолчанию Redis разрешает подключения только к + localhost +
, что в основном означает, что вы будете иметь доступ только с сервера, на котором установлен Redis. Нам нужно изменить эту конфигурацию, чтобы разрешить подключения, исходящие с других серверов в той же частной сети, что и сервер * redis *.
Первое, что нам нужно сделать, это выяснить IP-адрес частной сети компьютера Redis. Следующие шаги должны быть выполнены на сервере * redis *.
Запустите + ifconfig +
, чтобы получить информацию о ваших сетевых интерфейсах:
sudo ifconfig
Вы должны получить вывод, похожий на этот:
Output eth0 Link encap:Ethernet HWaddr 04:01:63:7e:a4:01
inet addr:188.166.77.33 Bcast:188.166.127.255 Mask:255.255.192.0
inet6 addr: fe80::601:63ff:fe7e:a401/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3497 errors:0 dropped:0 overruns:0 frame:0
TX packets:3554 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:4895060 (4.8 MB) TX bytes:619070 (619.0 KB)
eth1 Link encap:Ethernet HWaddr 04:01:63:7e:a4:02
inet addr: Bcast:10.133.255.255 Mask:255.255.0.0
inet6 addr: fe80::601:63ff:fe7e:a402/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:8 errors:0 dropped:0 overruns:0 frame:0
TX packets:7 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:648 (648.0 B) TX bytes:578 (578.0 B)
Найдите + inet_addr +
, назначенный интерфейсу * eth1 *. В данном случае это + 10.133.14.9 +
- это IP-адрес, который мы будем использовать позже для подключения к серверу * redis * с сервера * web *.
Используя ваш любимый редактор командной строки, откройте файл + / etc / redis / redis.conf +
и найдите строку, содержащую определение + bind +
. Вы должны добавить свой * IP-адрес частной сети * в строку следующим образом:
sudo vim /etc/redis/redis.conf
/etc/redis/redis.conf
bind localhost
Если вы видите + 127.0.0.1 +
вместо + localhost +
, это нормально; просто добавьте свой личный IP после того, что уже там.
Теперь вам просто нужно перезапустить сервис Redis, чтобы применить изменения:
sudo service redis-server restart
С этим изменением любой сервер в той же частной сети также сможет подключаться к этому экземпляру Redis.
Шаг 3 - Установите пароль для сервера Redis
Чтобы добавить дополнительный уровень безопасности к вашей установке Redis, рекомендуется установить пароль для доступа к данным сервера. Мы отредактируем тот же файл конфигурации из предыдущего шага, + / etc / redis / redis.conf +
:
sudo vim /etc/redis/redis.conf
Теперь раскомментируйте строку, содержащую + requirepass +
, и установите надежный пароль:
/etc/redis/redis.conf
requirepass
Перезапустите службу Redis, чтобы изменения вступили в силу:
sudo service redis-server restart
Шаг 4 - Проверка подключения Redis и аутентификации
Чтобы проверить, все ли ваши изменения работали должным образом, подключитесь к службе Redis с компьютера * redis *:
redis-cli -h
Output10.133.14.9:6379>
Если вы определили пароль и теперь пытаетесь получить доступ к данным, вы должны получить ошибку AUTH:
keys *
Output(error) NOAUTH Authentication required.
Для аутентификации вам просто нужно запустить команду + AUTH +
, предоставив тот же пароль, который вы определили в файле + / etc / redis / redis.conf +
:
AUTH yourverycomplexpasswordhere
Вы должны получить * OK * в качестве ответа. Теперь, если вы запустите:
keys *
Вывод должен быть похож на это:
Output(empty list or set)
Эти выходные данные означают, что ваш сервер Redis пуст, что в точности соответствует нашим ожиданиям, поскольку сервер * web * еще не настроен на использование этого сервера Redis в качестве обработчика сеанса.
Держите этот сеанс SSH открытым и подключенным к + redis-cli +
, пока мы выполняем следующие шаги - мы вернемся к приглашению + redis-cli +
, чтобы проверить, правильно ли хранятся данные сеанса, после того как мы сделаем необходимые изменения на * веб * сервере.
Шаг 5 - Установите расширение Redis на веб-сервере
Следующие шаги должны быть выполнены на сервере * web *. Нам нужно установить расширение PHP Redis, иначе PHP не сможет подключиться к серверу Redis.
Сначала обновите кеш менеджера пакетов, выполнив:
sudo apt-get update
Затем установите пакет + php5-redis +
:
sudo apt-get install php5-redis
Ваш веб-сервер теперь должен иметь возможность подключаться к Redis.
Шаг 6 - Установите Redis в качестве обработчика сеанса по умолчанию на веб-сервере
Теперь нам нужно отредактировать файл + php.ini
на сервере * web *, чтобы изменить обработчик сеанса по умолчанию для PHP. Расположение этого файла будет зависеть от вашего текущего стека. Для стека * LAMP * в Ubuntu 14.04 это обычно + / etc / php5 / apache2 / php.ini
. Для стека * LEMP * в Ubuntu 14.04 обычно используется путь + / etc / php5 / fpm / php.ini +
.
Если вы не уверены в местонахождении вашего основного файла + php.ini
, выяснить это можно с помощью функции` + phpinfo () + . Просто поместите следующий код в файл с именем `+ info.php +
внутри вашего корневого веб-каталога:
<?php
phpinfo();
При доступе к скрипту из вашего браузера найдите строку, содержащую «Loaded Configuration File», и вы должны найти точное местоположение основного загруженного файла + php.ini +
.
Откройте файл + php.ini
и найдите строку, содержащую` + session.save_handler`. Значением по умолчанию является + files +
. Вы должны изменить его на + redis +
.
В средах * LAMP *:
sudo vim /etc/php5/apache2/php.ini
В средах * LEMP *:
sudo vim /etc/php5/fpm/php.ini
/etc/php5/fpm/php.ini
session.save_handler = redis
Теперь вы должны найти строку, содержащую + session.save_path +
. Раскомментируйте его и измените значение, чтобы оно содержало строку подключения Redis. Содержимое должно иметь следующий формат, все в одной строке: + tcp: // IPADDRESS: PORT? Auth = REDISPASSWORD +
/etc/php5/fpm/php.ini
session.save_path = "tcp://?auth="
Сохраните файл и перезапустите службу * php *.
В средах * LAMP *:
sudo service apache2 restart
В средах * LEMP *:
sudo service php5-fpm restart
Шаг 7 - Проверка обработки сеанса Redis
Чтобы убедиться, что ваши сеансы теперь обрабатываются Redis, вам понадобится PHP-скрипт или приложение, которое хранит информацию о сеансах. Мы собираемся использовать простой скрипт, который реализует счетчик - каждый раз, когда вы перезагружаете страницу, напечатанное число увеличивается.
Создайте файл с именем + test.php +
на сервере * web * и поместите его в корневую папку вашего документа:
sudo vim test.php
/usr/share/nginx/html/test.php
<?php
//simple counter to test sessions. should increment on each page reload.
session_start();
$count = isset($_SESSION['count']) ? $_SESSION['count'] : 1;
echo $count;
$_SESSION['count'] = ++$count;
Укажите в браузере + http: /// test.php +
, чтобы получить доступ к сценарию. Это должно увеличивать число каждый раз, когда вы перезагружаете страницу.
Теперь вы должны хранить информацию о сеансе на сервере Redis. Чтобы проверить, вернитесь к сеансу SSH на машине * redis *, где мы ранее подключались к службе Redis с помощью + redis-cli +
. Получить содержимое снова с помощью + keys * +
:
keys *
И вы должны получить вывод, похожий на этот:
Output1) "PHPREDIS_SESSION:j9rsgtde6st2rqb6lu5u6f4h83"
Это показывает, что информация о сеансе хранится на сервере Redis. Вы можете подключить дополнительные веб-серверы к серверу Redis аналогичным образом.
Заключение
Redis - это мощная и быстрая служба хранения значений ключей, которая также может использоваться в качестве обработчика сеансов для PHP, обеспечивая масштабируемые среды PHP, предоставляя распределенную систему для хранения сеансов. Для получения дополнительной информации о масштабировании PHP-приложений вы можете проверить эту статью: Horizontally Scaling PHP Applications.