day17(redis 扩容)

作者: 五月_w | 来源:发表于2019-07-06 15:47 被阅读0次

    1、redis扩容

    
    1)在db01上创建新节点
    mkdir -p /opt/redis_cluster/redis_{6390,6391}/{conf,logs,pid}
    mkdir -p /data/redis_cluster/redis_{6390,6391}
    cd /opt/redis_cluster/
    cp redis_6380/conf/redis_6380.conf redis_6390/conf/redis_6390.conf
    cp redis_6380/conf/redis_6380.conf redis_6391/conf/redis_6391.conf
    sed -i 's#6380#6390#g' redis_6390/conf/redis_6390.conf
    sed -i 's#6380#6391#g' redis_6391/conf/redis_6391.conf
    
    2)在db01上启动新节点
    bash redis_shell.sh start 6390
    bash redis_shell.sh start 6391
    
    3)使用工具发现节点并重新分配槽位
    cd /opt/redis_cluster/redis/src/
    ./redis-trib.rb add-node 10.0.0.51:6390 10.0.0.51:6380
    ./redis-trib.rb add-node 10.0.0.51:6391 10.0.0.51:6380
    ./redis-trib.rb reshard 10.0.0.51:6380
    
    4)输入需要迁移多少个槽位
    4096
    yes
    ########输入db01的6390的ID#########
    all
    yes
    
    5)重新做主从关系
    先做db03的6381复制db01的6390
    再做db01的6391复制db01的6380
    
    
    

    2、redis收容

    
    收缩节点:
    #进入脚本目录
    cd /opt/redis_cluster/redis/src/
    ./redis-trib.rb reshard 10.0.0.51:6391
    
    #输入要迁移的槽数
    1365
    
    #输入接收的节点的ID
    xxxxx
    
    #输入源节点的ID
    1.xxxxx 
    2.done
    
    #输入确认
    yes
    
    从10.0.0.51:6390收容三次
    

    2.1、删除节点

    
    ./redis-trib.rb del-node  IP:端口  ID
    
    1)从库可以直接删除
    2)主库槽位必须是空的并且没有数据才能删除
    
    

    2.2、删除节点出错问题分析

    
    [root@db01 /opt/redis_cluster/redis/src]# ./redis-trib.rb  del-node 10.0.0.51:6380 01eab3c9f767c88fdbc94f3a7e39ee65ce30baa1
    >>> Removing node 01eab3c9f767c88fdbc94f3a7e39ee65ce30baa1 from cluster 10.0.0.51:6380
    [ERR] Node 10.0.0.51:6380 is not empty! Reshard data away and try again.
    
    
    问题:
    1)主从关系不对
    2)没分配槽位直接做了主从
    3)出现问题可以尝试实用工具的fix功能
    cd /opt/redis_cluster/redis/src/
    ./redis-trib.rb fix 10.0.0.51:6380
    4)快速重新做个4主4从的集群
          1.停掉所有节点
               pkill redis
          2.删除所有节点数据
               rm -rf /data/redis_cluster/redis_6380/*
               rm -rf /data/redis_cluster/redis_6381/*
         3.所有节点重新启动redis
                sh redis_shell.sh start 6380
                sh redis_shell.sh start 6380
         4.利用工具创建集群
                   cd /opt/redis_cluster/redis/src/
                   ./redis-trib.rb create --replicas 1 10.0.0.51:6380 10.0.0.51:6390 10.0.0.52:6380 10.0.0.53:6380 10.0.0.51:6381 10.0.0.51:6391 10.0.0.52:6381 10.0.0.53:6381 
         5.重新分配主从关系
                    redis-cli -h 10.0.0.51 -p 6381 CLUSTER REPLICATE  ID号
                    redis-cli -h 10.0.0.52 -p 6381 CLUSTER REPLICATE  ID号
                    redis-cli -h 10.0.0.53 -p 6381 CLUSTER REPLICATE  ID号
                    redis-cli -h 10.0.0.51 -p 6391 CLUSTER REPLICATE  ID号
    
    
    

    3、数据导入导出工具

    
    1.安装工具
    cd /opt/redis_cluster/
    git clone https://github.com/vipshop/redis-migrate-tool.git
    cd redis-migrate-tool/
    autoreconf -fvi
    ./configure
    make && make install 
    
    
    2.生成配置文件
    cat > redis_6379_to_6380.conf  <<EOF
    [source]
    type: single
    servers:
    - 10.0.0.51:6379
     
    [target]
    type: redis cluster
    servers:
    - 10.0.0.51:6380 
     
    [common]
    listen: 0.0.0.0:8888
    source_safe: true
    EOF
    
    
    3.生成测试数据
    cat input_key.sh 
    #!/bin/bash
    for i in $(seq 1 1000)
    do
        redis-cli -c -h db01 -p 6379 set k_${i} v_${i} && echo "set k_${i} is ok"
    done
    
    
    4.执行导入命令
    redis-migrate-tool -c redis_6379_to_6380.conf 
    
    
    

    4、分析占用空间比较大的键

    
    需求背景
    redis的内存使用太大键值太多,不知道哪些键值占用的容量比较大,而且在线分析会影响性能.
    
    安装工具
    yum install python-pip gcc
    pip install --upgrade pip
    pip install rdbtools
    
    使用方法
    cd /data/redis_cluster/redis_6379/
    rdb -c memory redis_6379.rdb -f 6379_memory.csv
    
    分析rdb
    awk -F ',' '{print $4,$2,$3,$1}' 6379_memory.csv |sort  > 6379.sort
    
    
    

    相关文章

      网友评论

        本文标题:day17(redis 扩容)

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