Установка redis на сервер Ubuntu 16.04

Установка

Зависимости

Для установки понадобятся пакеты build-essential и tcl

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

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

Нам исходники нужны будут только для установки, поэтому загрузим и распакуем их в ‘/tmp

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

Сборка

make
make test
sudo make install

Настройка

Настройка Redis

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

В файле находим параметр supervised, по умолчанию его значение no. Меняем на systemd

supervised systemd

Укажем место хранения дампа на диске

dir /var/lib/redis

Сохраняем файл и выходим.

Настройка systemd

Настроим управление запуском redis с помощью systemd

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

в него вставляем конфигурацию

[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. Создаем все вот это вот:

sudo adduser --system --group --no-create-home redis
sudo mkdir /var/lib/redis
sudo chown redis:redis /var/lib/redis
sudo chmod 770 /var/lib/redis

Запускаем и проверяем

sudo systemctl start redis
sudo systemctl status redis

Если все работает, включаем автозапуск при загрузке:

sudo systemctl enable redis

Дальнейшая настройка

На Ubuntu 16.04 у меня посыпались предупреждения:

1. somaxconn

# WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128

Проверяем, действительно ли:

sysctl -a | grep "net.core.somaxconn"
net.core.somaxconn = 128

решается это в файле /etc/sysctl.conf — в конец добавить (если нет) параметр:

sudo sh -c 'echo "net.core.somaxconn = 1024" >> /etc/sysctl.conf'

ну или по ситуации значение. Затем считываем настройки заново

sudo sysctl -p

2. vm.overcommit_memory = 1

# 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.

Исправляется там же

sudo sh -c 'echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf'

3. Отключаем THP

# 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

В предупреждении все сказано:

sudo sh -c "echo never > /sys/kernel/mm/transparent_hugepage/enabled"

4. Сокет

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

sudo vim /etc/redis/redis.conf
В файле меняем строки:
unixsocket /var/run/redis.sock
unixsocketperm 777
и
# Accept connections on the specified port, default is 6379.
# If port 0 is specified Redis will not listen on a TCP socket.

port 0
Перезапускаем и для проверки пробуем подключиться клиентом:
sudo systemctl restart redis.service
redis-cli -s /tmp/redis.sock
redis /tmp/redis.sock>

Список для чтения

  1. https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-redis-on-ubuntu-16-04
  2. http://zongming.net/read-861-e
  3. https://www.techandme.se/performance-tips-for-redis-cache-server/