Устанавливаем сервер Redis на Debian buster

debianeach

Опубликован:  2019-12-26T10:32:10.874078Z
4600

Redis - это решение с открытым исходным кодом для хранения в оперативной памяти структур данных, чаще всего используется как noSQL база данных, кэш и (или) брокер сообщений для очереди задач. Redis-сервер используется в web-приложении этого сайта. В этом обзоре я продемонстрирую в пошаговом режиме установку сервера Redis на удалённую машину с Debian buster на борту, а так же начальную настройку окружения для корректной работы Redis.

Для этой демонстрации мне понадобится:

  1. Удалённая машина с установленным и настроенным Debian buster и настроенным ssh-сервером;
  2. Десктоп с Debian buster, с которого будет осуществлено подключение к удалённой машине по ssh;
  3. Любой эмулятор терминала (обычно говорят - консоль).

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

Включаю виртуальный сервер с Debian buster, на который нужно установить сервер Redis и дожидаюсь его полной загрузки. На рабочем десктопе открываю терминал.

NwVRogHHvq.png

Мой виртуальный сервер слушает сеть на IP-адресе 192.168.56.102, подключаюсь к нему по протоколу ssh.

ssh newbie@192.168.56.102

PLgB7wZxU2.png

Поскольку мой сервер настроен так, что допускает авторизацию только по ключу, а ключ запаролен, программа запросила ввод пароля для используемого ключа. Вожу пароль, он при вводе не отображается, и нажимаю Enter.

HkIKqohxw4.png

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

Устанавливаю сервер Redis.

sudo apt install -y redis-server

Z8ezmObGd6.png

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

sudo systemctl status redis-server.service

PdbYwXdue4.png

Но хлопать в ладоши пока рановато. На текущий момент мне необходимо посмотреть журнал сервера Redis, который расположен в каталоге /var/log/ - каталог системный, и просматривать этот каталог могут только пользователи группы adm. Так как на моём сервере нет пароля у пользователя root, а для текущего пользователя newbie настроен доступ к программе sudo, будет удобно добавить этого пользователя в группу adm.

sudo usermod -a -G adm newbie

iktKsrOpPI.png

Чтобы изменения вступили в силу, требуется перелогиниться, делаю exit и затем вновь подключаюсь к серверу по ssh.

640EiDtjnd.png

Теперь я могу просто посмотреть лог сервера Redis с помощью команды cat, а меня интересуют последние строчки файла.

cat /var/log/redis/redis-server.log

Xt79vumUNv.png

Как видно на снимке экрана выше, не всё в этом логе безоблачно. Два предупреждения подчёркнуты красным фломастером и требуют внимания администратора. Начну с первого:

797:M 26 Dec 2019 14:24:38.684 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.

Как видно, текст предупреждение предлагает и возможное решение. Открываю в текстовом редакторе nano файл /etc/sysctl.conf.

sudo nano /etc/sysctl.conf

И дописываю в конец файла одну единственную строчку.

vm.overcommit_memory = 1

5vgJBkO45S.png

Сохраняю файл (ctrl+o) и покидаю текстовый редактор (ctrl+x).

Переходим ко второму предупреждению в логе Redis сервера, оно гласит следующее:

797:M 26 Dec 2019 14:24:38.684 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.

В вольном переводе это звучит как: "В вашем ядре включена поддержка THP (Transparent Huge Pages). Это создаст задержки и проблемы использования памяти с Redis. Чтобы исправить эту проблему выполните команду..." - далее следует команда - "с правами пользователя root и добавьте её в ваш /etc/rc.local, чтобы сохранить настройки после перезагрузки. Redis должен быть перезапущен после отключения THP."

Проблема заключается в том, что мы живём в эпоху SystemD, и rc.local некоторым образом стал неактуален. Поэтому для решения проблемы я просто создам новый юнит SystemD, который и будет отключать THP уже в процессе загрузки сервера.

Создаю в текстовом редакторе nano новый файл.

sudo nano /etc/systemd/system/disable-transparent-huge-pages.service

Пишу в этот файл следующий текст.

[Unit]
Description=Disable Transparent Huge Pages

[Service]
Type=oneshot
ExecStart=/bin/sh -c "/usr/bin/echo "never" | tee /sys/kernel/mm/transparent_hugepage/enabled"
ExecStart=/bin/sh -c "/usr/bin/echo "never" | tee /sys/kernel/mm/transparent_hugepage/defrag"

[Install]
WantedBy=multi-user.target

A9xzJZlBpf.png

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

sudo systemctl enable disable-transparent-huge-pages.service

rp31OO6Hjb.png

Перед тем, как перезагрузить сервер, необходимо добавить моего текущего пользователя newbie в группу redis, так как после деплоймента web-приложение, использующее сервер Redis, будет запускаться от его имени.

sudo usermod -a -G redis newbie

BpZYBsSjLT.png

Ребутим сервер.

sudo systemctl reboot 

lMZFgev9q1.png

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

ZJv0UMdyWs.png

Вот теперь можно хлопать в ладоши, наш сервер готов к деплойменту web-приложения и использованию Redis. Так как мне нужен доступ к этому серверу только с локального хоста, никаких других настроек не требуется, сервер Redis готов к использованию в составе web-приложения. Цель демонстрации полностью достигнута.

Комментарии: