JayGao

JayGao 的个人博客,分享技术,记录生活,感谢您的支持与关注。

  menu
19 文章
0 浏览
0 当前访客
ღゝ◡╹)ノ❤️

使用docker搭建redis-cluster集群 置顶!

先决条件

  1. 了解docker基础知识和网络模式
  2. 熟练使用docker 常用命令
  3. 网络模式使用host主机模式(自定义组网模式待验证)

开始构建

  1. 示例命令

    docker run -itd --name redis-node-x -v /home/redis/share/redis-node-x:/data(持久化目录) -e TZ=Asia/Shanghai --net host(适用主机网络模式) --privileged=true(让容器用户在容器中拥有root权限) redis:7.0.3 --requirepass 123456 --cluster-enabled yes(开启集群) --appendonly yes(开启持久化) --port 6380(修改redis默认端口:默认值:6379)
    
  2. 拉去镜像

    docker pull redis:7.0.3
    
  3. 启动6个redis容器

    docker run -itd --name redis-node-1 -v /home/redis/share/redis-node-1:/data -e TZ=Asia/Shanghai --net host --privileged=true redis:7.0.3 --requirepass 123456 --cluster-enabled yes --appendonly yes --port 6381
    
    docker run -itd --name redis-node-2 -v /home/redis/share/redis-node-2:/data -e TZ=Asia/Shanghai --net host --privileged=true redis:7.0.3 --requirepass 123456 --cluster-enabled yes --appendonly yes --port 6382
    
    docker run -itd --name redis-node-3 -v /home/redis/share/redis-node-3:/data -e TZ=Asia/Shanghai --net host --privileged=true redis:7.0.3 --requirepass 123456 --cluster-enabled yes --appendonly yes --port 6383
    
    docker run -itd --name redis-node-4 -v /home/redis/share/redis-node-4:/data -e TZ=Asia/Shanghai --net host --privileged=true redis:7.0.3 --requirepass 123456 --cluster-enabled yes --appendonly yes --port 6384
    
    docker run -itd --name redis-node-5 -v /home/redis/share/redis-node-5:/data -e TZ=Asia/Shanghai --net host --privileged=true redis:7.0.3 --requirepass 123456 --cluster-enabled yes --appendonly yes --port 6385
    
    docker run -itd --name redis-node-6  -v /home/redis/share/redis-node-6:/data -e TZ=Asia/Shanghai --net host --privileged=true redis:7.0.3 --requirepass 123456 --cluster-enabled yes --appendonly yes --port 6386
    
  4. 创建集群

    redis-cli --cluster create 192.168.0.51:6381 192.168.0.51:6382 192.168.0.51:6383 192.168.0.51:6384 192.168.0.51:6385 192.168.0.51:6386 --cluster-replicas 1 -a 123456
    
  5. 进入其中一个容器

    docker exec -it redis-node-1 /bin/bash
    
  6. 登录redis

    
    redis-cli -p 6381 -a 123456
    
  7. 查看集群信息

    cluster info
    
  8. 查看节点信息

    cluster nodes
    
  9. 根据7和8的结果,分析本次主从关系,结果如下

    M	S
    1	6
    2	4
    3	5
    
  10. 集群后使用

    集群后,要使用集群连接,如果使用单机指定连接,有的key-value值存不进去,因为集群槽值范围不一样,比如出现:cluster_slots_assigned:16384错误信息。
    redis-cli -p 6381 -c(使用集群模式连接) -a 123456
    redis-cli -p 6381 -c -a 123456
    
  11. 集群情况检测

    redis-cli --cluster check 192.168.0.51:6381 -a 123456
    这里可以测试主从切换(他们会互相交换位置,如果需要还原自己的配置架构位置关系,需要按照顺序启停主从)
    
    

集群扩容

  1. 扩容

    扩容(4主4从)
    docker run -itd --name redis-node-7  -v /home/redis/share/redis-node-7:/data -e TZ=Asia/Shanghai --net host --privileged=true redis:7.0.3 --requirepass 123456 --cluster-enabled yes --appendonly yes --port 6387
    
    docker run -itd --name redis-node-8  -v /home/redis/share/redis-node-8:/data -e TZ=Asia/Shanghai --net host --privileged=true redis:7.0.3 --requirepass 123456 --cluster-enabled yes --appendonly yes --port 6388
    
  2. 加盟新节点

    redis-cli --cluster add-node 192.168.0.51:6387  192.168.0.51:6381 -a 123456
    
    192.168.0.51:6387 新加入成员
    192.168.0.51:6381 已有成员的领路人
    
  3. 检查

    redis-cli --cluster check 192.168.0.51:6387  -a 123456
    
  4. 重新分配槽号

    redis-cli --cluster reshard 192.168.0.51:6381 -a 123456
    
    槽大小:4096
    
    节点ID:6e03e01bdb7531428081c673d6b39e31bdab6a96
    
    模式:all
    
    最后一步确认:yes
    
  5. 重新检查,注意观察槽号分配情况

    redis-cli --cluster check 192.168.0.51:6387  -a 123456
    
    发现现象:前3个都会给第四个分一点槽号,均摊现象
    
  6. 给新主节点增加从节点

    redis-cli --cluster add-node 192.168.0.51:6388  192.168.0.51:6387 -a 123456 \
    --cluster-slave --cluster-master-id 主节点ID
    
    redis-cli --cluster add-node 192.168.0.51:6388  192.168.0.51:6387 -a 123456 \
    --cluster-slave --cluster-master-id 6e03e01bdb7531428081c673d6b39e31bdab6a96
    

集群缩容

  1. 缩容

    找到slave节点的ID
    slave id:c63ba08f93646f2318bfe625c66de3332164ee45
    
  2. 删除 slave

    redis-cli --cluster del-node 192.168.0.51:6388 c63ba08f93646f2318bfe625c66de3332164ee45 -a 123456
    
  3. 重新检查集群状态

    redis-cli --cluster check 192.168.0.51:6381  -a 123456
    
  4. 重新分配槽号

    redis-cli --cluster reshard 192.168.0.51:6381 -a 123456
    
  5. 回收方案

    可以把回收的主节点的所有槽号全部分配给一个节点
    可以把回收的主节点的所有槽号平均的分配给目前所有的主节点
    步骤:
    1、接受槽号的数量
    2、接受槽号的节点ID
    3、从哪个节点ID获取槽号
    4、done 生成计划
    5、yes 执行处理计划
    
  6. 重新检查

    redis-cli --cluster check 192.168.0.51:6381 -a 123456
    
  7. 删除释放的节点(扩容的主节点)

    redis-cli --cluster del-node 192.168.0.51:6387 7e576dcb3adbe6afee28a71f6e369ccdcd17fbf1 -a 123456
    

回顾总结

构建不论是不是docker或原生linux,都需要注意网络环境是否通畅、防火墙是否拦截了自定义端口等,注意检查状态时候查看槽号分配,节点主从归属;集群模式下redis只有db0;集群模式下连接redis需要使用集群模式,命令行增加-c参数


标题:使用docker搭建redis-cluster集群
作者:JayGao
地址:https://www.xiaofang520.com/articles/2022/08/02/1659404295686.html
版权:版权JayGao所有,如需转载,请注明出处
捐赠: