logo

Установка Redis средствами Docker

В этой статье представлена информация об установке Redis средствами Docker на примере Ubuntu 20.04.1 LTS. Все действия производятся в консоли Linux-окружения.

В сравнении с установкой через пакетный менеджер Ubuntu, которая описана в статье "Использование кэша Redis в ELMA", различаются места хранения файла конфигурации и способы запуска служб.

Перед установкой проверьте, что выполнены следующие условия:

  • есть утилиты docker-compose: docker-compose ps;

  • установлен образ Redis. Скачать можно командой docker pull redis:5.0.8.

Если нет Docker (утилит, прав на работу Docker)

В этом случае пользователю с правами суперпользователя (root) нужно выполнить следующие действия:

1. Установить сам Docker: sudo apt-get install docker.

2. Установить утилиты docker-compose для работы с Docker: sudo install docker-compose.

3. Создать группу docker для выдачи полномочий для работы с Docker: sudo groupadd docker.

4. Добавить пользователя username (под этим login происходит создание и запуск Docker) в группу docker: sudo gpasswd -ausernamedocker.

5. Чтобы применились настройки, перезагрузить сервер.

Если на целевой машине нет доступа в Интернет

В этом случае нужно выполнить следующие действия:

1. Установить образ на машине с выходом в интернет: docker pull redis:5.0.8.

2. Сохранить образ: docker save -o redis-5.0.8.tar redis:5.0.8.

3. Скопировать образ на целевую машину.

4. Установить образ: docker image import redis-5.0.8.tar redis:5.0.8.

Место хранения файлов настроек Redis и Docker

Чтобы создать место хранения файлов настроек Redis и Docker, нужно выполнить следующие действия:

1. Создать место хранения файлов конфигурации: sudo mkdir /home/test && sudo chownusername:username/home/test.

2. Войти под пользователем username или su - username.

3. Создать переменную с информацией о пользователе, от которого будет работать контейнер: export redis_user=$(id -u).

4. Создать переменную с информацией о группе, от которой будет работать контейнер: export redis_group=$(id -g).

5. Перейти в место хранения файлов конфигурации: cd /home/test.

6. Создать папку для хранения файлов конфигурации Redis: mkdir conf.

7. Создать папку для хранения журналов работы Redis: mkdir logs.

Файл настроек создания контейнера

Создайте файл конфигрурации docker-compose.yml: touch /home/test/docker-compose.yml.

1. В начале файла указывается версия спецификации файла конфигурации.

version: '3'

services:

2. В зависимости от роли сервера в файле описываются различные контейнеры.

Роль master (для сервера с ролью master).

master:
    image: redis:5.0.8
    user: $redis_user:$redis_group
    volumes: - ./logs:/log - ./conf:/conf
    command: redis-server /conf/master.conf
    network_mode: host
    ports: - 6379:6379

Роль replica (для сервера с ролью replica).

replica:
    image: redis:5.0.8
    user: $redis_user:$redis_group
    volumes: - ./logs:/log - ./conf:/conf
    command: redis-server /conf/replica.conf
    network_mode: host
    ports: - 6379:6379

Роль sentinel (для сервера с ролью master, replica или только sentinel).

entinel:
    image: redis:5.0.8
    user: $redis_user:$redis_group
    volumes: - ./logs:/log - ./conf:/conf
    command: redis-server /conf/sentinel.conf --sentinel
    network_mode: host
    ports: - 26379:26379

Если необходим автозапуск контейнера, в его описание нужно добавить директиву restart: always.

sentinel:
  image: redis:5.0.8
  user: $redis_user:$redis_group
  restart: always
  volumes: - ./logs:/log - ./conf:/conf
  command: redis-server /conf/sentinel.conf --sentinel
  network_mode: host
  ports: - 26379:26379
Внимание!
Следите за отступами. Пример оформления файла конфигурации смотрите во вложении к этой статье.

Файлы настройки Redis

Создайте файлы конфигурации для Redis в зависимости от роли, которую описали в docker-compose.yml.

touch ./conf/master.conf

Содержимое файла можно отредактировать через mcedit ./conf/master.conf или любой удобный редактор.

masterauth "redispassword"
requirepass "redispassword"
bind 0.0.0.0
protected-mode yes
dir "/tmp"
port 6379
logfile "/log/redis-master.log"
maxmemory 512mb
maxmemory-policy volatile-lru
tcp-backlog 511
timeout 0
tcp-keepalive 60
daemonize no
supervised no
pidfile "/var/run/redis/redis-server.pid"
loglevel notice
databases 16
always-show-logo yes
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename "dump.rdb"
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
replica-priority 100
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
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
aof-use-rdb-preamble 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
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes

touch ./conf/replica.conf

Содержимое файла можно отредактировать через mcedit ./conf/replica.conf или любой удобный редактор.

replicaof ip_мастер_сервер_redis 6379
masterauth "redispassword"
requirepass "redispassword"
bind 0.0.0.0
protected-mode yes
dir "/tmp"
port 6379
logfile "/log/redis-replica.log"
maxmemory 512mb
maxmemory-policy volatile-lru
tcp-backlog 511
timeout 0
tcp-keepalive 60
daemonize no
supervised no
pidfile "/var/run/redis/redis-server.pid"
loglevel notice
databases 16
always-show-logo yes
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename "dump.rdb"
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
replica-priority 100
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
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
aof-use-rdb-preamble 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
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes

touch ./conf/sentinel.conf

Содержимое файла можно отредактировать через mcedit ./conf/sentinel.conf или любой удобный редактор.

port 26379
dir /tmp
sentinel monitor elma-redis ip_мастер_сервер_redis  6379 2
sentinel down-after-milliseconds elma-redis 30000
sentinel parallel-syncs elma-redis 1
sentinel failover-timeout elma-redis 30000
logfile /log/sentinel.log
sentinel auth-pass elma-redis redispassword

После этого проверьте правильность docker-compose.yml: docker-compose config.

Создайте, запустите контейнеры: docker-compose up -d.

Состояние контейнера можно посмотреть с помощью команды docker-compose ps.
Чтобы проверить службу, подключитесь к контейнеру: docker exec -it имя_контейнера_редис bash.

redis-cli

auth redispassword

Если после создания контейнеров в файлы конфигурации были внесены изменения, перезапустите контейнеры: docker-compose restart.

Если были внесены изменения в файлы конфигурации docker-compose.yml, контейнеры нужно пересоздать: docker-compose up -d.

Перед созданием и пересозданием контейнера нужно объявлять переменные redis_user, redis_group:

  • создайте переменную с информацией о пользователе, от которого будет работать контейнер: export redis_user=$(id -u);
  • создайте переменную с информацией о группе, от которой будет работать контейнер: export redis_group=$(id -g).

Прикрепленные файлы