6.redis-集群

news/2024/7/23 10:57:41 标签: redis, 数据库, java

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 100
    
    protected-mode no
    
    # 是否启用cluster,加入cluster节点
    cluster-enabled yes
    
    # cluster配置文件名,该文件属于自动生成,仅用于快速查找文件并查询文件内容
    cluster-config-file "cluster-6379.conf"
    
    # 节点服务响应超时时间,用于判定该节点是否下线或切换为从节点
    cluster-node-timeout 5000
    
    #从机配置
    # slave-26379
    
    port 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.conf
    
    redis-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
    
    • ga3vqwetg3qw4a5rfvwq
  • ④查看集群信息

    cluster nodes
    
    • 3tgy4q2r5w627y35q6
  • 注意事项

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

03-cluster集群演示

  • 需求

    • ①使用集群模式操作redis

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

  • ①使用集群操作redis

    • tgy3qayw5g34aghqa
  • ②关闭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节点并启动

    • tg3qwayg7w4352ay52gwq37
  • ②将其添加到redis集群中

    redis-cli --cluster add-node 192.168.199.110:6382 192.168.199.110:6379
    
    • tgw3q4yg435wg5w24372yq

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

  • 语法

    #new-slave-host:new-slave-port: 新从机的ip和port
    #master-host:master-port: 主机的ip和port
    #masterid: 主机的id
    
    redis-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节点并启动

    • t3qgawfyg3w45q2ar
  • ②将其添加到redis集群中

    redis-cli --cluster add-node 192.168.199.110:26382 192.168.199.110:6382 --cluster-slave --cluster-master-id 7815c2d8a6255391d3d38a7cdfd689ec5f7ad927
    
  • 5r215tqeh5u7hbe

  • tg3qawygh2w435

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
    
  • 补充

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

http://www.niftyadmin.cn/n/233547.html

相关文章

The Sandbox 的 OliveX Fitness 之城来啦!

4 月 11 日至 17 日,亲自来体验一下吧! 这种独特的体验将有趣和故事驱动的游戏与健身以及奖励结合起来。玩家可以探索隐藏的角落,逃出迷宫,爬上梯子,清除障碍,完成相互关联的任务,所以战略规划是…

Linux搭建Web服务器(二)——Web Server 与 HTTP

目录 0x01 Web Server 静态网络服务器(static web server) 动态网络服务器(dynamic web server) 0x02 HTTP协议 HTTP概述 HTTP工作原理 HTTP请求报文格式 HTTP响应报文格式 0x01 Web Server 一个Web Server就是一个服务器…

ESP8266 +I2C SH1106 OLED仿数码管时钟

ESP8266 +I2C SH1106 OLED仿数码管时钟 📌相关篇《ESP8266 +I2C SSD1306 OLED仿数码管时钟》🎞🎬显示效果: 🔖本工程基于Arduino IDE框架下开发。🌿采用esp8266:Nodemcu📑配置参数信息: ✨在上面一篇的基础上做了改版,去除掉了原来在SSD1306那版中获取时间的NTP…

Unity如何上传一个文件到服务器

在游戏开发过程中,有时候需要上传一些文件到远程服务器上,比如游戏资源文件、玩家数据等等。在Unity中,我们可以使用UnityWebRequest类来实现文件上传功能。本文将详细介绍Unity如何上传一个文件到服务器,并给出Unity与服务器的核…

Tomcat源码:Container接口

参考资料: 《Tomcat - Request请求处理: Container设计》 《Tomcat - Container容器之Engine:StandardEngine》 前文: 《Tomcat源码:启动类Bootstrap与Catalina的加载》 《Tomcat源码:容器的生命周期管理与事件监…

k8s设置is-default-sc 存储类基本介绍

k8s官网地址 为什么要改变默认存储类? 取决于安装模式,你的 Kubernetes 集群可能和一个被标记为默认的已有 StorageClass 一起部署。 这个默认的 StorageClass 以后将被用于动态的为没有特定存储类需求的 PersistentVolumeClaims 配置存储。更多细节请查…

ifream等比缩放,并解决错位bug

// 稍微错开空隙,留给滚动条 let scw $(“#divId”).width()/1700 let scs $(“#divId”).width()/1680 let sch $(“#divId”).height()/scs $(“#ifreamId”).css({height: sch ‘px’, width: ‘1680px’, transform: scale(scw)}) // ifream 错位 let deLe…

【面试题】如何解决 Vue首屏加载过慢出现长时间白屏?

需求场景:公司业务展示官网开发,构建版本后在外网测试环境下,发下首屏加载损耗高达几十秒(服务器在国外,所以也导致加载时间变长),于是采用了以下方法来达到提速目的。 大厂面试题分享 面试题库…