
Установка 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» завершена. В следующей теме, я расскажу как собрать кластер из редиску — как создать свой огород))))
Спасибо, очень помогло))