1. 获取镜像
# 查看可用的稳定版本
sudo docker search redis
sudo docker pull redis:5.0.8
sudo docker image ls |grep redis
2. Redis单机
1. 启动容器
sudo docker run -d --name redis6379 -p 6379:6379 redis:5.0.8 --requirepass "yeech"
# 持久化Redis
mkdir -p /tmp/redisdata
sudo docker run -d --name redis6379 -p 6379:6379 -v /tmp/redisdata:/data redis:5.0.8 --requirepass "yeech" --appendonly yes
# 停止容器
sudo docker stop redis6379
# 删除容器
sudo docker rm redis6379
# 查看容器状态
sudo docker ps -a
# 设置开机自启
sudo docker update --restart=always redis6379
2. 验证
# 进入终端
sudo docker exec -it redis6379 redis-cli -h 127.0.0.1 -p 6379 -a yeech
redis>> keys *
redis>> set a 124
redis>> get a
# 容器日志查看
sudo docker logs redis6379
sudo docker logs -f -t --tail=50 redis6379
3. Redis Cluster
1. 创建集群配置
sudo mkdir -p /usr/local/redis-cluster
cd /usr/local/redis-cluster
vi redis-cluster.tmpl
配置如下:
port ${PORT}
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 192.168.0.99
cluster-announce-port ${PORT}
cluster-announce-bus-port 1${PORT}
appendonly yes
masterauth yeech
requirepass yeech
- 参数说明
- masterauth:主要是针对master对应的slave节点设置的,在slave节点数据同步的时候用到。
- requirepass:对登录权限做限制,redis每个节点的requirepass可以是独立、不同的。
2. 生成节点目录
共生成6个文件夹,从6001到6006,每个文件夹下包含data和conf文件夹,同时conf里面有redis.conf配置文件。cd /usr/local/redis-cluster
for port in `seq 6001 6006`; do \
mkdir -p ./${port}/conf \
&& PORT=${port} envsubst < ./redis-cluster.tmpl > ./${port}/conf/redis.conf \
&& mkdir -p ./${port}/data; \
done
3. 创建容器
# 清理data,防止下次创建报错“[ERR] Node xxx.xxx.xxx.xxx:pppp is not empty. Either the node already knows other nodes (check with CLUSTER NODES) or contains some key in database 0.”
rm -rf /usr/local/redis-cluster/600*/data/*
# 启动容器
for port in `seq 6001 6006`; do \
docker run -d -ti \
-v /usr/local/redis-cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf \
-v /usr/local/redis-cluster/${port}/data:/data \
--restart always --name redis-${port} --net host \
--sysctl net.core.somaxconn=1024 redis:5.0.8 redis-server /usr/local/etc/redis/redis.conf; \
done
# 查看容器状态
docker ps
# 停止容器
docker stop redis-6001
# 删除容器
docker rm redis-6001
4. 创建Redis集群
1. 进入Redis客户端
# 随便进入一个已运行的容器
docker exec -it redis-6001 bash
2. 创建Redis集群
/usr/local/bin/redis-cli -a yeech --cluster create \
192.168.0.99:6001 \
192.168.0.99:6002 \
192.168.0.99:6003 \
192.168.0.99:6004 \
192.168.0.99:6005 \
192.168.0.99:6006 \
--cluster-replicas 1
5. 验证
# 进入终端
sudo docker exec -it redis-6001 redis-cli -a yeech -h 127.0.0.1 -p 6001 -c
redis>> cluster info
redis>> cluster nodes
redis>> keys *
redis>> set a 124
redis>> get a
# 容器日志查看
sudo docker logs redis-6001
sudo docker logs -f -t --tail=50 redis-6001
6. 停止容器
for port in `seq 6001 6006`; do \
docker stop redis-${port}; \
done
7. 启动容器
for port in `seq 6001 6006`; do \
docker start redis-${port}; \
done
8. 删除容器
for port in `seq 6001 6006`; do \
docker stop redis-${port}; \
docker rm redis-${port}; \
done
参考
CSDN:极简Docker环境Redis-5安装redis-cluster集群(不需要Ruby)
https://blog.csdn.net/adolph586/article/details/85340764