Установка Redis в Unix/Linux

Установка Redis в Unix/Linux

Redis (англ. remote dictionary server) — сетевое журналируемое хранилище данных типа «ключ — значение» с открытым исходным кодом. Нереляционная высокопроизводительная СУБД.

Установка Redis в Unix/Linux

Я расскажу как можно установить redis на различные Unix/Linux ОС.

Установка Redis на Debian/Ubuntu

-===СПАСОБ 1 — использовать пакетный менеджер===-

Самый простой способ установки Redis- просто запустите:

# apt-get install redis-server -y

Но есть один минус — такой метод использования, не установит самую новую и последнюю версию.

-===СПАСОБ 2 — использовать сорцы===-

Обновляемся и ставим необходимое ПО:

# apt-get update -y && apt-get install build-essential tcl8.6 -y

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

# cd /usr/local/src && wget http://download.redis.io/releases/redis-stable.tar.gz

Распаковываем скачанный архив:

# tar xzf redis-stable.tar.gz

Переходим в папку и собираем сборку:

# cd redis-stable && make

PS: Как по мне, с этого момента, стоит собрать deb-пакет и потом установить его! Но можно обойтись и без этого. Вот чтиво — Создание RPM или DEB пакетов с Checkinstall в Linux

Если вы не хотите собирать пакет, (опционально запустите «make test», чтобы проверить, все ли в порядке) выполняем:

# make install

Redis установлен. Чтобы настроить redis для запуска в фоновом режиме, запустите скрипт:

# bash /usr/local/src/redis-stable/utils/install_server.sh 

Welcome to the redis service installer
This script will help you easily set up a running redis server

Please select the redis port for this instance: [6379] 
Selecting default: 6379
Please select the redis config file name [/etc/redis/6379.conf] 
Selected default - /etc/redis/6379.conf
Please select the redis log file name [/var/log/redis_6379.log] 
Selected default - /var/log/redis_6379.log
Please select the data directory for this instance [/var/lib/redis/6379] 
Selected default - /var/lib/redis/6379
Please select the redis executable path [/usr/local/bin/redis-server] 
Selected config:
Port           : 6379
Config file    : /etc/redis/6379.conf
Log file       : /var/log/redis_6379.log
Data dir       : /var/lib/redis/6379
Executable     : /usr/local/bin/redis-server
Cli Executable : /usr/local/bin/redis-cli
Is this ok? Then press ENTER to go on or Ctrl-C to abort.
Copied /tmp/6379.conf => /etc/init.d/redis_6379
Installing service...
Success!
/var/run/redis_6379.pid exists, process is already running or crashed
Installation successful!

Вам будет предложено ввести различные значения для создания конфигурации, но вы можете просто нажать клавишу «enter», чтобы принять значения по умолчанию.

Проверим версию редиски:

# redis-server --version

Redis server v=3.2.8 sha=00000000:0 malloc=jemalloc-4.0.3 bits=64 build=3376b593640adc79

Как видно с вывода — у меня самая последняя версия — redis-3.2.8.

Запустить сервис, можно:

# service redis_6379 start

Презапустить сервис, можно:

# service redis_6379 restart

Чтобы проверить статус:

# service redis_6379 status

Для остановки, используем:

# service redis_6379 stop

Для использования редиса, запустите:

# redis-cli

Как-то так.

Чтобы посмотреть, открыл ли редис-сервер соединения, можно использовать:

# netstat -natp | grep redis
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      16245/redis-server

Но как по мне, данная установка хороша, — если использовать только один редис экземпляр на сервере. Т.к редис не поддерживает многопоточность ( насколько мне это известно) и использует 1 процессор. И чтобы увеличить производительность, обычно…. устанавливают еще несколько экземпляров и вешают их на разные порты.

Создаем папку где будут лежать конфиги с редисом:

# mkdir /etc/redis

Копируем конфиг:

# cp /usr/local/src/redis-stable/redis.conf  /etc/redis/6379.conf

Отредактируем конфиг:

# vim /etc/redis/6379.conf

Находим:

dir ./

И меняем на:

dir /var/lib/redis_6379

Я хотел бы чтобы сервер работал как демон:

daemonize yes

Так же, нужно прописать какой гипервизорд будем использовать:

supervised systemd

PS: Чтобы проверить что используется, используйте:

# ps -s1 | awk '{print $4}'| grep -Ev "CMD"

PS: Вот полезное чтиво — Система инициализации в Unix/Linux

И так, мой конфиг выглядит:

bind 127.0.0.1
protected-mode yes
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
supervised systemd
pidfile /var/run/redis_6379.pid
loglevel notice
logfile /var/log/redis_6379.log
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /var/lib/redis_6379
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes

SYSTEMD запуск.

Создаем Redis systemd Unit файл:

# vim /etc/systemd/system/redis.service

И прописываем:

[Unit]
Description=Redis_6379
After=network.target

[Service]
User=redis
Group=redis
Type=forking
PermissionsStartOnly=true
PIDFile=/var/run/redis_6379.pid
#
ExecStartPre=/bin/touch /var/log/redis_6379.log
ExecStartPre=/bin/chown redis:redis /var/log/redis_6379.log
#
ExecStart=/usr/local/redis_6379/redis-server /etc/redis/6379.conf
ExecStop=/usr/local/redis_6379/redis-cli shutdown
Restart=always
RestartSec=3


#ExecStart=/sbin/start-stop-daemon --start --chuid redis:redis --pidfile /var/run/redis_6379.pid --umask 007 --exec /usr/local/redis_6379/redis-server -- /etc/redis/6379.conf
#ExecReload=/bin/kill -USR2 $MAINPID

[Install]
WantedBy=multi-user.target

Перечитываем конфигурацию:

# systemctl daemon-reload

INIT запуск.

# vim /etc/init.d/redis_6379

И вставляем:

#!/bin/sh
#Configurations injected by install_server below....

EXEC=/usr/local/redis_6379/redis-server
CLIEXEC=/usr/local/redis_6379/redis-cli
PIDFILE=/var/run/redis_6379.pid
CONF="/etc/redis/6379.conf"
REDISPORT="6379"
###############
# SysV Init Information
# chkconfig: - 58 74
# description: redis_6379 is the redis daemon.
### BEGIN INIT INFO
# Provides: redis_6379
# Required-Start: $network $local_fs $remote_fs
# Required-Stop: $network $local_fs $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Should-Start: $syslog $named
# Should-Stop: $syslog $named
# Short-Description: start and stop redis_6379
# Description: Redis daemon
### END INIT INFO


case "$1" in
    start)
        if [ -f $PIDFILE ]
        then
            echo "$PIDFILE exists, process is already running or crashed"
        else
            echo "Starting Redis server..."
            $EXEC $CONF
        fi
        ;;
    stop)
        if [ ! -f $PIDFILE ]
        then
            echo "$PIDFILE does not exist, process is not running"
        else
            PID=$(cat $PIDFILE)
            echo "Stopping ..."
            $CLIEXEC -p $REDISPORT shutdown
            while [ -x /proc/${PID} ]
            do
                echo "Waiting for Redis to shutdown ..."
                sleep 1
            done
            echo "Redis stopped"
        fi
        ;;
    status)
        PID=$(cat $PIDFILE)
        if [ ! -x /proc/${PID} ]
        then
            echo 'Redis is not running'
        else
            echo "Redis is running ($PID)"
        fi
        ;;
    restart)
        $0 stop
        $0 start
        ;;
    *)
        echo "Please use start, stop, restart or status as first argument"
        ;;
esac

Создаем пользователя:

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

Создаем папку где будут лежать либы:

# mkdir /var/lib/redis_6379

Выставляем группу и владельца:

# chown redis:redis /var/lib/redis_6379

И, выставляем права:

# chmod 770 /var/lib/redis_6379

Создаем папку где будет лежать файлы с редисом:

# mkdir /usr/local/redis_6379

Копируем нужные данные в созданную папку:

# cp /usr/local/src/redis-stable/src/redis-server /usr/local/redis_6379/
# cp /usr/local/src/redis-stable/src/redis-cli /usr/local/redis_6379/
# cp /usr/local/src/redis-stable/src/redis-benchmark /usr/local/redis_6379/

и, можно еще:

# cp /usr/local/src/redis-stable/src/redis-check-aof /usr/local/redis_6379/
# cp /usr/local/src/redis-stable/src/redis-check-rdb /usr/local/redis_6379/

Для запуска, используем:

# systemctl start redis

Или (если для инита):

# /etc/init.d/redis_6379 start

Попозже, я расскажу как можно написать свои INIT/SYSTEMD Unit скрипты для запуска утилит или ваших скриптов. Это будет не в этой теме. Но я гарантирую — это будет!

Установка Redis на CentOS/RedHat/Fedora

-===СПАСОБ 1 — использовать пакетный менеджер===-

Подключаем EPEL  репозиторий:

Как включить EPEL репозиторий на CentOS

Самый простой способ установки Redis- просто запустите:

# yum install redis -y

Но вы не получите самую новую версию ПО.

-===СПАСОБ 2 — использовать сорцы===-

Обновляемся и ставим необходимое ПО:

# yum update -y && yum install make gcc* wget tcl -y

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

# cd /usr/local/src && wget http://download.redis.io/releases/redis-stable.tar.gz

Распаковываем скачанный архив:

# tar xzf redis-stable.tar.gz

Переходим в папку и собираем сборку:

# cd redis-stable && make

PS: Как по мне, с этого момента, стоит собрать deb-пакет и потом установить его! Но можно обойтись и без этого. Вот чтиво — Создание RPM или DEB пакетов с Checkinstall в Linux

Если вы не хотите собирать пакет, (опционально запустите «make test», чтобы проверить, все ли в порядке) выполняем:

# make install

Redis установлен. Чтобы настроить redis для запуска в фоновом режиме, запустите скрипт:

# bash /usr/local/src/redis-stable/utils/install_server.sh 

Welcome to the redis service installer
This script will help you easily set up a running redis server

Please select the redis port for this instance: [6379] 
Selecting default: 6379
Please select the redis config file name [/etc/redis/6379.conf] 
Selected default - /etc/redis/6379.conf
Please select the redis log file name [/var/log/redis_6379.log] 
Selected default - /var/log/redis_6379.log
Please select the data directory for this instance [/var/lib/redis/6379] 
Selected default - /var/lib/redis/6379
Please select the redis executable path [/usr/local/bin/redis-server] 
Selected config:
Port           : 6379
Config file    : /etc/redis/6379.conf
Log file       : /var/log/redis_6379.log
Data dir       : /var/lib/redis/6379
Executable     : /usr/local/bin/redis-server
Cli Executable : /usr/local/bin/redis-cli
Is this ok? Then press ENTER to go on or Ctrl-C to abort.
Copied /tmp/6379.conf => /etc/init.d/redis_6379
Installing service...
Success!
/var/run/redis_6379.pid exists, process is already running or crashed
Installation successful!

Вам будет предложено ввести различные значения для создания конфигурации, но вы можете просто нажать клавишу «enter», чтобы принять значения по умолчанию.

Проверим версию редиски:

# redis-server --version

Запустить сервис, можно:

# service redis_6379 start

Презапустить сервис, можно:

# service redis_6379 restart

Чтобы проверить статус:

# service redis_6379 status

Для остановки, используем:

# service redis_6379 stop

Для использования редиса, запустите:

# redis-cli

Чтобы добавить службу в автозагрузку, используем:

$ chkconfig --add redis_6379

Или:

$ chkconfig --level 345 redis_6379 on

Меня в такой конфигурации, раздражает то, что он называется redis-server. Для меня логично было бы использовать «redis_6379» из-за того, что на сервере могут иметься еще экземпляры с редисом. По этому, если нужно изменить это, то приступим…

Нас интересует 2 файла:

  • /usr/local/bin/redis-server
    /usr/local/bin/redis-cli

Берем и переименовываем их:

# mv /usr/local/bin/redis-server /usr/local/bin/redis_6379

И собственно, 2-й файл:

# mv /usr/local/bin/redis-cli /usr/local/bin/redis_6379-cli

После этого, стоит поменять путь к данным файлам, для этого открываем:

# vim /etc/init.d/redis_6379

Находим:

EXEC=/usr/local/bin/redis-server
CLIEXEC=/usr/local/bin/redis-cli

Меняем, на:

EXEC=/usr/local/bin/redis_6379
CLIEXEC=/usr/local/bin/redis_6379-cli

И перезапускаем редиску:

# service redis_6379 restart

Или:

# /etc/init.d/redis_6379 restart

И так, все изи.

Установка Redis на Mac OS X

-===СПАСОБ 1 — использовать пакетный менеджер===-

Устанавливаем homebrew:

Установка homebrew на Mac OS X

Можно поискать редис:

# brew search redis

Получить информацию о пакете Redis:

$ brew info redis

Для установки, используйте:

# brew install redis

Добавить редис в автозагрузку ОС:

$ ln -sfv /usr/local/opt/redis/*.plist ~/Library/LaunchAgents

Чтобы убрать редис с автозагрузки ОС, используйте:

$ launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.redis.plist

Запуск редиски через «launchctl»:

$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.redis.plist

Запустите Redis-сервер, используя конфигурационный файл:

$ redis-server /usr/local/etc/redis.conf

Чтобы удалить, используйте:

$ brew uninstall redis

И удаляем:

$ rm ~/Library/LaunchAgents/homebrew.mxcl.redis.plist

Вот и все!

-===СПАСОБ 2 — использовать сорцы===-

Описывалось ранее.

Настройка Redis в Unix/Linux

Откроем конфиг:

# vim /etc/redis/6379.conf

У меня он выглядит следующим образом:

bind 127.0.0.1
protected-mode yes
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile /var/log/redis_6379.log
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /var/lib/redis/6379
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes

И так, у меня редис висит на локалхосте ( 127.0.0.1 ), вот строка:

bind 127.0.0.1

Вообще, можно изменить данную строку на «0.0.0.0» или на конкретный IP адрес.

Строка:

protected-mode yes

Говорит что включен мод-защиты. Это означает, что никто из вне, не сможет подключится к данному редис-серверу. Если хотите чтобы клиенты с других хостов подключались к Redis, то установить в «no».

Сервер использует 6379-й порт. Можно повесить на сокет при необходимости.

Это стандартная конфигурация и она не идеальная, т.к она может «сожрать» всю RAM. Для того чтобы этого не произошло, стоит добавить:

maxmemory 2147483648

И так, я для редиса, ограничил использования виртуальной памяти до 2 Гб. Так же, можно защитить редиску-сервис и установить пароль, для этого — находим строку:

# requirepass foobared

И приводим к виду:

requirepass Your_PASSWORD_here

Иногда, бывает полезным — запретить использование команд, находим:

# rename-command CONFIG ""

И прописываем:

rename-command CONFIG ""

Это запретит использования CONFIG команды в редис. Но можно и переименовать некоторую команду, например:

rename-command CONFIG rename_CONFIG

Данное выражение, заменит использование CONFIG на rename_CONFIG.

Чтобы проверить бенчмарк (нагрузку на редис-сервер), используйте команду:

$ redis-benchmark

На этом, у меня все. Статья «Установка Redis в Unix/Linux» завершена. В следующей теме, я расскажу как собрать кластер из редиску — как создать свой огород))))

One thought on “Установка Redis в Unix/Linux

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

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

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.