zoukankan      html  css  js  c++  java
  • Redis 集群

    1. 简介

    Redis cluster 由多个节点组成,节点类型分为主节点和从节点。主节点负责读写请求和集群信息维护,从节点负责复制主节点的数据和状态信息。
    集群将数据分散到多个节点,每一个主节点都可以提供服务
    支持故障自动转移

    2. 集群方案

    根据数据根据路由规则写入节点,并维护数据和节点的关系

    1. 客户端分片(客户端)
    2. proxy(代理)
    3. Redis Cluster(集群)
      目前流行的是Redis Cluster

    3. 搭建集群

    1. 将所有节点以集群模式启动;
    2. 节点握手,将其他节点加入集群(cluster meet ip port);
    3. 分配16384个槽(cluster addsolts {0...5461})
    4. 指定主从关系(cluster replicate node_id)

    4. 数据分区方案

    方案判断依据:

    1. 数据分布是否均匀

    2. 节点变化时对数据分布的影响大小

    3. 哈希分区
      对key进行hash取值,然后根据节点数量取余
      这种方案节点变化时对数据分布影响较大

    4. 一致性哈希分区
      将哈希算法所有值组织为一个虚拟圆环,将节点分布在环上,然后根据key的哈希值,沿圆环顺时针找到的第一个节点就存储到这个服务器
      节点新增时,将这个节点前面的一部分节点数据迁移到这个节点;节点减少时,将该节点的数据迁移到前面的节点;
      节点数量较少时,对数据分布影响较大

    5. 带虚拟节点的哈希分区
      Redis Cluster 采用的这种方案,假定有16384个槽,每个槽包含哈希值在一定范围内的数据;
      在数据节点和数据之间加入一层槽,解耦了数据节点和数据之间的关系
      节点增加时,将其他节点的一部分槽迁移到新节点;
      节点较少时,将该节点的数据均分给其他节点,保证数据槽的均匀分布,不能完全解决数据分布均匀的问题

    4. 节点通信

    端口信息

    普通端口:主要为客户端提供服务,数据迁移也会使用
    集群端口:普通端口+10000,只用于集群节点间的通信

    Gossip协议

    节点随机与部分节点通信(有一定规则),经过这样的通信,每个几点的节点的状态很快达到一致

    消息类型

    meet消息:节点握手阶段,向新加入的节点发送meet命令,新节点收到消息后回复pong消息
    ping消息:每个节点每秒钟选择部分节点发送ping消息,接收后回复pong消息;ping消息采用gossip协议,消息发送规则:1. 随机选择5个接点,与最久未通信的节点通信;2. 与超过cluster_node_timeout/2 的所有节点通信
    pong消息:pong消息包含自身状态数据。1. 在收到meet/ping消息后进行回复 2. 节点向集群广播pong消息,其他节点获取到该节点的最新信息
    fail消息:当一个主节点判断另一个主节点进入fail状态,则向集群广播这一fail消息
    publish消息:节点收到该命令,先执行命令,再向集群广播该消息,其他节点执行该命令

    5. 数据倾斜

    5.1 数据量倾斜

    节点上的数据分布不均匀

    1. slot分布不均匀导致倾斜

    将负载高的节点上的slot迁移到负载较低的节点

    2. bigkey导致倾斜

    避免将过多的数据保存在同一个key中
    若key对应的类型为集合,可以将集合拆分成多个小的集合

    3. hash tag 导致的数据倾斜

    6. 重定向

    moved: 数据不在该节点,重定向到数据所在节点
    ask: 数据迁移时如果数据从该节点已经迁移,则返回ask错误, 不确定何时数据前已完成,此时重定向是临时的

    如果文章对您有所帮助,可以点一下推荐哦
  • 相关阅读:
    关于AJAX与form表单提交数据的格式
    MongoDB
    Redis
    在django中使用django_debug_toolbar进行日志记录
    python第三方库,你要的这里都有
    Django之用户认证auth模块
    Django中常用命令
    form表单钩子,局部钩子和全局钩子
    当我开始爱自己
    FOR YOU
  • 原文地址:https://www.cnblogs.com/virgosnail/p/14810624.html
Copyright © 2011-2022 走看看