美文网首页
Redis 集群的数据分片

Redis 集群的数据分片

作者: 胡乱唱歌ing | 来源:发表于2018-12-04 15:27 被阅读0次

    概述:Redis 集群的数据分片是redis进行分布式存储的一种,它引入了hash槽的概念,每个redis节点存储一定范围的hash槽 ,redis集群有16384个hash槽,每个key通过CRC16校验后对16384取模来决定存储在哪个槽哪个节点
    比如当前有三个节点 那么:
    节点 A 包含 0 到 5500号哈希槽.
    节点 B 包含5501 到 11000 号哈希槽.
    节点 C 包含11001 到 16384号哈希槽.
    1.安装ruby、gem-redis

     sudo yum install ruby -y
    
    

    rubygems下载地址 https://rubygems.org/pages/download

    image.png
    如果安装过程中出现SSLError请看这里 https://bundler.io/v1.16/guides/rubygems_tls_ssl_troubleshooting_guide.html#troubleshooting-certificate-errors

    因为redis分片需要用到redis-trib 需要安装redis gem

    gem install redis
    

    2.创建6个redis实例 3个主节点3个备节点
    redis-start.sh

    #!/bin/bash
    redis-server /usr/local/etc/redis/cluster/6740/6740.conf;
    redis-server /usr/local/etc/redis/cluster/6741/6741.conf;
    redis-server /usr/local/etc/redis/cluster/6742/6742.conf;
    redis-server /usr/local/etc/redis/cluster/6743/6743.conf;
    redis-server /usr/local/etc/redis/cluster/6744/6744.conf;
    redis-server /usr/local/etc/redis/cluster/6745/6745.conf;
    

    3.修改每个redis配置文件的信息,下面以6740.conf ,其他配置文件注意修改相应的端口

    # 端口号
    port 6740
    # 后台启动
    daemonize yes
    # 开启集群
    cluster-enabled yes
    #集群节点配置文件
    cluster-config-file nodes-6740.conf
    # 集群连接超时时间
    cluster-node-timeout 500
    # 进程pid的文件位置
    pidfile /var/run/redis-6740.pid
    # 开启aof
    appendonly yes
    # aof文件路径
    appendfilename "appendonly-6740.aof"
    # rdb文件路径
    dbfilename dump-6740.rdb
    

    4.建立节点联系 需要redis-trib.rb 这个可以在redis源码目录src中找到
    我这里是已经把redis-trib.rb 复制到redis-start.sh同样的目录下

    $ sh  redis-start.sh  #启动redis实例
    $ ps -ef | grep redis #查看是否6个实例启动成功
    $ ./redis-trib.rb create --replicas 1 127.0.0.1:6740 127.0.0.1:6741 127.0.0.1:6742 127.0.0.1:6743 127.0.0.1:6744 127.0.0.1:6745
    #redis-trib.rb  create 创建一个集群
    #--replicas 1 每个主节点创建一个备节点
    

    5.集群中加入新节点

    $  ./redis-trib.rb add-node 127.0.0.1:6746 127.0.0.1:6740
    #127.0.0.1:6746 新增节点的地址
    #127.0.0.1:6740 集群中的一个节点 也可以是127.0.0.1:6740-6745中任意一个
    
    

    6.为新节点分配hash槽

    $ ./redis-trib.rb reshard 127.0.0.1:6740
    

    接着会提示需要迁移多少槽点到新节点,一般是平均分配那么就是16384/4=4096
    所以输入4096
    接着按照提示输入node ID 30858dbf483b61b9838d5c1f853a60beaa4e7ab61b这一串东西
    按照提示继续输入:all # redis-trib 将从各个源节点中各取出一部分哈希槽, 凑够 4096 个, 然后移动到新节点上
    7.为新节点添加一个备节点

    $ ./redis-trib.rb add-node --slave --master-id efc3131fbdc6cf929720eb61b 127.0.0.1:6746 127.0.0.1:6740
    #--master-id 主节点ID
    

    8.移除一个主节点
    先把要移除节点里面的数据重新分配到其他节点上重复步骤6 注意第一个提示输入node ID输入要移除节点ID 第二个输入done

    Source node #1:30858dbf483b61b9838d5c1f853a60beaa4e7ab61b
    Source node #2:done
    

    9.移除备节点

    $ ./redis-trib.rb del-node 127.0.0.1:6740 44321e7d619410dc4e0a8745366610a0d06d19410
    

    参考:https://juejin.im/entry/596343056fb9a06bc340ac15

    更多redis 集群命令参考 https://www.zybuluo.com/phper/note/205009#cluster-nodes

    相关文章

      网友评论

          本文标题:Redis 集群的数据分片

          本文链接:https://www.haomeiwen.com/subject/jypmcqtx.html