安装redis
redis集群配置
docker run -d --name redis-node-1 --net host --privileged=true -v /data/redis/share/redis-node-1:/data redis --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 --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 --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 --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 --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 --cluster-enabled yes --appendonly yes --port 6386
docker run -d 后台启动 Docker 容器
--name redis-node-1 给容器命名为redis-node-1(区分集群节点)
--net host 主机网络模式:容器直接使用宿主机的网络栈,端口无需映射(仅 Linux 支持)
--privileged=true 开启特权模式,解决数据卷挂载的权限问题
-v 宿主机目录:容器目录 数据持久化挂载:宿主机/data/redis/share/redis-node-1映射容器/data,Redis 数据落地到宿主机
redis 使用官方 Redis 镜像
--cluster-enabled yes 核心:开启 Redis 集群模式
--appendonly yes 开启 AOF 持久化,防止数据丢失
--port 6381 指定节点端口为 6381
redis-cli --cluster create 172.26.235.122:6381 172.26.235.122:6382 172.26.235.122:6383 172.26.235.122:6384 172.26.235.122:6385 172.26.235.122:6386 --cluster-replicas 1
这条命令的作用是:创建一个 3 主 3 从 的 Redis 集群,6 个节点都在同一台服务器(172.26.235.122),端口分别是 6381~6386,--cluster-replicas 1 表示每个主节点配 1 个从节点
验证集群是否成功
redis-cli --cluster check 172.26.235.122:6381
进入6381作为切入点,查看节点状态
redis cli -p 6381
cluster info
集群里所有节点的核心信息全部打印出来
cluster nodes
主从容错切换迁移案例
数据读写存储
启动6机构成的集群并通过exec进入
docker exec -it d2ba651c9635 /bin/bash
对6381新增两个key
set k1 v1
会根据内部哈希算法,去到不同的凹槽中
防止路由失效加参数-c并新增两个key
redis-cli -p 6381 -c
查看集群信息
redis-cli --cluster check 172.26.235.122:6381
主从容错的切换迁移
1号是主机,4号是从机
先停掉1号,原本1号是主机就会变成从机,4号就会变成主机
扩容
增加两个
docker run -d --name redis-node-7 --net host --privileged=true -v /data/redis/share/redis-node-7:/data redis --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 --cluster-enabled yes --appendonly yes --port 6388
进入6387容器实例内部,将新增的6387节点作为master节点加入原集群
redis-cli --cluster add-node 172.26.235.122:6387 172.26.235.122:6381
检查集群情况第一次
redis-cli --cluster check 172.26.235.122:6381
M: be60f9fe3b9caef9066398092faafac180701e98 172.26.235.122:6387
slots: (0 slots) maste
可以看到这个是新机器
重新分派槽号(从之前各自有点,平均分一点组成新的)
redis-cli --cluster reshard 172.26.235.122:6381
How many slots do you want to move (from 1 to 16384)? 4096(16385/4)
What is the receiving node ID? be60f9fe3b9caef9066398092faafac180701e98
第二次检查
redis-cli --cluster check 172.26.235.122:6381
为主节点6387分配从节点6388
redis-cli --cluster add-node 172.26.235.122:6388 172.26.235.122:6387 --cluster-slave --cluster-master-id be60f9fe3b9caef9066398092faafac180701e98
第三次检查
redis-cli --cluster check 172.26.235.122:6381
缩容
目的把6387和6388下线(先从机再主机)
检查集群情况
redis-cli --cluster check 172.26.235.122:6381
删除6388
redis-cli --cluster del-node 172.26.235.122:6388 f2c562b4e34f0083211fa54b1be08645dcdb66b4
第四次检查
redis-cli --cluster check 172.26.235.122:6381
把6387的槽号清空,重新分配
redis-cli --cluster reshard 172.26.235.122:6381
重新检查集群情况
redis-cli --cluster check 172.26.235.122:6381
删除6387
redis-cli --cluster del-node 172.26.235.122:6387 be60f9fe3b9caef9066398092faafac180701e98