Установка
Зависимости
Для установки понадобятся пакеты 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>