docker创建redis集群

创建6台redis

1
2
3
4
5
6
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

选择一个容器进入

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

创建集群

1
2
3
4
5
6
7
8
redis-cli --cluster create \
192.168.10.10:6381 \
192.168.10.10:6382 \
192.168.10.10:6383 \
192.168.10.10:6384 \
192.168.10.10:6385 \
192.168.10.10:6386 \
--cluster-replicas 1

输入 yes

image-20230317115538759

选择进入一个redis

1
redis-cli -p 6381

查看集群信息

1
cluster info

image-20230317115743540

查看集群节点

1
cluster nodes

image-20230317115807093

对应关系每次随机分配

1 — 5

2 — 4

3 — 6

集群操作读写

增加参数 -c,随便访问集群哪个节点

1
redis-cli -p 6381 -c

会自动切换到指定节点

1
set k1 v1

image-20230317142051073

1
get k2

image-20230317142111444

集群扩容

添加主节点

创建 6387

1
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

加入集群,作为master

1
redis-cli --cluster add-node 192.168.10.10:6387 192.168.10.10:6381

查看集群的状态

1
redis-cli --cluster check 192.168.10.10:6381

image-20230317142545802

没有槽好,需要分配

1
redis-cli --cluster reshard 192.168.10.10:6381

image-20230317142742391

填入 16383 / master 台数

第二个 new id 为 6387 的 id

重新检查 集群槽号

1
redis-cli --cluster check 192.168.10.10:6387

image-20230317143214538

结论: 重新分配的方式为,之前的所有节点,每个分配一部分给新的节点

添加从节点

1
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

作为6387的从节点加入集群

1
redis-cli --cluster add-node 192.168.10.10:6388 192.168.10.10:6387 --cluster-slave --cluster-master-id da57cde32e8696825235c6fe8ec80fc8cc3699d8

查看节点

1
cluster nodes

image-20230317143741822

集群缩容

先删除从节点,再删除主节点

先删除 6388 后面为节点的id

1
redis-cli --cluster del-node 192.168.10.10:6388 d520138203258effc8e0a5e92df579bfaa48266a

先重新分配 6387 的槽号

1
redis-cli --cluster reshard 192.168.10.10:6381

image-20230317145344757

检查集群情况

1
redis-cli --cluster check 192.168.10.10:6381

image-20230317145509252

6387 的全给 6381了

1
redis-cli --cluster del-node 192.168.10.10:6387 da57cde32e8696825235c6fe8ec80fc8cc3699d8

image-20230317145556210

1
redis-cli --cluster check 192.168.10.10:6381

image-20230317145625159