美文网首页
Redis集群

Redis集群

作者: EnchantF | 来源:发表于2019-08-12 16:43 被阅读0次

    Redis版本要求:Redis 版本3.0+

    Redis Cluster TCP ports

    Redis集群的每一个节点需要两个端口号,client port和cluster bus port,比如6379,16379
    端口6379:用于redis client连接
    端口16379:用于集群节点间的交流通信

    cluster bus port = client port + 10000,这是固定的

    Redis集群数据分片

    Redis 集群有16384个哈希槽,每一个key通过CRC16算法对16384取模,得到相应的槽位
    假设集群有如下节点:

    • 节点A, 槽位0 ~ 5500
    • 节点B, 槽位5501 ~ 11000
    • 节点C, 槽位11001 ~ 16383

    如果要增加一个节点D,则需要从其他节点A,B,C拿一些槽位给D;反之,如果要删除节点,则需要将自身的槽位转移到其他节点,才能删除该节点

    Redis集群参数配置

    cluster-enabled <yes/no> 是否开启集群模式
    cluster-config-file <filename> 记录集群配置,方便重启
    cluster-node-timeout <milliseconds> 超时时间

    手动创建Redis集群

    Redis集群最小配置文件 redis.conf

    port 7001
    cluster-enabled yes
    cluster-config-file nodes.conf
    cluster-node-timeout 5000
    appendonly yes
    

    最小集群最少需要三个master,建议3master,3slave

    创建步骤如下:

    • 首先执行以下命令
    mkdir cluster-test
    cd cluster-test
    mkdir  7001 7002 7003 7004 7005 7006
    
    • 在每一个目录下创建相应的 redis.conf 文件

    • 复制redis-server文件到 cluster-test 下

    • 启动每一个Redis实例

    cd 7000
    ../redis-server ./redis.conf
    

    创建集群

    • 对于Redis5
      复制redis-cli文件到 cluster-test 下

    执行以下命令

    ./redis-cli --cluster create 127.0.0.1:7001 \
    127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005  127.0.0.1:7006 \
    --cluster-replicas 1
    

    --cluster-replicas 1 表示 每一个master:slave,即一个主节点有一个从节点

    Redis集群创建成功标志

    查询集群所有节点

    ./redis-cli -p 7001 cluster nodes
    
    查询结果

    故障转移测试

    端口7001宕机

    ./redis-cli -p 7001 debug segfault
    // 执行结果
    Error: Server closed the connection
    

    再重启7001端口,可以看到原先的端口7005从节点变成了主节点


    故障转移效果图

    扩展一个主节点master

    创建7007目录
    创建redis.conf文件
    启动redis实例 ../redis-server ./redis.conf

    将7007节点加入集群

    ./redis-cli --cluster add-node 127.0.0.1:7007 127.0.0.1:7002
    
    查询结果

    槽位分配

    ./redis-cli --cluster reshard 127.0.0.1:7005
    
    槽位分配过程 槽位分配结果

    增加一个从节点

    // 127.0.0.1:7006  增加的从节点ip
    redis-cli --cluster add-node 127.0.0.1:7006 \
    127.0.0.1:7000 --cluster-slave \
     --cluster-master-id \
    // 主节点nodeId
    3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e
    

    删除一个节点

    redis-cli --cluster del-node 127.0.0.1:7001  `<del-node-id>`
    

    注意:
    删除一个master时,其槽位必须为0

    相关文章

      网友评论

          本文标题:Redis集群

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