Redis - andyceo/documentation GitHub Wiki
Вот основная команда для запуска Redis в режиме master
, используя свой файл конфигурации и папку на хост-системе для данных:
sudo docker run \
-d \
--name redis-master \
--restart=always \
-p 6379:6379 \
-v /data/redis-master/conf/redis.conf:/usr/local/etc/redis/redis.conf \
-v /data/redis-master/data:/data \
-v /data/redis-master/logs:/var/log/redis \
redis:3.0.7 redis-server /usr/local/etc/redis/redis.conf --appendonly yes
До запуска этой команды, файл конфигурации /data/redis-master/conf/redis-master.conf
уже должен существовать и иметь права 777
, также как и директория /data/redis-master/data
:
sudo mkdir -p /data/redis-master/{data,conf,logs}
sudo chmod 777 -R /data/redis-master/{data,logs}
sudo touch /data/redis-master/conf/redis.conf
sudo cat <<EOT >> /data/redis-master/conf/redis.conf
# NEVER TRY DAEMONIZE REDIS IN CONTAINER!
daemonize no
pidfile /var/run/redis/redis.pid
port 6379
timeout 30
loglevel warning
logfile /var/log/redis/redis.log
databases 200
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename redis.rdb
dir /data
masterauth 123qwe
slave-serve-stale-data no
slave-read-only yes
slave-priority 100
maxmemory 268435456
maxmemory-policy volatile-lru
appendonly no
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
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
EOT
После того, как был запушен redis-master
, запустим redis-slave
:
sudo mkdir -p /data/redis-slave/{data,conf,logs}
sudo chmod 777 -R /data/redis-slave/{data,logs}
sudo touch /data/redis-slave/conf/redis.conf
sudo cat <<EOT >> /data/redis-slave/conf/redis.conf
# NEVER TRY DAEMONIZE REDIS IN CONTAINER!
daemonize no
pidfile /var/run/redis/redis.pid
port 6380
timeout 30
loglevel warning
logfile /var/log/redis/redis.log
databases 200
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename redis.rdb
dir /data
slaveof 127.0.0.1 6379
slave-serve-stale-data yes
slave-read-only yes
slave-priority 100
maxmemory 268435456
maxmemory-policy volatile-lru
appendonly no
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
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
EOT
sudo docker run \
-d \
--name redis-slave \
--restart=always \
--link redis-master \
-p 16379:6379 \
-p 6380:6380 \
-v /data/redis-slave/conf/redis.conf:/usr/local/etc/redis/redis.conf \
-v /data/redis-slave/data:/data \
-v /data/redis-slave/logs:/var/log/redis \
redis:3.0.7 redis-server /usr/local/etc/redis/redis.conf --appendonly yes
Здесь мы перекинули порт 6379
на ненужный порт 16379
, т.к. он используется redis-master
(мы запускаем эти контейнеры на одной хост-системе, в учебных целях. Если бы мы запускали их на разных хостах, то нужно было бы настроить DNS и правильные имена контейнеров (опции --name
, --hostname
)).
После успешного запуска контейнера, можно прописать правильные права и владельца на папку с данными и логами:
sudo docker exec -ti redis-slave bash
chmod 775 /data
chown redis:root /data
chmod 755 /var/log/redis
chown redis:redis /var/log/redis
- Docker hub official Redis repository
- Redis latency problems troubleshooting - при сбросе данных на диск, соединение с Redis даже на чтение, притормаживает. В предложенном документе рассказано, как обнаружить и решить проблему.
- https://www.digitalocean.com/community/tutorials/how-to-configure-a-redis-cluster-on-ubuntu-14-04
- http://objectrocket.com/blog/how-to/introduction-to-redis-sentinel
- https://support.pivotal.io/hc/en-us/articles/205309388-How-to-setup-HAProxy-and-Redis-Sentinel-for-automatic-failover-between-Redis-Master-and-Slave-servers
- https://opentodo.net/2014/05/setup-redis-failover-with-redis-sentinel/