• Redis(八)集群


    前置:
    为什么会选择集群:单个Redis的吞吐能力不能满足项目的需求。

    一.集群原理

    Redis 集群运行原理如下:

    1. 所有的 Redis 节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽,所有的节点直接会互相发消息确保对方是在线的。
    2. 一个节点的``失效确定(fail)是当超过半数的节点连接不到此节点时候才被认定为失效状态。
    3. 客户端与 Redis 节点直连,不需要中间 代理(proxy) 层
    4. 客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可,即连接任意一个节点都能够去操作整个集群
    5. Redis-cluster 把所有的物理节点映射到 [0-16383]哈希槽slot 上,cluster (簇)负责维护 node<->slot<->value。Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个key-value 时,Redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,Redis 会根据节点数量大致均等的将哈希槽映射到不同的节点

    在这里插入图片描述

    二.集群投票流程

    投票过程是集群中所有master参与,如果半数意思master节点与master节点通信超过cluster-node-timeout设置的时间,认为当前master节点挂掉

    三.怎么判定节点是不可用的

    1.如果集群任意master挂掉,且当前master没有slave集群进入fail状态,也可以理解成集群的slot映射【0-16383】不完整进入fail状态。
    2.如果集群超过半数以上master挂掉,无论是否有slave,集群进入fail状态,当集群不可用的时候,所有对集群操作都不可用,收到((error) CLUSTERDOWN The cluster is down)错误

    redis5之前,集群是通过Ruby环境去搭建集群

    redis5之前,集群是通过Ruby环境去搭建的
    Redis集群管理攻击redis-trib.rb依赖ruby环境,首先要安装ruby环境:安装ruby:

    yum install ruby
    yum install rubygems

    这里浅提一下

    集群搭建

    第一步,设计集群

    1.假设我的集群中一共有三个节点,每个节点一个主机一个从机,这样我一共需要 6 个 Redis 实例。
    2.首先创建 redis-cluster 文件夹,在该文件夹下分别创建 7001、7002、7003、7004、7005、7006 文件夹,用来存放我的 Redis 配置文件,如下

    第二步,配置节点

    2.1 配置节点

    在这里插入图片描述

    1.直接:%s/6379/7001/g,把所有的6379端口配置替换成7001的
    2.#bind 127.0.0.1
    4.protected no

    2.2 开启两个注释掉的配置

    daemonize yes
    cluster-enabled yes
    在这里插入图片描述
    配置主机密码:masterauth 123

    在这里插入图片描述

    第三步:开启所有节点

    此时虽然开启了所有节点,但是这个了六个节点相互之间都是独立的,并没有建立成一个集群
    在这里插入图片描述

    第四步:联成一个集群

    在这里插入图片描述

    ./src/redis-cli --cluster create --cluster-replicas 1 1.12.235.192:7001 1.12.235.192:7002 1.12.235.192:7003 1.12.235.192:7004 1.12.235.192:7005 1.12.235.192:7006 -a 123
    就是靠这一行来配置集群的,记得把ip改成你的ip,如果端口号不同也要改
    注意,replicas 后面的 1 表示每个主机都带有 1 个从机,执行过程如下:

    另外,记得输入yes进行集群的配置

    第五步:进入集群

    -c 表示以集群的方式进入
    在这里插入图片描述

    查看集群中7001节点配置:

    cluster info

    在这里插入图片描述
    在这里插入图片描述

    第六步:添加主节点

    在这里插入图片描述

    ./src/redis-cli -a 123 -p 7001 --cluster add-node 127.0.0.1:7007 127.0.0.1:7001

    添加节点成功:
    但是新加进来的master没有哈希槽,我们要去手动的分配哈希槽,注意:新加进来的一定是master
    在这里插入图片描述

    分配哈希槽(重要):

    #分配哈希槽 ,-p 第一个节点16, 127.0.0.1:要分配的槽
    #分多少个? 自己选
    #谁出槽? 选一个主节点出来,数据槽的来源
    #怎么分 填all所有槽均匀给他分
    done : 先填写槽id,可以是一个,可以是若干个,再填写done,若干个就是若干个均匀分配
    src/redis-cli -a 123 -p 7016 --cluster reshard 127.0.0.1:7024

    注意:哈希槽操作不仅仅可以添加,还可以删除,即
    分多少个 ? 要删除的节点有多少个就分多少个
    谁出槽? 要删除的槽
    怎么分? done: 填自己的id,再填写done

    在这里插入图片描述

    后面的地址为任意一个节点地址,在分配的过程中,我们一共要输入如下几个参数:

    第七步:添加从节点

    #7023从7017 17id f9cf6b2d3615f12f3d5e77b3441e31cb14e4598c 24id
    #添加从节点,24从17(主),
    #前面怎么填都行,但是最后的id一定是主节点的id
    src/redis-cli -a 123 -p 7016 --cluster add-node 1.12.235.192:7024 127.0.0.1:7017 --cluster-slave --cluster-master-id f9cf6b2d3615f12f3d5e77b3441e31cb14e4598c

    在这里插入图片描述

    第八步:删除节点

    #删除节点,7016第一个id,最后填入要删除的id即5bc6aef904beee91ffd1ad017ee6168faf8c0ce0 为7024的id
    src/redis-cli -a 123 -p 7016 --cluster del-node 127.0.0.1:7024 5bc6aef904beee91ffd1ad017ee6168faf8c0ce0

    在这里插入图片描述
    查看有无7024节点,明显已经被删除掉了
    在这里插入图片描述

  • 相关阅读:
    Day2讲课习题题解
    FastGPT 手动部署错误:MongooseServerSelectionError: getaddrinfo EAI_AGAIN mongo
    error: size of array ‘__curl_rule_01__‘ is negative
    StatusBar,状态栏设置中文
    Linux Bond 以及Mode 6实验
    Java_接口
    对自己LRU算法代码的优化
    《Unity Shader 入门精要》笔记07
    Maven入门到掌握(一套打通任督二脉)
    【Web项目实战】基于STOMP的聊天室【高仿QQ界面,世界频道,私聊,头像】
  • 原文地址:https://blog.csdn.net/weixin_43189971/article/details/126226532