此集群配置可能有问题,使用 redis 客户端连接不上。等待后续补充更新









概念

  1. 获取宿主机 root 用户权限:--privileged=true
  2. 开启 redis 集群:--cluster-enabled yes
  3. 开启持久化:--appendonly yes
  4. IP:47.95.211.172
  5. 为每一个 master 创建一个 slave 节点:--cluster-replicas 1
  6. 哈希槽分区


过程

名称 命令
开启 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
执行成功后会显示 alt
进入 redis 中 redis-cli -p 6379
查看集群状态 cluster info alt
查看集群状态 cluster nodes alt
图中所对应的主从状态 redis-node-6 --> redis-node-1;redis-node-4 --> redis-node-2;redis-node-5 --> redis-node-3


redis 集群读写操作

  1. 加入 -c 参数采用集群策略连接,设置数据会自动切换到相应的写主机
名称 命令
进入 redis 节点 redis-cli -c -p 6379 alt

查看集群信息

  • redis -cli --cluster check 47.95.211.172:6379 alt

问题

  1. 直接使用redis-cli -p 6379 命令,会导致无法直观的查看是否设置成功。因为key通过哈希槽分区分配给不同的 redis 节点,所以还需要手动切换进入不同的 redis 节点。 alt


redis 容错切换迁移

  • 如果不先清空槽位,直接stop容器,会导致部分数据存储不了,虽然容器停止了,但是还在集群内
  • 槽位移动,数据也会随之移动

主从节点的迁移

  1. node1 节点挂掉了 : docker stop 98cd821b56e3
  2. 对应的 slave 节点 node6 会立即补位: cluster nodes alt
  3. 重启 node1 节点:docker start 98cd821b56e3
  4. node1 节点成为 node6 的 slave 节点 alt

新增节点扩容

  • 将节点加入到集群中: 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 节点加入原集群 alt
检查集群情况(未分配槽位) alt
重新分配槽号 altalt
检查集群情况(已分配槽位) 前三个节点每一个都匀了一些槽位给第四个节点alt
为主 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节点) alt

删除节点缩容

  1. 清除节点 node8: redis-cli --cluster del-node 47.95.211.172:6386 3841a213bd18d3a65eda46e100a3936fa409417f
  2. 清出来的槽号重新分配: redis-cli --cluster reshard 47.95.211.172:6380
  3. 再删除节点 node7
  4. 恢复成3主3从

名称 命令
检查集群情况获得 node8 节点的 ID alt
将 node8 节点从集群中删除 alt
清空 node7 节点的槽号,重新分配都给 node2 redis-cli --cluster reshard 47.95.211.172:6380alt
检查集群情况 alt
删除 node7 节点 redis-cli --cluster del-node 47.95.211.172:6385 011abceccf5989d56463b5f9192195cc77a05d55
检查集群情况 alt