> 文章列表 > 6.redis-集群

6.redis-集群

6.redis-集群

01-集群cluster

  • 存在的问题

    • redis提供的服务OPS(operation per second)可以达到10万/秒,当前业务OPS如果超过10万/秒,怎么办?
  • redis集群

    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gITgqXr9-1681709270830)(null)]

    • 使用网络将若干redis主从机器机联通起来,并提供统一的管理方式,使其对外呈现单机的服务效果

  • 好处

    • 分散单台服务器的访问压力,实现负载均衡
    • 分散单台服务器的存储压力,实现可扩展性
    • 降低单台服务器宕机带来的业务灾难

02-cluster集群搭建

  • 需求

    • 搭建三个 1主1从 结构,并启动cluster集群
  • 配置说明

    # 是否启用cluster,加入cluster节点
    cluster-enabled yes|no# cluster配置文件名,该文件属于自动生成,仅用于快速查找文件并查询文件内容
    cluster-config-file filename# 节点服务响应超时时间,用于判定该节点是否下线或切换为从节点
    cluster-node-timeout milliseconds
    
  • 语法

    #主机ip1:主机port1
    #从机ip1:从机port1
    #n: 1台主机对应n台从机redis-cli --cluster create 主机ip1:主机port1 [主机ip2:主机port2 ...] 从机ip1:从机port1 [从机ip2:从机port2 ...] --cluster-replicas n
    
  • 开发步骤

    • ①配置主从结构
    • ②启动主从服务
    • ③启用集群服务
    • ④查看集群信息
  • ①配置主从结构

    #主机配置
    port 6379
    daemonize no
    # logfile "log-6379.log"
    maxclients 100000
    timeout 0
    loglevel debug# RDB设置
    # 1.设置rdb文件名
    dbfilename "dump-6379.rdb"# 2.设置rdb文件存储路径
    dir "/usr/local/redis-6379/data"# 3.设置存储rdb时是否压缩数据
    rdbcompression no# 4.设置读写文件过程是否进行RDB格式校验
    rdbchecksum no# 5.后台存储过程中如果出现错误现象,是否停止保存操作
    stop-writes-on-bgsave-error yes# 6.每隔10秒检测一次,有2个数据变化就执行bgsave指令
    save 10 2# AOF设置
    # 1.开启aof持久化功能
    appendonly yes
    # 2.设置aof文件名
    appendfilename "appendonly-6379.aof"
    # 4.设置aof策略
    appendfsync everysec# 5.当前aof文件大小达到64mb,自动触发AOF重写
    auto-aof-rewrite-min-size 64mb
    # 5.当前aof文件大小比之前aof文件大小增加了100%,自动触发AOF重写
    auto-aof-rewrite-percentage 100protected-mode no# 是否启用cluster,加入cluster节点
    cluster-enabled yes# cluster配置文件名,该文件属于自动生成,仅用于快速查找文件并查询文件内容
    cluster-config-file "cluster-6379.conf"# 节点服务响应超时时间,用于判定该节点是否下线或切换为从节点
    cluster-node-timeout 5000
    
    #从机配置
    # slave-26379port 26379
    daemonize no
    dir "/usr/local/redis-26379/data"# 设置RDB文件
    dbfilename "dump-26379.rdb"# 开启aof
    appendonly yes
    appendfilename "appendonly-26379.aof"
    appendfsync everysec# 设置无密码访问
    protected-mode no# 开启集群
    cluster-enabled yes
    # cluster配置文件名
    cluster-config-file "cluster-26379.conf"
    # 节点服务响应超时时间为5秒
    cluster-node-timeout 5000
    
  • ②启动主从服务

    # 集群至少3个主节点,至少6个节点redis-server /usr/local/redis-6379/redis-6379.conf
    redis-server /usr/local/redis-6380/redis-6380.conf
    redis-server /usr/local/redis-6381/redis-6381.confredis-server /usr/local/redis-26379/redis-26379.conf
    redis-server /usr/local/redis-26380/redis-26380.conf
    redis-server /usr/local/redis-26381/redis-26381.conf
    
  • ③启用集群服务

    redis-cli --cluster create 192.168.199.110:6379 192.168.199.110:6380 192.168.199.110:6381 192.168.199.110:26379 192.168.199.110:26380  192.168.199.110:26381 --cluster-replicas 1
    
    • 6.redis-集群
  • ④查看集群信息

    cluster nodes
    
    • 6.redis-集群
  • 注意事项

    • 在cluster集群中, 确认主从关系不需要配置slaveof ip port
    • redis集群有16384个槽, 默认是等分.

03-cluster集群演示

  • 需求

    • ①使用集群模式操作redis

      redis-cli -c -p 端口
      
    • ②关闭redis-6379, 查看主从切换情况

  • ①使用集群操作redis

    • 6.redis-集群
  • ②关闭redis-6379, 查看主从切换情况

    • 注意: cluster集群内置哨兵模式.

04-cluster集群节点操作之添加master

  • 语法

    #new-master-host:new-master-port: 新主机的ip和port
    #cluster-host:cluster-port: 已经在集群中的设备的ip和port
    redis-cli --cluster add-node new-master-host:new-master-port cluster-host:cluster-port
    
  • 需求

    • 新建6382的节点, 并将其添加到redis集群中
  • 开发步骤

    • ①新建6382节点并启动
    • ②将其添加到redis集群中
  • ①新建6382节点并启动

    • 6.redis-集群
  • ②将其添加到redis集群中

    redis-cli --cluster add-node 192.168.199.110:6382 192.168.199.110:6379
    
    • 6.redis-集群

05-cluster集群节点操作之添加slave

  • 语法

    #new-slave-host:new-slave-port: 新从机的ip和port
    #master-host:master-port: 主机的ip和port
    #masterid: 主机的idredis-cli --cluster add-node new-slave-host:new-slave-port master-host:master-port --cluster-slave --cluster master-id masterid
    
  • 需求

    • cluster集群添加slave-26382
  • 开发步骤

    • ①新建26382节点并启动
    • ②将其添加到redis集群中
  • ①新建26382节点并启动

    • 6.redis-集群
  • ②将其添加到redis集群中

    redis-cli --cluster add-node 192.168.199.110:26382 192.168.199.110:6382 --cluster-slave --cluster-master-id 7815c2d8a6255391d3d38a7cdfd689ec5f7ad927
    
  • 6.redis-集群

  • 6.redis-集群

06-cluster集群节点操作之移除节点

  • 语法

    #del-node del-cluster-host:del-cluster-port: 需要删除的节点的ip和port
    #del-cluster-id: 需要删除的节点的id
    redis-cli --cluster del-node del-cluster-host:del-cluster-port del-cluster-id
    
  • 需求

    • cluster集群移除master-6382、slave-26382
  • 代码实现

    redis-cli --cluster del-node 192.168.216.110:6382 c876a9869fdcb8a91decb109d73cf56df6277369
    
    redis-cli --cluster del-node 192.168.216.110:26382 0a84ac5ddb836fe56444f9a85726314d435d226a
    
  • 注意事项

    • 只能删除空节点(①没有slots, ②没有从机)

07-cluster集群分槽

  • 概述

    • redis集群中有16384个槽, 用于存储数据.
  • 语法

    #--cluster reshard target-master-host:target-master-port: 目标主机的ip和port
    #--cluster-from src-master-id1 ... src-master-idn: 源头主机的id
    #--cluster-to target-master-id: 目标主机的id
    #--cluster-slots slots: 槽的数量
    redis-cli 
    --cluster reshard target-master-host:target-master-port 
    --cluster-from src-master-id1 ... src-master-idn 
    --cluster-to target-master-id 
    --cluster-slots slots
    
  • 需求

    • 6379, 6380,6381, 6382四个主机均分16384个slots, 每一个主机分得4096
  • 代码实现

    redis-cli --cluster reshard 192.168.199.110:6382 --cluster-from 4cdc5c3348744f68887c4e12e62965727b9ae373 b4cfa66305c8e8edce500425b667873344aa89a8 b3ca1b27d891d42bf7abda2e66a5f2f441a2f444 --cluster-to 7815c2d8a6255391d3d38a7cdfd689ec5f7ad927 --cluster-slots 4096
    
  • 补充

    • 如果要删除主机, 需要先将槽分配给其他主机, 再删除对应的从机.