zoukankan      html  css  js  c++  java
  • 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架构
        • 生产不使用
      • 官方工具安装

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

        • 可视化部署

    集群伸缩

    客户端路由

    集群原理

    开发运维常见问题

  • 相关阅读:
    学习使用linux下tags文件
    uboot常用命令详解
    U-boot中TFTP 解释
    eth0: ERROR while getting interface flags: No such device 没有eth0 有其他的eth
    取消挂载 umount 时出现的 “Device is busy”
    Linux的log日志功能
    oracle的安装
    SOA架构设计分析
    立方体模型
    质量属性的六个常见属性场景(淘宝网)
  • 原文地址:https://www.cnblogs.com/richiewlq/p/12191359.html
Copyright © 2011-2022 走看看