Docker配置redis集群
拉取redis
docker pull redis
创建redis要用到的网络
桥接模式
docker network create redis --subnet 172.38.0.0/16
宿主机创建redis的配置脚本
# 配置脚本 /Users/lu 是我自己的私人目录
for port in $(seq 7000 7005);
do
mkdir -p /Users/lu/myredis/node-${port}/data
mkdir -p /Users/lu/myredis/node-${port}/conf
touch /Users/lu/myredis/node-${port}/conf/redis.conf
cat << EOF >/Users/dxm/myredis/node-${port}/conf/redis.conf
port 6379
masterauth 1234
requirepass 1234
cluster-enabled yes
bind 0.0.0.0
#cluster-announce-ip 172
#cluster-announce-port 6379
#cluster-announce-bus-port 16379
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
EOF
done
宿主机创建docker运行容器的脚本
for port in $(seq 7000 7005);
do
docker run --name redis-${port} -p ${port}:6379 -p 1$(port):16379 -d -v /Users/dxm/myredis/node-${port}/conf/redis.conf:/etc/redis/redis.conf -v /Users/dxm/myredis/node-${port}/data:/data --net redis redis redis-server /etc/redis/redis.conf
done
进入容器执行以下命令,创建集群
docker exec -it redis-7000 redis-cli -a 1234 --cluster create 172.38.0.2:6379 172.38.0.3:6379 \
172.38.0.4:6379 172.38.0.5:6379 172.38.0.6:6379 172.38.0.7:6379 \
--cluster-replicas 1
测试是否成功
#进入redis-7000容器内部
docker exec -it redis-7000 redis-cli -c -a 1234
# 我们添加一些数据
set lyp niu
# 切换其他容器,通过get lyp 都可以正常数据。
# 集群搭建成功!!
思考的问题
停止主容器,它的从会不会变成主机 同时我们在重新启动 看一看此时主从关系如何
答:停止主容器,从会变为主。当主重新上线后,它会自动变为从。
解决不了的问题
我添加了一个key,它映射到了redis-7000这个容器上。
我通过宿主机直接连接这个容器可以拿到值。但是从别的容器获取就会超时。解决不了这个问题。你们知道什么原因吗???
以下为详细的操作。
# 宿主机远程连接redis
redis-cli -c -h 172.38.0.3 -p 6379 -a 1234
#获取数据
get lyp
#超时
-> Redirected to slot [7025] located at 172.38.0.3:6379
Could not connect to Redis at 172.38.0.3:6379: Operation timed out
Could not connect to Redis at 172.38.0.3:6379: Operation timed out