Установка и настройка Redis в Ubuntu 16.04

Published by 3 Comments

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

Требования

  • Предварительно настроенный сервер Ubuntu 16.04.
  • Не-root пользователь с доступом к команде sudo.

Все необходимые инструкции по подготовке сервера можно найти в этой статье.

Установка зависимостей

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

В репозиториях Ubuntu можно найти метапакет build-essential, содержащий инструменты для компиляции. Для тестирования нужен tcl. Чтобы установить эти пакеты, введите:

sudo apt-get update
sudo apt-get install build-essential tcl

Загрузка, компиляция и установка Redis

Загрузка и извлечение исходного кода

Поскольку исходный код не нужно хранить (для обновления программы лучше скомпилировать код заново), его можно загрузить и собрать в каталоге /tmp. Откройте этот каталог:

cd /tmp

Теперь загрузите последнюю стабильную версию Redis. Она всегда доступна по этой ссылке.

curl -O http://download.redis.io/redis-stable.tar.gz

Распакуйте архив:

tar xzvf redis-stable.tar.gz

Откройте каталог с исходным кодом Redis:

cd redis-stable

Сборка и установка Redis

Теперь можно скомпилировать бинарные файлы Redis:

make

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

make test

На выполнение команды уйдёт несколько минут. После тестирования можно установит бинарные файлы:

sudo make install

Настройка Redis

После установки Redis нуждается в настройке.

Для начала создайте каталог для хранения конфигурационных файлов, /etc/redis.

sudo mkdir /etc/redis

Скопируйте образец конфигурационного файла Redis из исходного архива:

sudo cp /tmp/redis-stable/redis.conf /etc/redis

Откройте файл, чтобы изменить в нём несколько параметров:

sudo nano /etc/redis/redis.conf

Найдите директиву supervised; на данный момент её значение no. Поскольку вы работаете в операционной системе, которая использует систему инициализации systemd, текущее значение директивы нужно изменить на systemd.

. . .
# If you run Redis from upstart or systemd, Redis can interact with your
# supervision tree. Options:
#   supervised no      - no supervision interaction
#   supervised upstart - signal upstart by putting Redis into SIGSTOP mode
#   supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET
#   supervised auto    - detect upstart or systemd method based on
#                        UPSTART_JOB or NOTIFY_SOCKET environment variables
# Note: these supervision methods only signal "process is ready."
#       They do not enable continuous liveness pings back to your supervisor.
supervised systemd
. . .

Затем найдите директиву dir. Данная опция указывает каталог для дампа постоянных данных Redis. Выберите каталог, открытый для записи для Redis и заблокированный для обычных пользователей. В данном руководстве это каталог /var/lib/redis.

. . .
# The working directory.
#
# The DB will be written inside this directory, with the filename specified
# above using the 'dbfilename' configuration directive.
#
# The Append Only File will also be created inside this directory.
#
# Note that you must specify a directory here, not a file name.
dir /var/lib/redis
. . .

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

Создание unit-файла для Redis

Теперь нужно создать unit-файл systemd для Redis, чтобы система инициализации могла управлять процессом Redis.

Создайте и откройте файл /etc/systemd/system/redis.service.

sudo nano /etc/systemd/system/redis.service

Добавьте в него раздел [Unit], содержащий описание и зависимости процесса:

[Unit]
Description=Redis In-Memory Data Store
After=network.target

В разделе [Service] нужно настроить поведение сервера. В целях безопасности нельзя запускать сервис как root. Для этого нужно создать отдельного пользователя и группу (в руководстве они условно называются redis).

Чтобы запустить сервис, нужно вызвать бинарный файл redis-server, указанный в настройках. Чтобы остановить его, можно использовать команду Redis shutdown при помощи бинарного файла redis-cli. Чтобы настроить восстановление ошибок Redis, нужно изменить значение директивы Restart на always. Получится так:

[Unit]
Description=Redis In-Memory Data Store
After=network.target
[Service]
User=redis
Group=redis
ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf
ExecStop=/usr/local/bin/redis-cli shutdown
Restart=always

Затем добавьте раздел [Install], определяющий target системы systemd, к которому должен подключаться данный сервис.

[Unit]
Description=Redis In-Memory Data Store
After=network.target
[Service]
User=redis
Group=redis
ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf
ExecStop=/usr/local/bin/redis-cli shutdown
Restart=always
[Install]
WantedBy=multi-user.target

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

Создание пользователя, группы и каталога Redis

Теперь нужно создать пользователя, группу и каталог, указанные в предыдущих настройках.

Сначала создайте группу и пользователя redis. Для этого запустите команду:

sudo adduser --system --group --no-create-home redis

Затем создайте каталог /var/lib/redis:

sudo mkdir /var/lib/redis

Передайте пользователю и группе redis права на каталог:

sudo chown redis:redis /var/lib/redis

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

sudo chmod 770 /var/lib/redis

Запуск и тестирование Redis

Запуск сервиса Redis

Запустите сервис systemd:

sudo systemctl start redis

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

sudo systemctl status redis

Команда вернёт:

redis.service - Redis Server
Loaded: loaded (/etc/systemd/system/redis.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2016-05-11 14:38:08 EDT; 1min 43s ago
Process: 3115 ExecStop=/usr/local/bin/redis-cli shutdown (code=exited, status=0/SUCCESS)
Main PID: 3124 (redis-server)
Tasks: 3 (limit: 512)
Memory: 864.0K
CPU: 179ms
CGroup: /system.slice/redis.service
└─3124 /usr/local/bin/redis-server 127.0.0.1:6379
. . .

Тестирование Redis

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

redis-cli

Затем введите в появившуюся строку:

ping

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

PONG

Убедитесь в том, что вы можете добавлять ключи:

set test "It's working!"
OK

Попробуйте извлечь значение:

get test

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

"It's working!"

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

exit

Попробуйте перезапустить Redis:

sudo systemctl restart redis

Снова подключитесь при помощи клиента и убедитесь, что добавленное ранее значение доступно:

redis-cli
get test

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

"It's working!"

Закройте командную строку:

exit

Автозапуск Redis

Убедившись, что Redis работает, настройте автозапуск сервиса.

Для этого введите:

sudo systemctl enable redis
Created symlink from /etc/systemd/system/multi-user.target.wants/redis.service to /etc/systemd/system/redis.service.

Заключение

Теперь хранилище Redis установлено на сервер Ubuntu 16.04 и полностью готово к работе. Больше полезных мануалов для Redis можно найти в нашем Информатории.

Tags: ,

Комментарии (3)

  • petr:

    Зачем компилировать то, что уже есть давно в пакетах стандартного репозитория?

  • Александр:

    Redist при попытке установить его выдает:
    Hint: It’s a good idea to run ‘make test’ ;)

    INSTALL install
    INSTALL install
    INSTALL install
    INSTALL install
    INSTALL install

    • Alex:

      Наверняка вы давно решили проблему, но оставлю для тех, кто с ней еще столкнется:
      Нужно после make install выполнить следующее:

      cd utils
      sudo ./install_server.sh

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *


*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>