持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第13天,点击查看活动详情
启动六台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 bash
进入容器
构建主从关系
redis-cli --cluster create 192.168.15.100:6381 192.168.15.100:6382 192.168.15.100:6383 192.168.15.100:6384 192.168.15.100:6385 192.168.15.100:6386 --cluster-replicas 1
--cluster-replicas 1 表示集群关联是1:1,一主一丛
哈希槽划分,主从分布
输入yes
进入redis1
redis-cli -p 6381
查看集群信息
cluster info
查看所有节点
cluster nodes
数据存储失败
所需要的哈希槽不在该服务器,应该连接集群存储而不是单个服务器
连接redis改为redis-cli -p 6381 -c
优化路由
重定向去对应哈希槽的服务器
检查集群信息
redis-cli --cluster check 192.168.15.100:6381
主从容错切换迁移
主机宕机后从机会自动变为主机,且主机恢复正常后会变为从机
主从扩容
新增两个节点
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
进入redis-node-7,添加节点到集群
redis-cli --cluster add-node 192.168.15.100:6387 192.168.15.100:6381
重新分配槽号
redis-cli --cluster reshard IP地址:端口号
redis-cli --cluster reshard 192.168.15.100:6381
分配出4096个槽位(16384/4≈4096)给redis-node-7
检查一下已经分配成功 redis-cli --cluster check 192.168.15.100:6381
前三个主机每个匀出4096/3个槽给redis-note-7,并不是从0开始分配,不是连续的,这样所带的数据也跟着到了redis-node-7
设置7-8主从关系
redis-cli --cluster add-node 192.168.15.100:6388 192.168.15.100:6387 --cluster-slave --cluster-master-id 537d5e09b555505ebf34d2f5bef141662ab19330
主从缩容
删除节点6388
redis-cli --cluster del-node 192.168.15.100:6388 5d149074b7e57b802287d1797a874ed7a1a284a8
重新分配哈希槽
redis-cli --cluster reshard 192.168.15.100:6381
将6387的槽分配给6381
删除6387
redis-cli --cluster del-node 192.168.15.100:6387 537d5e09b555505ebf34d2f5bef141662ab19330