–net host 使用宿主机的IP和端口,默认
–privieged=true 获取宿主机root用户权限
–cluster-enabled yes 开启redis集群
–appendonly yes 开启持久化
启动Redis服务命令
docker run -d --name redis-node-1 --net host --privileged=true -v /usr/app/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 /usr/app/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 /usr/app/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 /usr/app/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 /usr/app/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 /usr/app/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
主从构建命令
redis-cli --cluster create 192.168.35.135:6381 192.168.35.135:6382 192.168.35.135:6383 192.168.35.135:6384 192.168.35.135:6385 192.168.35.135:6386 --cluster-replicas 1
终端显示如下主从对应关系
Adding replica 192.168.35.135:6385 to 192.168.35.135:6381
Adding replica 192.168.35.135:6386 to 192.168.35.135:6382
Adding replica 192.168.35.135:6384 to 192.168.35.135:6383
查看集群状态
redis-cli -p 6381
cluster info
cluster nodes
8008600 192.168.35.135:6385@16385 slave f1ceaa4 0 1645712156506 1 connected
0b8ba7e 192.168.35.135:6386@16386 slave a77c123 0 1645712154000 2 connected
5d150dd 192.168.35.135:6383@16383 master - 0 1645712155501 3 connected 10923-16383
a77c123 192.168.35.135:6382@16382 master - 0 1645712155000 2 connected 5461-10922
f1ceaa4 192.168.35.135:6381@16381 myself,master - 0 1645712154000 1 connected 0-5460
c27f12a 192.168.35.135:6384@16384 slave 5d150dd 0 1645712153000 3 connected
master 6381 -> slave 6385
master 6382 -> slave 6386
master 6383 -> slave 6384
连接redis集群
redis-cli -p 6381 -c
如果不添加-c参数,当添加的值不在本redis的槽位时,则报(error) MOVED 12706 192.168.35.135:6383。
主机宕机的主从关系
①主机宕机时,②从机会变成master,此时宕机的①主机恢复了,会变成slave,如果需要把①原来的主机变成master,需要把当前启动的②主机停掉,先启动原本宕机的①主机,再启动原本的②从机。
主从扩容
docker run -d --name redis-node-7 --net host --privileged=true -v /usr/app/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 /usr/app/redis/share/redis-node-8:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6388
新节点加入集群
redis-cli --cluster add-node 192.168.35.135:6387 192.168.35.135:6381
查看节点状态
redis-cli --cluster check 192.168.35.135:6381
重新分配槽位
redis-cli --cluster reshard 192.168.35.135:6382
新的slave挂载到新的master上
redis-cli --cluster add-node 192.168.35.135:6388 192.168.35.135:6387 --cluster-slave --cluster-master-id (新主机节点ID)
主从缩容
redis-cli --cluster del-node 192.168.35.135:6388 slaveID
重新分配槽位
redis-cli --cluster reshard 192.168.35.135:6382