docker redis集群配置

docker安装部署redis

以6台机器构成集群关系为例:

3主3从redis集群配置

创建容器

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

解释:

--name                      容器名
--net host                  使用宿主机的ip和端口
--privileged=true        获取宿主机的root权限
-v /data/server/docker_redis_share/redis-node-1/data:/data      容器卷,宿主机地址:容器地址
redis:6.2.1                 redis镜像和版本号
--cluster-enabled yes     开启集群
--appendonly yes        开启持久化
--port 6386                端口号

构建集群关系

任意选择一个容器执行

[root@base server]# docker exec  -it  redis-node-1 /bin/bash
root@base:/data# redis-cli --cluster create 192.168.0.130:6381 192.168.0.130:6382 192.168.0.130:6383 192.168.0.130:6384 192.168.0.130:6385 192.168.0.130:6386 --cluster-replicas 1

解释: 

192.168.0.130            宿主机ip地址
--cluster-replicas 1     表示为每个master创建一个slave节点

执行结果:

查看集群关系

以6381节点为例查看集群关系

redis-cli  -p 6381

cluster info   查看集群信息

 cluster nodes  查看集群构建状态,此处也能看到主从对应关系 

主从容错切换迁移

数据读写存储

哈希槽下槽位被分成3段,3段代表3个主机,key进入后存在哪以及怎么实现在集群里数据传递后台共享

在使用单机版命令时出现(error) MOVED 12706 192.168.0.130:6383 错误 是因为高出了当前容器的槽位范围

此时需要 防止路由失效加参数-c

 

不同的key 有不同的槽位对应范围,所以会出现重定向到其他redis服务

查看集群信息

redis-cli --cluster check 192.168.0.130:6381

容错切换迁移

当前集群情况

关闭主机6381,进入6382查看集群情况

同样此时仍然可以查到刚刚存入的key

重新启动6381,查看集群情况

 可以看到的是6381新启动后,6384仍是master,要还原成之前的3主3从需要在启动6381之后关闭6384过几分钟再启动6384

主从扩容

高并发情况下3主3从不能满足当前数据需要扩容到4主4从时,6387(master)挂在6388(slave)下,此时哈希槽的槽位如何分配

新建2个节点

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

进入6387容器

docker exec -it redis-node-7 /bin/bash

将新增的6387节点(空槽号)作为master节点加入原集群

redis-cli --cluster add-node 192.168.0.130:6387 192.168.0.130:6381

查看集群情况

redis-cli --cluster check 192.168.0.130:6387

重新分配槽号

命令 redis-cli --cluster reshard IP地址:端口号

 redis-cli --cluster reshard 192.168.0.130:6387

1. 新的节点加入后需要重新洗牌,4个节点AA分配 (16384/4=4096)

2. 要分配给新加入的机器(需要输入的是节点id编号)

再次查看集群情况

为什么6387是3个新的区间,以前的还是连续:重新分配成本太高,所以前3家各自匀出来一部分,从6381/6382/6383三个旧节点分别匀出1364个坑位给新节点6387

为主节点6387分配从节点6388

命令: redis-cli --cluster add-node ip:新slave端口 ip:新master端口 --cluster-slave --cluster-master-id 新主机节点id编号

redis-cli --cluster add-node 192.168.0.130:6388 192.168.0.130:6387 --cluster-slave --cluster-master-id ded65a8e2342b01efc6a8874946fef2412d2f55b

再次查看集群情况

redis-cli --cluster check 192.168.0.130:6381 

最后集群情况

主从缩容

 

目的:6387(master)和6388(slave)下线

检测集群情况,得到从机6388 节点id编号

删除6388从节点

命令: redis-cli --cluster del-node ip:从机端口 从机节点id

redis-cli --cluster del-node 192.168.0.130:6388 f4a2ede9a29eb7816bb065999a31427cae8f327c

命令执行结果 

将6387的槽号清空,重新分配,将清出来的槽号都分配给6381

 redis-cli --cluster reshard 192.168.0.130:6381

检测集群情况

redis-cli --cluster check 192.168.0.130:6381

(此时是将4096个槽位都指给了6381,它变成了8192个槽位,相当于全部给了6381)

删除6387

redis-cli --cluster del-node 192.168.0.130:6387 ded65a8e2342b01efc6a8874946fef2412d2f55b

检测集群情况

redis-cli --cluster check 192.168.0.130:6381


版权声明:本文为weixin_39461487原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
THE END
< <上一篇
下一篇>>