此集群配置可能有问题,使用 redis 客户端连接不上。等待后续补充更新
概念
- 获取宿主机 root 用户权限:--privileged=true
- 开启 redis 集群:--cluster-enabled yes
- 开启持久化:--appendonly yes
- IP:47.95.211.172
- 为每一个 master 创建一个 slave 节点:--cluster-replicas 1
- 哈希槽分区
过程
名称 | 命令 |
---|---|
开启 6 个 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 6379 |
进入 redis 实例 | docker exec -it 98cd821b56e3 bash |
为每一个 redis 实例创建 slave 节点 | redis-cli --cluster create 47.95.211.172:6379 47.95.211.172:6380 47.95.211.172:6381 47.95.211.172:6382 47.95.211.172:6383 47.95.211.172:6384 --cluster-replicas 1 |
执行成功后会显示 | |
进入 redis 中 | redis-cli -p 6379 |
查看集群状态 | cluster info |
查看集群状态 | cluster nodes |
图中所对应的主从状态 | redis-node-6 --> redis-node-1;redis-node-4 --> redis-node-2;redis-node-5 --> redis-node-3 |
redis 集群读写操作
- 加入 -c 参数采用集群策略连接,设置数据会自动切换到相应的写主机
名称 | 命令 |
---|---|
进入 redis 节点 | redis-cli -c -p 6379 |
查看集群信息
- redis -cli --cluster check 47.95.211.172:6379
问题
- 直接使用redis-cli -p 6379 命令,会导致无法直观的查看是否设置成功。因为key通过哈希槽分区分配给不同的 redis 节点,所以还需要手动切换进入不同的 redis 节点。
redis 容错切换迁移
- 如果不先清空槽位,直接stop容器,会导致部分数据存储不了,虽然容器停止了,但是还在集群内
- 槽位移动,数据也会随之移动
主从节点的迁移
- node1 节点挂掉了 : docker stop 98cd821b56e3
- 对应的 slave 节点 node6 会立即补位: cluster nodes
- 重启 node1 节点:docker start 98cd821b56e3
- node1 节点成为 node6 的 slave 节点
新增节点扩容
- 将节点加入到集群中: redis-cli --cluster add-node 47.95.211.172:6385 47.95.211.172:6379
- 重新分配槽号: redis-cli --cluster reshard 47.95.211.172:6379
- 为 master 节点添加 slave 节点:redis-cli --cluster add-node 47.95.211.172:6386 47.95.211.172:6385 --cluster-slave --cluster-master-id 011abceccf5989d56463b5f9192195cc77a05d55
- 可以通过 --cluster check 查看 master id : 011abceccf5989d56463b5f9192195cc77a05d55
名称 | 命令 |
---|---|
新建 node7、node8 两个节点 | 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 6385 |
进入 node7 容器实例内部 | docker exec -it a552268e5d75 bash |
将新增的 node7 节点作为 master 节点加入原集群 | |
检查集群情况(未分配槽位) | |
重新分配槽号 | |
检查集群情况(已分配槽位) | 前三个节点每一个都匀了一些槽位给第四个节点 |
为主 node7 节点分配从节点 node8 (011abceccf5989d56463b5f9192195cc77a05d55可以通过--cluster check 查看 node8 的编号) | redis-cli --cluster add-node 47.95.211.172:6386 47.95.211.172:6385 --cluster-slave --cluster-master-id 011abceccf5989d56463b5f9192195cc77a05d55 |
检查集群情况(已分配slave节点) |
删除节点缩容
- 清除节点 node8: redis-cli --cluster del-node 47.95.211.172:6386 3841a213bd18d3a65eda46e100a3936fa409417f
- 清出来的槽号重新分配: redis-cli --cluster reshard 47.95.211.172:6380
- 再删除节点 node7
- 恢复成3主3从
名称 | 命令 |
---|---|
检查集群情况获得 node8 节点的 ID | |
将 node8 节点从集群中删除 | |
清空 node7 节点的槽号,重新分配都给 node2 | redis-cli --cluster reshard 47.95.211.172:6380 |
检查集群情况 | |
删除 node7 节点 | redis-cli --cluster del-node 47.95.211.172:6385 011abceccf5989d56463b5f9192195cc77a05d55 |
检查集群情况 |