9.Redis Cluster初识

<!doctype html>9.Redis Cluster

Redis Cluster 集群方案

呼唤集群

  • 并发量 10万/每秒 100万/每秒

  • 数据量 16~256G 业务需要500G呢

  • 网络流量 千兆网卡
    ###解决方法 配置“强悍”的机器,超大内存,硬盘
    ###正确做法

  • 分布式:简单的认为家机器 节省成本

  • 集群:规模化需求

    • 并发量:OPS
    • 数据量:大数据
  • redis in release 3.0

数据分布

  • 全量数据

    • 分区规则

      • 子集1
      • 子集2
      • 子集3
  • 顺序分区

    • 1~100

      • 1~33
      • 34~66
      • 67~100
  • 哈希分区 节点取模

    • 1~100 hash(key)%3

数据分布对比

分布式特点典型产品
哈希分布 数据分散度高
键值分布业务无关
无法顺序访问
不支持批量操作
一致性哈希
Redis Cluster
其他缓存产品
顺序分布 数据分散度易倾斜
键值业务相关
可顺序访问
支持批量操作
BigTable
HBase

###哈希分布

  • 节点取余分区

    • hash(key)%nodes 80%迁移
    • 翻倍扩容 50%迁移
    • 客户端分片 哈希+取余
    • 节点伸缩 数据节点关系变化,导致数据迁移
    • 迁移数量和添加节点数量有关 建议翻倍扩容
  • 一致性哈希分区 memcache

    • tocken=0~2^32

    • 添加一个节点 节点比较多的时候使用

      • 不会影响所有节点 只会影响该节点两边的节点迁移
    • 客户端分片:哈希+顺时针(优化取余)

    • 节点伸缩:只影响临近节点,但是还是有数据迁移

    • 翻倍伸缩:保证最小迁移数据和负载均衡

  • 虚拟槽分区

    • 预设虚拟槽:每个槽映射一个数据子集,一般比节点数大
    • 良好的哈希函数:例如CRC16
    • 服务端管理节点、槽、数据:例如redis Cluster

搭建集群

单机架构

分布式架构

  • 每个节点都有读写 16384 平均

redis Cluster架构

  • 节点 一堆节点

    • cluster-enabled:yes
  • meet 节点间通信

    • ping PONG
    • 所有节点共享信息
  • 指派槽 16384个slot

    • server 计算访问key的hash值 分配到节点

      • 0~5460
      • 5461 ~ 10922
      • 10923~16383
    • client

      • keyhash=hash(key)
      • solt = keyhash%16383
    • redis cluster特性

      • 复制
      • 高可用
      • 分片
  • 安装配置

    • 原生命令安装

      • 原生命令安装-理解架构

        1. 配置开启节点

          • 配置 prot ${prot}
            daemonize yes
            dir "/opt/soft/redis/data"
            dbfilename "dump-${port}.rdb"
            logfile "${port}.log"
            cluster-enabled yes
            cluster-config-file nodes-${prot}.conf

          • 开启节点

            • redis-server redis-7000.conf
          • cluster主要配置 cluster-enabled yes
            cluster-node-timeout 15000 #15s 主观下线时间
            cluster-config-file "nodes.conf"
            cluster-require-full-coverage no # 一个节点出现问题,集群将不可用

        2. meet

          • cluster meet ip port
          • redis-cli -h 127.0.0.1 -p 7000 cluster meet 127.0.0.1 7001
        3. 指派槽

          • cluster addsolts slot [slot ...]
          • redis-cli -h 127.0.0.1 -p 7000 cluster addslots {0...5461}
        4. 设置主从 故障自动转移

          • cluster replicate node-id
          • redis-cli -h 127.0.0.1 -p 7003 cluster replicate ${node-id-7000}
          • redis-cli -h 127.0.0.1 -p 7004 cluster replicate ${node-id-7001}
    • 官方工具安装

      • ruby环境准备

        • 下载 编译 安装ruby

        • 安装rubygem redis

          • wget ...redis-3.3.0.gem
          • sudo gem installl -l redis-3.3.0.gem
          • sudo gem list -- check redis gem
        • 安装redis-trib.rb

          • cp ${REDIS_HOME}/src/redis-trib.rb /usr/local/bin
      • 配置开启redis

        • redis-server redis-8000.conf
      • 一键开启

        • ./redis-trib.rb create --relicas 1 127.0.0.1:8000 127.0.0.1:8001 127.0.0.1:8002 127.0.0.1:8003 127.0.0.1:8004 127.0.0.1:8005 # 1代表一个从主机 8000 8001 8002 为三个主节点 后面依次对应的是从节点 自动meet 分配槽 检测槽分配是否合理
        • ps -ef |grep redis-server | grep 700 | awk '{print $2}' |xargs kill
    • 原生命令安装

      • 理解redis cluster架构
      • 生产不使用
    • 官方工具安装

      • 高效、准确
      • 生产环境可以使用
    • 其他

      • 可视化部署

集群伸缩

客户端路由

集群原理

开发运维常见问题

原文地址:https://www.cnblogs.com/richiewlq/p/12191359.html