docker redis集群搭建

93 阅读3分钟

创建redis实例

docker run -d --name redis-node-1 --net host --privileged=true -v /home/admin/docker/redis/redis-node-1/data:/data redis --cluster-enabled yes --appendonly yes --port 6381
docker run -d --name redis-node-2 --net host --privileged=true -v /home/admin/docker/redis/redis-node-2/data:/data redis --cluster-enabled yes --appendonly yes --port 6382
docker run -d --name redis-node-3 --net host --privileged=true -v /home/admin/docker/redis/redis-node-3/data:/data redis --cluster-enabled yes --appendonly yes --port 6383
docker run -d --name redis-node-4 --net host --privileged=true -v /home/admin/docker/redis/redis-node-4/data:/data redis --cluster-enabled yes --appendonly yes --port 6384
docker run -d --name redis-node-5 --net host --privileged=true -v /home/admin/docker/redis/redis-node-5/data:/data redis --cluster-enabled yes --appendonly yes --port 6385
docker run -d --name redis-node-6 --net host --privileged=true -v /home/admin/docker/redis/redis-node-6/data:/data redis --cluster-enabled yes --appendonly yes --port 6386

image.png

创建集群

redis-cli --cluster create 192.168.247.128:6381 192.168.247.128:6382 192.168.247.128:6383 192.168.247.128:6384 192.168.247.128:6385 192.168.247.128:6386 --cluster-replicas 1 image.png

查看集群信息

redis-cli --cluster check 192.168.247.128:6381 image.png

  • 主:6381 从: 6385
  • 主:6382 从: 6386
  • 主:6383 从: 6384

验证:

image.png 在6381上设置的key根据hash槽分配到6382上,6382对应的从redsi为6286 image.png

image.png

容错迁移

停止或者删除reids-node-2:

docker stop redis-node-2 或者 docker rm -f redis-node-2

查看集群状态 image.png

恢复之前的主从关系

启动redis-node-2,启动后,该实例是从redis,对应的主reids端口为6386 image.png

将6382变成主redsi,停止redsi-node-6,等一会(重启redis-node-6或者停止后立刻启动,6382可能还是从reids),然后在启动redsi-node-6 image.png image.png

扩容

添加实例

docker run -d --name redis-node-7 --net host --privileged=true -v /home/admin/docker/redis/redis-node-7/data:/data redis --cluster-enabled yes --appendonly yes --port 6387
docker run -d --name redis-node-8 --net host --privileged=true -v /home/admin/docker/redis/redis-node-8/data:/data redis --cluster-enabled yes --appendonly yes --port 6388

image.png

将8367加入到集群

redis-cli --cluster add-node 192.168.247.128:6387 192.168.247.128:6382

image.png

将6388设置为6387的从节点

redis-cli --cluster add-node 192.168.247.128:6388 192.168.247.128:6387 --cluster-slave --cluster-master-id 94dec9709a5d7a5239c4d8d476de50176c82df90 image.png

查看集群信息

redis-cli --cluster check 192.168.247.128:6381 image.png

重新分配卡槽

redis-cli --cluster reshard 192.168.247.128:6381 image.png

查看集群信息

redis-cli --cluster check 192.168.247.128:6381 image.png

重新reshard后,之前在6382下的key为m-k1在6387节点下,且6382对应的从节点6386下无该数据,,6387对应的从节点6388下有该数据。

image.png

同一个key对应的槽位相同,扩容后,key将迁移到相应的节点上

缩容

删除节点6388并查看集群信息

redis-cli --cluster del-node 192.168.247.128:6388 5020ddaf37acdf00adc0188b4f6bb5061a56e3cb image.png

将6387的卡槽信息转给6382

redis-cli --cluster reshard 192.168.247.128:6381 image.png

查看集群信息

redis-cli --cluster check 192.168.247.128:6382 image.png

删除节点6387并查看集群信息

redis-cli --cluster del-node 192.168.247.128:6387 94dec9709a5d7a5239c4d8d476de50176c82df90 image.png

其它

查看集群信息的相关命令 image.png