博主拉的是最新版的redis镜像
直接通过docker pull redis就可以
博主创建的是mkdir /mydata/redis文件夹
博主通过一个脚本快速创建出6个redis容器
cd /mydata/redis目录下执行一下脚本即可(ip需改成自己的虚拟机地址,端口可自行设定)
for port in $(seq 7001 7006); \ do \ mkdir -p /mydata/redis/node-${port}/conf touch /mydata/redis/node-${port}/conf/redis.conf cat << EOF >/mydata/redis/node-${port}/conf/redis.conf port ${port} cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 cluster-announce-ip 192.168.137.200 cluster-announce-port ${port} cluster-announce-bus-port 1${port} appendonly yes EOF docker run -p ${port}:${port} -p 1${port}:1${port} --name redis-${port} \ -v /mydata/redis/node-${port}/data:/data \ -v /mydata/redis/node-${port}/conf/redis.conf:/etc/redis/redis.conf \ -d redis redis-server /etc/redis/redis.conf; \ done
执行docker ps查看一下redis进程
这样就启动成功啦,但是我们此时还只是6个redis单节点,并没有把他们联合起来。
我们可以进入到一个redis容器中,用集群命令创建出一个redis集群
博主选择进入7001节点的redis容器
docker exec -it redis-7001 bash
接着执行(ip需改成自己的,端口也是)
redis-cli --cluster create 192.168.137.200:7001 192.168.137.200:7002 192.168.137.200:7003 \ 192.168.137.200:7004 192.168.137.200:7005 192.168.137.200:7006 --cluster-replicas 1
我们可以看到7001为master节点,7006为slave节点,7004为master节点,7003为slave节点,7002为master节点,7005为slave节点。
此时就创建完成了
此时连接7001的redis测试,发现它会计算hash槽的位置,来存放值
并且可以执行cluster info命令查看集群状态
cluster nodes查看集群节点
我们可以关闭7001节点的redis,看7006是否接替为master节点
我们可以进入7002节点的redis查看,发现7001节点宕机了,7006成功替换为master节点
此时我们重新启动7001节点的redis容器
再次查看集群状态
发现启动好的7001容器变为了slave节点。