码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • redis之集群


    集群

    • 一、问题
      • 1.1 redis 集群为什么槽位选择16384
      • 1.2 redis集群不保证强一致性
    • 二、实例演示
      • 2.1 配置集群
      • 2.2 主机宕机
      • 2.3 扩容
      • 2.4 缩容
    • 三、简介集群
      • 3.1 什么是槽slot
      • 3.2 什么是分片
        • 3.2.1 分片和槽的优势
      • 3.3 槽位映射算法
        • 3.3.1哈希取余分区算法
        • 3.3.2 一致性哈希算法分区
        • 3.3.3 哈希槽分区
      • 3.3 常用命令
        • 3.3.1 是否对外提供命令
        • 3.3.2 槽位是否被占用
        • 3.3.3 当前key分配到哪个槽位
        • 3.3.4 集群结点信息

    一、问题

    1.1 redis 集群为什么槽位选择16384

    在 Redis 集群中,Redis 根据公式 HASH_SLOT=CRC16(key) mod 16384 ,来确定客户端的 key 映射到哪个分片上,然后 Redis 会去相应节点进行操作。然而,CRC16 算法最多可产生 65535 个槽位,但是 Redis 的取模 是16384 ,主要基于如下两个原因:

    ①Redis 节点在发送心跳数据包时需要将所有槽都放入到这个心跳包里,如果采用 16384 个插槽,占用空间为 2KB(16384/8);如果采用 65536 个插槽,占空间 8KB (65536/8)。8KB 的心跳数据有点儿大。
    16384b/8/1024=2KB
    ②Redis Cluster 不太可能扩展到超过 1000 个节点,太多会导致网络拥堵。选择 16384 ,照样可以确保每个主节点都有足够的槽。
    所以,选择 16384 既可以保证集群中每个节点都有足够的槽,又能保证心跳数据包不会过大。

    1.2 redis集群不保证强一致性

    当一个主机宕机,并且其从机还没有上位时,可能会出现写丢失。

    二、实例演示

    2.1 配置集群

    首先给每个服务器添加上开启集群的配置,接着开启redis主机实例,
    在这里插入图片描述
    之后为机器构建集群关系
    在这里插入图片描述
    自动分配主从节点。

    在这里插入图片描述
    添加key时,防止路由失效,比如当前节点只能写0-4096,但是你的key映射到了4097,则会报错,所以我们要添加一个参数 -c 保证连接,即使当前槽位不在该主机,也不会报错,会重定位到另一个主机。
    在这里插入图片描述

    在这里插入图片描述

    2.2 主机宕机

    当一个主机宕机之后,其从机会上位,如果宕机的主机又启动了,那么它会自动变为从机。如果想要恢复和原来关系一样,可以采用
    在这里插入图片描述

    2.3 扩容

    在这里插入图片描述

    扩容 首先将扩容的机器添加上集群开启配置,之后将机器添加到原始集群上,
    redis-cli --cluster add-node : :

    分配槽位
    redis-cli --cluster reshard :
    给新的主节点 添加从节点(同时把该节点加入汲集群)
    在这里插入图片描述

    2.4 缩容

    缩容
    删除当前主节点对应的从节点
    将要删除的主节点的槽位清空,进行重新分配
    删除主节点

    三、简介集群

    主从复制时,当主节点宕机了,从节点并不能自动升级为主节点,所以出现了哨兵,哨兵可以帮助我们选择一个从节点上位,但是哨兵有一个缺点就是它只有一个主结点,扩容缩容不方便,主节点压力大,集群可以让我们有多个主节点和从节点。

    3.1 什么是槽slot

    redis集群槽有16384个哈希槽,每个key通过CRC16校验后来决定放入哪个槽,集群的每个结点负责一部分哈希槽。
    也就是在数据放入到结点之前加了一步槽的概念,先确定槽,把数据放到对应槽上,在确定放到哪个节点上。当我们后续槽进行重新分配时,上边的数据也会跟着移动。
    在这里插入图片描述

    3.2 什么是分片

    分片其实就是看有几个主节点,一整个集群可以进行分片,每个分片确定一部分哈希槽。
    在这里插入图片描述

    3.2.1 分片和槽的优势

    可以很容易的进行添加或者删除节点,添加或者删除节点,移动槽位分配信息时,并不会停止服务,捕获造成集群成不可用的状态。就是即使删除了一个节点,我们可以把它的槽位分配出去,该集群仍是可用的。

    3.3 槽位映射算法

    我们的槽位信息到底对应到哪个机器上?

    3.3.1哈希取余分区算法

    hash(key)/节点数。
    该算法简单,但是它的缺点很大,就是比如扩容或者缩容时,我们的节点就会有变化,会造成我们的槽位分配信息大片混乱。

    3.3.2 一致性哈希算法分区

    ①一致性哈希环
    在这里插入图片描述
    ②每个节点通过映射 映射到哈希环上
    在这里插入图片描述
    ③key落到服务器的落键规则
    在这里插入图片描述
    优点: 容错性和扩容性,就是即使节点变化,扩容或者缩容时,并不会全部槽位映射混乱,只会影响一部分数据。
    在这里插入图片描述
    缺点: 数据倾斜问题
    可能会导致一个主机分配的槽位太多,但是其他主机太少。不能自动分配。
    在这里插入图片描述

    3.3.3 哈希槽分区

    在这里插入图片描述

    在这里插入图片描述

    3.3 常用命令

    3.3.1 是否对外提供命令

    如果一个主节点挂了,不能对外提供服务,如果是yes,则不能对外提供服务,如果是no,则可以对外提供服务。

    cluster-require-full-coverage

    3.3.2 槽位是否被占用

    0代表没有被占用,1代表已经被占用
    CLUSTER COUNTKEYSINSLOT 槽位编号

    3.3.3 当前key分配到哪个槽位

    CLUSTER KEYSOLT KEY

    3.3.4 集群结点信息

    CLUSTER NODES
    在这里插入图片描述

  • 相关阅读:
    Unity嵌入Android项目开发
    Vue2 使用 Canvas 合成图片、多个视频、音频在一个画面中并播放,自定义 video control 控制条
    【问题思考总结】为什么非齐次方程的解是齐次通解加上一个非齐次特解?
    图像处理:推导三种边缘检测算法(Sobel,FFT,FHT)
    解析nc格式文件,GRB格式文件的依赖包edu.ucar.netcdfAll的api 学习
    【Express】文件上传管理 multer 中间件
    C++ Builder 6.0 消息重载的处理
    Redis - Python 客户端基本使用指南
    [附源码]计算机毕业设计基于Springboot作业查重系统
    操作指南|JumpServer用户权限体系的使用实践
  • 原文地址:https://blog.csdn.net/qq_45906101/article/details/139818575
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号