redis集群
-
启动容器
docker run -d --name redis-node-1 --net host --privileged=true -v /data/redis/share/redis-node-1:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6381 docker run -d --name redis-node-2 --net host --privileged=true -v /data/redis/share/redis-node-2:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6382 docker run -d --name redis-node-3 --net host --privileged=true -v /data/redis/share/redis-node-3:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6383 docker run -d --name redis-node-4 --net host --privileged=true -v /data/redis/share/redis-node-4:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6384 docker run -d --name redis-node-5 --net host --privileged=true -v /data/redis/share/redis-node-5:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6385 docker run -d --name redis-node-6 --net host --privileged=true -v /data/redis/share/redis-node-6:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6386
-
进入容器
docker exec -it redis-node-1 /bin/bash
-
构建主从关系(–cluster-replicas 1 表示为每个master创建一个slave节点)
redis-cli --cluster create 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 127.0.0.1:6385 127.0.0.1:6386 --cluster-replicas 1
-
防止路由失效加参数-c
redis-cli -p 6381 -c
-
查看集群信息
redis-cli --cluster check 127.0.0.1:6381
redis集群扩容
-
新增6387,6388两个节点,查看是否共8个节点
docker run -d --name redis-node-7 --net host --privileged=true -v /data/redis/share/redis-node-7:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6387 docker run -d --name redis-node-8 --net host --privileged=true -v /data/redis/share/redis-node-8:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6388 docker ps
-
进入6381容器内部
docker exec -it redis-node-7 /bin/bash
-
将新增的6387节点(空槽号)作为master节点加入原集群
6387 就是将要作为master新增节点,6381 就是原来集群节点里面的领路人,相当于6387拜拜6381的码头从而找到组织加入集群
redis-cli --cluster add-node 127.0.0.1:6387 127.0.0.1:6381
-
检查集群情况第1次
redis-cli --cluster check 127.0.0.1:6381
-
重新分派槽号(4096,重新分配成本太高,所以前3家各自匀出来一部分,从6381/6382/6383三个旧节点分别匀出1364个坑位给新节点6387)
redis-cli --cluster reshard 127.0.0.1:6381
-
检查集群情况第2次
redis-cli --cluster check 127.0.0.1:6381
-
为主节点6387分配从节点6388,09e32dd71e09dd57be4fa31409f4432fd708f5c4是6387节点id
redis-cli --cluster add-node 127.0.0.1:6388 127.0.0.1:6387 --cluster-slave --cluster-master-id 09e32dd71e09dd57be4fa31409f4432fd708f5c4
-
检查集群情况第3次
redis-cli --cluster check 127.0.0.1:6381
redis集群缩容
-
检查集群情况第1次,获得6388的节点ID
redis-cli --cluster check 127.0.0.1:6381
-
从集群中将4号从节点6388删除,50b7401aee8bbc9deeea54a8bf29396e2fcb7e6b是6388节点id
redis-cli --cluster del-node 127.0.0.1:6388 50b7401aee8bbc9deeea54a8bf29396e2fcb7e6b
-
检查集群情况第2次,还剩7台机器
redis-cli --cluster check 127.0.0.1:6381
-
将6387的槽号清空,重新分配,操作三次,将4096个槽分给三台机器(可以全部给一台,也可以相对平均的平分)
redis-cli --cluster reshard 127.0.0.1:6381
第一次输入的id为要接收槽位的id,第二次为提供槽位的id
-
检查集群情况第3次,6387中的槽被分到了三台机器
redis-cli --cluster check 127.0.0.1:6381
-
将6387删除,09e32dd71e09dd57be4fa31409f4432fd708f5c4是6387节点id
redis-cli --cluster del-node 127.0.0.1:6387 09e32dd71e09dd57be4fa31409f4432fd708f5c4
-
检查集群情况第4次
redis-cli --cluster check 127.0.0.1:6381