精华内容
下载资源
问答
  • redis集群数据迁移

    2018-06-27 10:42:00
    redis集群数据备份迁移方案 n 迁移环境描述及分析 当前我们面临的数据迁移环境是:集群->集群。 源集群: 源集群为6节点,3主3备 主 备 192.168.112.33:8001 192.168....

    redis集群数据备份迁移方案

    迁移环境描述及分析

    当前我们面临的数据迁移环境是:集群->集群。

    源集群:

     

    源集群为6节点,3主3备

    192.168.112.33:8001

    192.168.112.33:8004-8006

    192.168.112.33:8002

    192.168.112.33:8003

    值得注意的是:所有的槽位都分配在192.168.112.33:8001节点上,这样更方便我们迁移。

    目标集群:

     

    也是6节点,3主3备

    192.168.112.33:6001

    192.168.112.34:6002

    192.168.112.33:6005

    192.168.112.33:6000

    192.168.112.33:6004

    192.168.112.34:6003

    选择合适的迁移方法

    1.  使用shell脚本+redis命令

    2.  使用dump.rdb或appendonly.aof文件

    第一种适用于数据量少,只迁移部分数据的情况。第二种适用于我们当下的情况。

    迁移步骤

    前期准备:

    1) 停掉所有节点(先备后主),然后删除所有节点下的appendonly.aof和dump.rdb文件,再动所有主节点,停掉所有节点(有密码的话,最好先不要用密码)

    2) 确定目标库所有节点appendonly为yes,将所有槽位分配到一个主节点

    3) 停掉拥有所有槽位的那个节点,等待appendonly.aof文件

    停业务迁移:

    4) 停业务,此时可以同步对所有应用修改redis配置(钉钉,管理门户,搜索引擎)

    5) 源库手动触发bgrewriteaof            源端(2分钟)

    6) 复制发送备份appendonly.aof            源端,目标端(5分钟)

    7) 启动目标节点                        目标端(5分钟)

    8) reshared槽位,启动备节点,设置密码  目标端(5分钟)

    恢复应用:

    9) 启动所有应用,并验证

    迁移测试实施

    以下是迁移步骤的整个实施过程:

     

    目标端停集群(先备后主):

     

     

     

     

    清除appendonly.aof和dump.rdb

     

     

     

     

    启动所有主节点

     

     

     

     

     

    转移槽位到192.168.112.36:6004节点

    ./redis-trib.rb reshard --from bdd63e1f522d78eb1bb2574b2461a7302e14944a  --to 1d204c88a14a76dc30abb05025135f7e850f2a5d  --slots 5461 --yes 192.168.112.36:6004

    ./redis-trib.rb reshard --from be5b41880afac9c41b09e0d4e3be1ce1eb00959a  --to 1d204c88a14a76dc30abb05025135f7e850f2a5d  --slots 5462 --yes 192.168.112.36:6004

     

    改配置文件,并停掉节点

     

     

    原端集群,停业务备份数据

     

     

    copy文件appendonly.aof到目标库分配了所有槽位的那个节点指定的appendonly.aof路径下,并启动节点。

     

    再重新分配槽位,使槽位平均分配到各主节点。

     

     

     

    然后启动所有的备节点,并设置密码,

    redis-cli -c -h 192.168.112.33 -p 6000 config set masterauth Woread#2018

    redis-cli -c -h 192.168.112.33 -p 6000 config set requirepass Woread#2018

    redis-cli -c -h 192.168.112.33 -p 6000 config rewrite

     

    redis-cli -c -h 192.168.112.33 -p 6001 config set masterauth Woread#2018

    redis-cli -c -h 192.168.112.33 -p 6001 config set requirepass Woread#2018

    redis-cli -c -h 192.168.112.33 -p 6001 config rewrite

     

    redis-cli -c -h 192.168.112.34 -p 6002 config set masterauth Woread#2018

    redis-cli -c -h 192.168.112.34 -p 6002 config set requirepass Woread#2018

    redis-cli -c -h 192.168.112.34 -p 6002 config rewrite

     

    redis-cli -c -h 192.168.112.34 -p 6003 config set masterauth Woread#2018

    redis-cli -c -h 192.168.112.34 -p 6003 config set requirepass Woread#2018

    redis-cli -c -h 192.168.112.34 -p 6003 config rewrite

     

    redis-cli -c -h 192.168.112.36 -p 6004 config set masterauth Woread#2018

    redis-cli -c -h 192.168.112.36 -p 6004 config set requirepass Woread#2018

    redis-cli -c -h 192.168.112.36 -p 6004 config rewrite

     

    redis-cli -c -h 192.168.112.36 -p 6005 config set masterauth Woread#2018

    redis-cli -c -h 192.168.112.36 -p 6005 config set requirepass Woread#2018

    redis-cli -c -h 192.168.112.36 -p 6005 config rewrite

     

    redis集群迁移就到此完成了。

     

    转载于:https://www.cnblogs.com/chengdevil/p/9232754.html

    展开全文
  • 银行方面要求生产环境上所有软件的安装都要用普通用户安装,将会收回之前给的root用户的权限,于是我就开始了重装redis集群. 二、准备工作 配置各个端口配置文件主要配置项,这里用7001端口的配置文件为例子: ...

    一、背景

    银行方面要求生产环境上所有软件的安装都要用普通用户安装,将会收回之前给的root用户的权限,于是我就开始了重装redis集群.

    二、准备工作

    配置各个端口配置文件主要配置项,这里用7001端口的配置文件为例子:

    bind 192.168.33.3    //所在服务器地址

    port 7001                 //实例端口

    pidfile "/home/wxqb/redisdata/redisinstall/data/7001/7001.pid"     //pid文件位置

    logfile "/home/wxqb/redisdata/redisinstall/logs/7001.log"              //生成的日志文件位置

    save 900 1                                                                                    //配置redis持久化的方式,这里我用的是rdb方式的默认参数

    save 300 10

    save 60 10000

    dir "//home/wxqb/redisdata/redisinstall/data/7001/"                      //配置redis实例持久化数据后生成的dump.rdb文件的存放目录

    appendonly no                                                                                //配置是否开启aof持久化,我这里没有开启

    cluster-config-file "/home/wxqb/redisdata/redisinstall/conf/node-9001.conf"    //配置实例端口的端口信息

    masterauth "123456"                                                                                    //最后这两项是配置端口的密码

    requirepass "123456"

    至此,6个端口的配置文件按照上述规则配置完成后放到下面要新建的各个redisinstall下的conf目录下

    三、安装步骤

    1.原集群执行cluster nodes命令,查看各个端口的主从关系和各自占用的槽并记录下来。

    192.168.33.3:7001>cluster nodes

    2.新建要安装的redis存放目录和安装目录install

    --新建redis软件目录以及将要安装的目录--

    redis-3.2.8.tar.gz和解压后的redis-3.2.8的目录:

    /home/wxqb/redisdata/

     预先建好的redis实例的安装目录:

    home/wxqb/redisdata/redisinstall
    

    在此安装目录下,新建3个目录:conf  data  logs。

    mkdir conf data logs

    cd /home/wxqb/redisdata/redisinstall/data/                                  ----在data目录下新建各个端口的目录

    mkdir 7001 7002

    3.开始安装

    解压事先放到/home/wxqb/redisdata/redis-3.2.8.tar.gz 生成redis-3.2.8软件

    到redis-3.2.8的src目录下:cd redis-3.2.8/src

    执行安装命令:

    make && make install PREFIX=/home/redisdata/redisinstall

    4.原集群redis各个端口执行bgsave,持久化内存中的数据到数据文件中.

    5.用正确的shutdown方式来关闭原先的redis集群的各个实例,先从后主。

    6.启动新的redis集群各个端口实例

    在各个服务器下执行启动redis实例的命令:

    cd /home/redisdata/redisinstall/bin

    ./redis-server ../conf/7001.conf

    ./redis-server ../conf/7002.conf

    ./redis-server ../conf/7003.conf

    ./redis-server ../conf/7004.conf

    ./redis-server ../conf/7005.conf

    ./redis-server ../conf/7006.conf

    7.手动连接各个端口组成集群

    连接其中一个端口,和其他端口进行握手

    192.168.33.3:7001>cluster meet 192.168.33.3 7002
    192.168.33.3:7001>cluster meet 192.168.33.4 7003
    192.168.33.3:7001>cluster meet 192.168.33.4 7004
    192.168.33.3:7001>cluster meet 192.168.33.5 7005
    192.168.33.3:7001>cluster meet 192.168.33.5 7006

    8.给各个端口指定主从关系

    192.168.33.3:7001>cluster replicate cfb28ef1deee4e0fa78da86abe5d24566744411e
    OK
    192.168.33.4:7003>cluster replicate 8e41673d59c9568aa9d29fb174ce733345b3e8f1
    OK
    192.168.33.5:7005>cluster replicate 40b8d09d44294d2e23c7c768efc8fcd153446746
    OK

    至此,集群的主从分配完成,master:7002,7004,7006;slave:7001,7003,7005

    9.手动给各个master端口分槽

    给新集群的3个master端口实例指定其占用的槽位.redis集群中的16384个槽位均匀地分配到各个主节点中,因为这次新建的集群要加载老集群中的数据,所以要迁移数据,就要移动老集群中的数据文件到新的集群中去,这里要注意原先每个端口的数据文件所在的端口实例所占用的槽位必须和原先相同,也就是说如果在老集群中7002这个主节点的dump.rdb文件所在的槽是{5462..10922},那么该dump.rdb文件移动过来之后也要占用新集群中的{5462..10922}的槽位。

    cd /home/redisdata/redisinstall/bin

    ./redis-cli -h 192.168.33.3 -p 7002 -a 123456 cluster addslots {0..5461}

    ./redis-cli -h 192.168.33.4 -p 7004 -a 123456 cluster addslots {5462..10922}

    ./redis-cli -h 192.168.33.5 -p 7006 -a 123456 cluster addslots {10923..16383}

    到此普通用户集群搭建完毕

    四、数据迁移

    1.shutdown关闭新集群,先从后主

    2.拷贝原先集群下的dump.rdb文件到新的集群目录下.,这里我只拷贝了原先master端口的数据文件到新集群中的master端口的数据存放的目录下,master启动后自动同步数据到相应的slave中去:

    cp /redisold/data/7002/dump.rdb /home/wxqb/redisdata/redisinstall/data/7002/

    cp /redisold/data/7004/dump.rdb /home/wxqb/redisdata/redisinstall/data/7004/

    cp /redisold/data/7006/dump.rdb /home/wxqb/redisdata/redisinstall/data/7006/

    3.启动各个端口实例,启动时候先主后从。启动后将dump.rdb中的文件加载到内存中,这里如果dump.rdb文件比较大,也就是说原先老集群的数据量比较大,我这里每个端口的dbsize 大约有7千万左右,每个dump.rdb文件大约有4G,每个端口启动大约要花费10-15分钟左右,当然这还不包括master向slave同步数据的时间

    4.启动新集群的各个端口实例,先主后从。(最好事先记录一下主从信息)

    ./redis-server ../conf/7002.conf

    ./redis-server ../conf/7004.conf

    ./redis-server ../conf/7006.conf

    ./redis-server ../conf/7001.conf

    ./redis-server ../conf/7003.conf

    ./redis-server ../conf/7005.conf

    原先的数据量越大这里等待的时间比较长,然后所有端口启动完成后,查看集群状态和各个端口的dbsize是否和原集群一致。

    cd /home/wxqb/redisdata/redis-3.2.8/src

    ./redis-trib.rb check 192.168.33.3:7002                           //检查集群状态

    4.数据迁移完成。

    五、总结

    特别注意在迁移数据也就是dump.rdb文件时,一定要把相依的端口的槽也一并迁移过来。

    此次,启动连接redsi各个实例的时候要进到相应的bin目录下,这里可以在系统里去配置相应的环境变量,在次要用的时候就不必到相应的bin去了,特别方便,直接执行如:

    redis-cli h 192.168.33.3 -p 7002 -a 123456

    redis-trib.rb check 192.168.33.3:7002 

    执行完后,出现3主3从集群搭建完成。

    展开全文
  • ./redis-trib.rb create --replicas 1 192.168.112.33:8001 192.168.112.33:8002 192.168.112.33:8003 192.168.112.33:8004 192.168.112.33:8005 192.168.112.33:8006 原sizeredis@linux-eqnz:~/cluster6> redis...

    ./redis-trib.rb create --replicas 1 192.168.112.33:8001 192.168.112.33:8002 192.168.112.33:8003 192.168.112.33:8004 192.168.112.33:8005 192.168.112.33:8006


    原size
    redis@linux-eqnz:~/cluster6> redis-cli -c -h 192.168.112.33 -p 8001 -a Woread#2018 dbsize
    (integer) 992


    ====1.目标库清理及准备工作 =========

    先删除集群密码,否则redis-trib.rb的某些功能不能用,因为redis-trib.rb暂时还不支持带密码操作,
    后面可以用config set命令来设置密码
    112.33:
    sed -i '/masterauth "Woread#2018"/d' 6000/redis.conf
    sed -i '/requirepass "Woread#2018"/d' 6000/redis.conf
    sed -i '/masterauth "Woread#2018"/d' 6001/redis.conf
    sed -i '/requirepass "Woread#2018"/d' 6001/redis.conf
    112.34:
    sed -i '/masterauth "Woread#2018"/d' 6002/redis.conf
    sed -i '/requirepass "Woread#2018"/d' 6002/redis.conf
    sed -i '/masterauth "Woread#2018"/d' 6003/redis.conf
    sed -i '/requirepass "Woread#2018"/d' 6003/redis.conf
    112.36:
    sed -i '/masterauth "Woread#2018"/d' 6004/redis.conf
    sed -i '/requirepass "Woread#2018"/d' 6004/redis.conf
    sed -i '/masterauth "Woread#2018"/d' 6005/redis.conf
    sed -i '/requirepass "Woread#2018"/d' 6005/redis.conf

    然后启动所有节点
    并迁移其他所有槽位到主节点(一定要根据当前集群的状况,将主节点的槽位都分配到其中一个主节点之上,比较稳妥的方法是:将集群中的所有备节点都删除或停掉,只保留主节点,这样就能避免备节点选为主节点)
    当前的主节点分布情况如下:

    M: bdd63e1f522d78eb1bb2574b2461a7302e14944a 192.168.112.33:6000
    slots:0-5460 (5461 slots) master
    0 additional replica(s)
    M: be5b41880afac9c41b09e0d4e3be1ce1eb00959a 192.168.112.34:6003
    slots:5461-10922 (5462 slots) master
    0 additional replica(s)
    M: 1d204c88a14a76dc30abb05025135f7e850f2a5d 192.168.112.36:6004
    slots:10923-16383 (5461 slots) master
    0 additional replica(s)

    这里我选择将所有槽位都分配给 192.168.112.36:6004 即:1d204c88a14a76dc30abb05025135f7e850f2a5d
    ./redis-trib.rb reshard --from bdd63e1f522d78eb1bb2574b2461a7302e14944a --to 1d204c88a14a76dc30abb05025135f7e850f2a5d --slots 5461 --yes 192.168.112.36:6004
    ./redis-trib.rb reshard --from be5b41880afac9c41b09e0d4e3be1ce1eb00959a --to 1d204c88a14a76dc30abb05025135f7e850f2a5d --slots 5462 --yes 192.168.112.36:6004

    ./redis-trib.rb check 192.168.112.33:6000

    S: bdeb2bfafe92d8bda295a5162f750e4cf9bddc9b 192.168.112.36:6005
    slots: (0 slots) slave
    replicates 1d204c88a14a76dc30abb05025135f7e850f2a5d
    M: bdd63e1f522d78eb1bb2574b2461a7302e14944a 192.168.112.33:6000
    slots: (0 slots) master
    0 additional replica(s)
    S: be5b41880afac9c41b09e0d4e3be1ce1eb00959a 192.168.112.34:6003
    slots: (0 slots) slave
    replicates 1d204c88a14a76dc30abb05025135f7e850f2a5d
    S: 4ca3ced3aa1af88a453fd56493e07d8c0b84659e 192.168.112.34:6002
    slots: (0 slots) slave
    replicates 1d204c88a14a76dc30abb05025135f7e850f2a5d
    M: 9429439339bd2c3262cf48469f6912532faa1e02 192.168.112.33:6001
    slots: (0 slots) master
    0 additional replica(s)
    M: 1d204c88a14a76dc30abb05025135f7e850f2a5d 192.168.112.36:6004
    slots:0-16383 (16384 slots) master
    3 additional replica(s)


    OK,槽位都迁移到了192.168.112.36:6004,这时就可以拷贝原库的 dump.rdb 文件到192.168.112.36:6004下了

    先停集群:
    redis-cli -c -h 192.168.112.33 -p 6000 shutdown
    redis-cli -c -h 192.168.112.33 -p 6001 shutdown
    redis-cli -c -h 192.168.112.34 -p 6002 shutdown
    redis-cli -c -h 192.168.112.34 -p 6003 shutdown
    redis-cli -c -h 192.168.112.36 -p 6004 shutdown
    redis-cli -c -h 192.168.112.36 -p 6005 shutdown

    将原库的dump.rdb复制到 192.168.112.36:6004的节点下:/home/redis/cluster6/dump/6004 (根据实际情况而定)
    注意:还要将redis.conf中的参数:appendonly改为 no
    因为:
    只配置rdb,启动只加载dump文件恢复数据 no
    只配置aof,重启时加载aof文件恢复数据
    2者都配置,启动只加载aof文件恢复数据 yes

    redis@PRD-RDS-112-36:~/cluster6> cat 6004/redis.conf |grep appendonly
    appendonly yes

    改后如下:
    sed -i 's/appendonly yes/appendonly no/g' 6004/redis.conf
    redis@PRD-RDS-112-36:~/cluster6> cat 6004/redis.conf |grep appendonly
    appendonly no

    然后启动所有节点,查看数据大小
    redis@PRD-RDS-112-36:~/cluster6> ./dbsize.sh
    (integer) 0
    (integer) 0
    Could not connect to Redis at 192.168.112.34:6002: Connection refused
    Could not connect to Redis at 192.168.112.34:6003: Connection refused
    (integer) 843
    Could not connect to Redis at 192.168.112.36:6005: Connection refused

    OK,数据已经成功导入,之后我们还是得将appendonly改回 yes,在这之前,要先手动将p.rdb中的数据写入appendonly.aof(bgrewriteaof)

    执行 bgrewriteaof前:appendonly.aof的大小为0
    redis@PRD-RDS-112-36:~/cluster6> ls dump/6004/ -l
    总用量 489864
    -rw-r----- 1 redis redis 0 6月 22 11:18 appendonly.aof
    -rw-r----- 1 redis redis 501122129 6月 22 16:07 dump.rdb

    执行 bgrewriteaof后:appendonly.aof的大小为583M,比dump.rdb文件要大
    redis-cli -c -h 192.168.112.36 -p 6004 bgrewriteaof
    redis@PRD-RDS-112-36:~/cluster6> du -sh dump/6004/*
    583M dump/6004/appendonly.aof
    401M dump/6004/dump.rdb

    然后关闭这个节点,并更改appendonly参数:
    redis-cli -c -h 192.168.112.36 -p 6004 shutdown
    sed -i 's/appendonly no/appendonly yes/g' 6004/redis.conf
    再启动节点,查看数据量

    接下来要逆向操作,恢复原状了:
    ./redis-trib.rb reshard --from 1d204c88a14a76dc30abb05025135f7e850f2a5d --to bdd63e1f522d78eb1bb2574b2461a7302e14944a --slots 5461 --yes 192.168.112.36:6004
    ./redis-trib.rb reshard --from 1d204c88a14a76dc30abb05025135f7e850f2a5d --to 9429439339bd2c3262cf48469f6912532faa1e02 --slots 5462 --yes 192.168.112.36:6004
    由于个别key值太大,导致迁移过程出现了错误
    [ERR] IOERR error or timeout reading to target instance

    [WARNING] Node 192.168.112.36:6004 has slots in migrating state (6524).
    [WARNING] Node 192.168.112.33:6001 has slots in importing state (6524).
    [WARNING] The following slots are open: 6524

    先修复一下集群:
    redis@PRD-RDS-112-36:~/cluster6> ./redis-trib.rb fix 192.168.112.36:6004
    再检查一下集群:
    redis@PRD-RDS-112-36:~/cluster6> ./redis-trib.rb check 192.168.112.36:6004
    /usr/local/lib/ruby/gems/2.4.0/gems/redis-3.2.1/lib/redis/client.rb:443: warning: constant ::Fixnum is deprecated
    >>> Performing Cluster Check (using node 192.168.112.36:6004)
    M: 1d204c88a14a76dc30abb05025135f7e850f2a5d 192.168.112.36:6004
    slots:6525-16383 (9859 slots) master
    0 additional replica(s)
    M: 9429439339bd2c3262cf48469f6912532faa1e02 192.168.112.33:6001
    slots:5461-6524 (1064 slots) master
    0 additional replica(s)
    M: bdd63e1f522d78eb1bb2574b2461a7302e14944a 192.168.112.33:6000
    slots:0-5460 (5461 slots) master
    0 additional replica(s)
    [OK] All nodes agree about slots configuration.
    >>> Check for open slots...
    >>> Check slots coverage...
    [OK] All 16384 slots covered.

    集群正常后,重新reshard,已经迁移了1064到192.168.112.33:6001,只需要再迁移4398个就可以了,如还有类型错误,重复前面的操作(先修复,再计算还要迁移多少,然后再reshard,最后别忘了check):
    ./redis-trib.rb reshard --from 1d204c88a14a76dc30abb05025135f7e850f2a5d --to be5b41880afac9c41b09e0d4e3be1ce1eb00959a --slots 4398 --yes 192.168.112.36:6004

    最后dbsize一下,看看key的总数是否正确:
    redis@PRD-RDS-112-36:~/cluster6> ./dbsize.sh
    (integer) 218
    (integer) 208
    Could not connect to Redis at 192.168.112.34:6002: Connection refused
    Could not connect to Redis at 192.168.112.34:6003: Connection refused
    (integer) 212

    总数:218+208+212=638,一个不差(过了一段时间,可以会少几个,不用担心,这是有些key设置的exprid,过期了)

    redis@PRD-RDS-112-36:~/cluster6> ./redis-trib.rb check 192.168.112.33:6000
    /usr/local/lib/ruby/gems/2.4.0/gems/redis-3.2.1/lib/redis/client.rb:443: warning: constant ::Fixnum is deprecated
    >>> Performing Cluster Check (using node 192.168.112.33:6000)
    M: bdd63e1f522d78eb1bb2574b2461a7302e14944a 192.168.112.33:6000
    slots:0-5460 (5461 slots) master
    0 additional replica(s)
    S: bdeb2bfafe92d8bda295a5162f750e4cf9bddc9b 192.168.112.36:6005
    slots: (0 slots) slave
    replicates 1d204c88a14a76dc30abb05025135f7e850f2a5d
    S: 4ca3ced3aa1af88a453fd56493e07d8c0b84659e 192.168.112.34:6002
    slots: (0 slots) slave
    replicates 1d204c88a14a76dc30abb05025135f7e850f2a5d
    M: 9429439339bd2c3262cf48469f6912532faa1e02 192.168.112.33:6001
    slots:5461-10922 (5462 slots) master
    0 additional replica(s)
    M: 1d204c88a14a76dc30abb05025135f7e850f2a5d 192.168.112.36:6004
    slots:10923-16383 (5461 slots) master
    3 additional replica(s)
    S: be5b41880afac9c41b09e0d4e3be1ce1eb00959a 192.168.112.34:6003
    slots: (0 slots) slave
    replicates 1d204c88a14a76dc30abb05025135f7e850f2a5d
    [OK] All nodes agree about slots configuration.
    >>> Check for open slots...
    >>> Check slots coverage...
    [OK] All 16384 slots covered

    检查后发现,集群是正常了,但是所有备节点都指向了192.168.112.36:6004主节点,需要重新调整一下:
    目标:192.168.112.36:6004 192.168.112.34:6002
    192.168.112.33:6000 192.168.112.36:6005
    192.168.112.33:6001 192.168.112.34:6003
    redis-cli -c -h 192.168.112.36 -p 6005 CLUSTER REPLICATE bdd63e1f522d78eb1bb2574b2461a7302e14944a
    redis-cli -c -h 192.168.112.34 -p 6003 CLUSTER REPLICATE 9429439339bd2c3262cf48469f6912532faa1e02

    再check一下:
    redis@PRD-RDS-112-36:~/cluster6> ./redis-trib.rb check 192.168.112.33:6000
    /usr/local/lib/ruby/gems/2.4.0/gems/redis-3.2.1/lib/redis/client.rb:443: warning: constant ::Fixnum is deprecated
    >>> Performing Cluster Check (using node 192.168.112.33:6000)
    M: bdd63e1f522d78eb1bb2574b2461a7302e14944a 192.168.112.33:6000
    slots:0-5460 (5461 slots) master
    1 additional replica(s)
    S: bdeb2bfafe92d8bda295a5162f750e4cf9bddc9b 192.168.112.36:6005
    slots: (0 slots) slave
    replicates bdd63e1f522d78eb1bb2574b2461a7302e14944a
    S: 4ca3ced3aa1af88a453fd56493e07d8c0b84659e 192.168.112.34:6002
    slots: (0 slots) slave
    replicates 1d204c88a14a76dc30abb05025135f7e850f2a5d
    M: 9429439339bd2c3262cf48469f6912532faa1e02 192.168.112.33:6001
    slots:5461-10922 (5462 slots) master
    1 additional replica(s)
    M: 1d204c88a14a76dc30abb05025135f7e850f2a5d 192.168.112.36:6004
    slots:10923-16383 (5461 slots) master
    1 additional replica(s)
    S: be5b41880afac9c41b09e0d4e3be1ce1eb00959a 192.168.112.34:6003
    slots: (0 slots) slave
    replicates 9429439339bd2c3262cf48469f6912532faa1e02
    [OK] All nodes agree about slots configuration.
    >>> Check for open slots...
    >>> Check slots coverage...
    [OK] All 16384 slots covered.

    OK,正常了,但还有一个问题,就是有两个主节点落在了112.33服务器上。这对于集群的高可用没有影响,但从负载均衡的角度来看,34服务器无,而33承担了两份压力(自己的和34的)。
    当然,处理起来也简单,只需要停掉192.168.112.33:6001节点,等192.168.112.34:6003成为主节点后再启动192.168.112.33:6001节点就OK了。
    以下是操作过程:
    redis-cli -c -h 192.168.112.33 -p 6001 shutdown
    redis@PRD-RDS-112-36:~/cluster6> ./redis-trib.rb check 192.168.112.33:6000
    /usr/local/lib/ruby/gems/2.4.0/gems/redis-3.2.1/lib/redis/client.rb:443: warning: constant ::Fixnum is deprecated
    >>> Performing Cluster Check (using node 192.168.112.33:6000)
    M: bdd63e1f522d78eb1bb2574b2461a7302e14944a 192.168.112.33:6000
    slots:0-5460 (5461 slots) master
    1 additional replica(s)
    S: bdeb2bfafe92d8bda295a5162f750e4cf9bddc9b 192.168.112.36:6005
    slots: (0 slots) slave
    replicates bdd63e1f522d78eb1bb2574b2461a7302e14944a
    S: 4ca3ced3aa1af88a453fd56493e07d8c0b84659e 192.168.112.34:6002
    slots: (0 slots) slave
    replicates 1d204c88a14a76dc30abb05025135f7e850f2a5d
    M: 1d204c88a14a76dc30abb05025135f7e850f2a5d 192.168.112.36:6004
    slots:10923-16383 (5461 slots) master
    1 additional replica(s)
    M: be5b41880afac9c41b09e0d4e3be1ce1eb00959a 192.168.112.34:6003
    slots:5461-10922 (5462 slots) master
    0 additional replica(s)
    [OK] All nodes agree about slots configuration.
    >>> Check for open slots...
    >>> Check slots coverage...
    [OK] All 16384 slots covered.

    redis@linux-eqnz:~/cluster6> cd 6001
    redis@linux-eqnz:~/cluster6/6001> pwd
    /home/redis/cluster6/6001
    redis@linux-eqnz:~/cluster6/6001> redis-server redis.conf

    redis@PRD-RDS-112-36:~/cluster6> ./redis-trib.rb check 192.168.112.33:6000
    /usr/local/lib/ruby/gems/2.4.0/gems/redis-3.2.1/lib/redis/client.rb:443: warning: constant ::Fixnum is deprecated
    >>> Performing Cluster Check (using node 192.168.112.33:6000)
    M: bdd63e1f522d78eb1bb2574b2461a7302e14944a 192.168.112.33:6000
    slots:0-5460 (5461 slots) master
    1 additional replica(s)
    S: bdeb2bfafe92d8bda295a5162f750e4cf9bddc9b 192.168.112.36:6005
    slots: (0 slots) slave
    replicates bdd63e1f522d78eb1bb2574b2461a7302e14944a
    S: 4ca3ced3aa1af88a453fd56493e07d8c0b84659e 192.168.112.34:6002
    slots: (0 slots) slave
    replicates 1d204c88a14a76dc30abb05025135f7e850f2a5d
    S: 9429439339bd2c3262cf48469f6912532faa1e02 192.168.112.33:6001
    slots: (0 slots) slave
    replicates be5b41880afac9c41b09e0d4e3be1ce1eb00959a
    M: 1d204c88a14a76dc30abb05025135f7e850f2a5d 192.168.112.36:6004
    slots:10923-16383 (5461 slots) master
    1 additional replica(s)
    M: be5b41880afac9c41b09e0d4e3be1ce1eb00959a 192.168.112.34:6003
    slots:5461-10922 (5462 slots) master
    1 additional replica(s)
    [OK] All nodes agree about slots configuration.
    >>> Check for open slots...
    >>> Check slots coverage...
    [OK] All 16384 slots covered.

    最后一步设置密码,执行以下命令(每个节点,包括备节点):
    redis-cli -c -h 192.168.112.33 -p 6000 config set masterauth Woread#2018
    redis-cli -c -h 192.168.112.33 -p 6000 config set requirepass Woread#2018
    redis-cli -c -h 192.168.112.33 -p 6000 config rewrite

    redis-cli -c -h 192.168.112.33 -p 6001 config set masterauth Woread#2018
    redis-cli -c -h 192.168.112.33 -p 6001 config set requirepass Woread#2018
    redis-cli -c -h 192.168.112.33 -p 6001 config rewrite

    redis-cli -c -h 192.168.112.34 -p 6002 config set masterauth Woread#2018
    redis-cli -c -h 192.168.112.34 -p 6002 config set requirepass Woread#2018
    redis-cli -c -h 192.168.112.34 -p 6002 config rewrite

    redis-cli -c -h 192.168.112.34 -p 6003 config set masterauth Woread#2018
    redis-cli -c -h 192.168.112.34 -p 6003 config set requirepass Woread#2018
    redis-cli -c -h 192.168.112.34 -p 6003 config rewrite

    redis-cli -c -h 192.168.112.36 -p 6004 config set masterauth Woread#2018
    redis-cli -c -h 192.168.112.36 -p 6004 config set requirepass Woread#2018
    redis-cli -c -h 192.168.112.36 -p 6004 config rewrite

    redis-cli -c -h 192.168.112.36 -p 6005 config set masterauth Woread#2018
    redis-cli -c -h 192.168.112.36 -p 6005 config set requirepass Woread#2018
    redis-cli -c -h 192.168.112.36 -p 6005 config rewrite

    接下来:查看日志有无报错!集群迁移完成(操作熟练后,10分钟内可以完成)。

     

    ---------- 总结一下步骤(使用dump.rdb迁移,并启用appendonly模式):
    前期准备:
    1.停掉所有节点(先备后主),然后删除所有节点下的appendonly.aof和dump.rdb文件,启动所有主节点,停掉所有备节点
    2.将所有槽位分配到一个主节点
    3.目标库修改appendonly为no,有密码就先不用密码
    停业务迁移:
    4.停业务(此时可以同步对所有应用修改redis配置(钉钉,管理门户,搜索引擎))
    5.bgsave --源端(2分钟)
    6.复制发送备份dump.rdb  --源端,目标端(5分钟)
    7.启动目标集群 --目标端(5分钟)
    8.bgrewriteaof --目标端(1分钟)
    9.停节点 --目标端(1分钟)
    10.修改appendonly为yes --目标端(5分钟)
    11.启动集群,检查dbsize --目标端(5分钟)
    12.reshared槽位,启动备节点,设置密码 --目标端(5分钟)
    恢复应用:
    13.启动所有应用,并验证 --应用(10分钟)

    ---------- 总结一下步骤(使用appendonly.aof迁移):
    前期准备:
    1) 停掉所有节点(先备后主),然后删除所有节点下的appendonly.aof和dump.rdb文件,再动所有主节点,停掉所有节点(有密码的话,最好先不要用密码)
    2) 确定目标库所有节点appendonly为yes,将所有槽位分配到一个主节点
    3) 停掉拥有所有槽位的那个节点,等待appendonly.aof文件
    停业务迁移:
    4) 停业务,时可以同步对所有应用修改redis配置(钉钉,管理门户,搜索引擎)
    5) 源库手动触发bgrewriteaof 源端(2分钟)
    6) 复制发送备份appendonly.aof  源端,目标端(5分钟)
    7) 启动目标节点 目标端(5分钟)
    8) reshared槽位,启动备节点,设置密码 目标端(5分钟)
    恢复应用:
    9) 启动所有应用,并验证


    --192.168.112.33 redis用户:
    redis-cli -c -h 192.168.112.33 -p 8001 -a Woread#2018 bgrewriteaof
    scp /home/redis/cluster3/8001/appendonly.aof redis@192.168.112.36:

    --192.168.112.36 redis用户:
    cd cluster6
    cp ~/appendonly.aof dump/6004/
    cd 6004
    redis-server redis.conf

    均衡槽位:
    ./redis-trib.rb reshard --from 1d204c88a14a76dc30abb05025135f7e850f2a5d --to bdd63e1f522d78eb1bb2574b2461a7302e14944a --slots 5461 --yes 192.168.112.36:6004
    ./redis-trib.rb reshard --from 1d204c88a14a76dc30abb05025135f7e850f2a5d --to be5b41880afac9c41b09e0d4e3be1ce1eb00959a --slots 5462 --yes 192.168.112.36:6004

    ./redis-trib.rb reshard --from bdd63e1f522d78eb1bb2574b2461a7302e14944a --to 1d204c88a14a76dc30abb05025135f7e850f2a5d --slots 5461 --yes 192.168.112.36:6004
    ./redis-trib.rb reshard --from be5b41880afac9c41b09e0d4e3be1ce1eb00959a --to 1d204c88a14a76dc30abb05025135f7e850f2a5d --slots 5462 --yes 192.168.112.36:6004

    --如有迁移失败的则:
    ./redis-trib.rb fix 192.168.112.36:6004
    ./redis-trib.rb reshard --from 1d204c88a14a76dc30abb05025135f7e850f2a5d --to be5b41880afac9c41b09e0d4e3be1ce1eb00959a --slots 4398 --yes 192.168.112.36:6004

    ./redis-trib.rb check 192.168.112.36:6004
    redis-cli -c -h 192.168.112.36 -p 6004 shutdown


    redis-cli -c -h 192.168.112.33 -p 6000 bgrewriteaof
    redis-cli -c -h 192.168.112.34 -p 6003 bgrewriteaof
    redis-cli -c -h 192.168.112.36 -p 6004 bgrewriteaof

    6524槽位移动失败

    redis@PRD-RDS-112-36:~/cluster6> ./redis-trib.rb check 192.168.112.36:6004
    /usr/local/lib/ruby/gems/2.4.0/gems/redis-3.2.1/lib/redis/client.rb:443: warning: constant ::Fixnum is deprecated
    >>> Performing Cluster Check (using node 192.168.112.36:6004)
    M: 1d204c88a14a76dc30abb05025135f7e850f2a5d 192.168.112.36:6004
    slots:6524-16383 (9860 slots) master
    0 additional replica(s)
    M: be5b41880afac9c41b09e0d4e3be1ce1eb00959a 192.168.112.34:6003
    slots:5461-6523 (1063 slots) master
    0 additional replica(s)
    M: bdd63e1f522d78eb1bb2574b2461a7302e14944a 192.168.112.33:6000
    slots:0-5460 (5461 slots) master
    0 additional replica(s)
    [OK] All nodes agree about slots configuration.
    >>> Check for open slots...
    [WARNING] Node 192.168.112.36:6004 has slots in migrating state (6524).
    [WARNING] Node 192.168.112.34:6003 has slots in importing state (6524).
    [WARNING] The following slots are open: 6524
    >>> Check slots coverage...
    [OK] All 16384 slots covered.

    我们看一下这个solt 里边都有哪些key:
    redis-cli -c -h 192.168.112.36 -p 6004 CLUSTER GETKEYSINSLOT 6524 100
    只有一个key
    redis@PRD-RDS-112-36:~/cluster6> redis-cli -c -h 192.168.112.36 -p 6004 CLUSTER GETKEYSINSLOT 6524 100
    1) "h:remote:cache"

    看下key的大小:
    redis-cli -c -h 192.168.112.36 -p 6004 debug object h:remote:cache
    Value at:0x7fcb019881a0 refcount:1 encoding:hashtable serializedlength:46808489 lru:3191472 lru_seconds_idle:104
    46808489/1024/1024,44个G左右,怪不得导入失败了,应该是超时了。
    修复一下:
    ./redis-trib.rb fix 192.168.112.36:6004
    修复后,6524槽移动到了192.168.112.34:6003节点
    再看下这个key的大小
    redis@PRD-RDS-112-36:~/cluster6> redis-cli -c -h 192.168.112.34 -p 6003 debug object h:remote:cache
    Value at:0x7f0b374c4d30 refcount:1 encoding:hashtable serializedlength:46808489 lru:3191731 lru_seconds_idle:95
    很好,没有丢失。

     

     

    ------- 小技巧 ----------

    1.集群迁移时,可以先将源端和目标端的所有槽位都分移动到其中一个节点,这样数据的迁移就相当于单实例之间的迁移了,相对就简单的多了。
    2.集群迁移时,应先关掉所有备节点,这样备节点的配置可以改为最终正确的参数值,并且还能避免主节点在修改配置文件并重启主节点的时候发生节点故障转换(备节点成为主节点)


    我们看一下这个solt 里边都有哪些key:
    CLUSTER GETKEYSINSLOT 6524 100
    然后呢,我们看一下每一个key序列化后都占了多大的空间:
    DEBUG OBJECT h:remote:cache

     


    ./redis-trib.rb reshard --from fc952a1b0942ee91fa878578bba8663e2662ee3a --to e7129d8973c1b81a0cf534bbf59fd47df2599d88 --slots 5461 --yes 192.168.112.33:8004

    redis-cli -c -h 192.168.112.33 -p 8004 -a Woread#2018

     

    集群创建前需要修改gem的redis工具下的一个文件,我这里是默认安装,路径如下:/usr/lib/ruby/gems/1.8/gems/redis-3.2.1/lib/redis/client.rb ,修改内容如下:

    linux-eqnz:~ # find / -name client.rb
    /usr/local/redis-cluster/ruby-2.4.0/gems/xmlrpc-0.2.1/lib/xmlrpc/client.rb
    /usr/local/lib/ruby/gems/2.4.0/gems/xmlrpc-0.2.1/lib/xmlrpc/client.rb
    /usr/local/lib/ruby/gems/2.4.0/gems/redis-3.2.1/lib/redis/client.rb
    /usr/lib64/ruby/1.8/xmlrpc/client.rb


    至于已运行的集群,如何添加密码

    对每一个节点用命令设置密码或修改每一个节点的配置文件中密码项后重启,需要验证

     

    注意事项:
    1.如果是使用redis-trib.rb工具构建集群,集群构建完成前不要配置密码,集群构建完毕再通过config set + config rewrite命令逐个机器设置密码
    2.如果对集群设置密码,那么requirepass和masterauth都需要设置,否则发生主从切换时,就会遇到授权问题,可以模拟并观察日志
    3.各个节点的密码都必须一致,否则Redirected就会失败

    config set masterauth Woread#2018
    config set requirepass abc
    config rewrite


    富余的slave会迁移到其他master节点
    所以简而言之你应该了解关于复制迁移的哪些方面?

    集群在迁移的时候会尝试去迁移拥有最多slave数量的master旗下的slave。
    想利用复制迁移特性来增加系统的可用性,你只需要增加一些slave节点给单个master(哪个master节点并不重要)。
    复制迁移是由配置项cluster-migration-barrier控制的

    转载于:https://www.cnblogs.com/chengdevil/p/9232786.html

    展开全文
  • 本次迁移是把一个三主0从的数据迁移至三主三从 伪集群:172-22-14-88,三个节点6379\6380\6381 真集群: 172-22-14-105 两个节点 6379\6380 172-22-14-106 两个节点 6379\6380 172-22-14-107 两个节点 6379\6380 先...

    本次迁移是把一个三主0从的数据迁移至三主三从
    伪集群:172-22-14-88,三个节点6379\6380\6381
    真集群:
    172-22-14-105 两个节点 6379\6380
    172-22-14-106 两个节点 6379\6380
    172-22-14-107 两个节点 6379\6380

    先看下三主0从的结构,都是集群
    主机为172-22-14-88
    [root@host-172-22-14-88 cluster-conf]# /data/soft/redis-3.2.12/bin/redis-cli -p 6379 cluster nodes
    4b53748f587e80f7f9209062eba94a2945b0799d 172.22.14.88:6379 myself,master - 0 0 1 connected 0-5460
    157fe9a2f93fd27ebefc661cbac2e3de5713c16a 172.22.14.88:6380 master - 0 1539226455397 2 connected 5461-10922
    806e842e6adf53ee82e155d0bd9805bdf158b68c 172.22.14.88:6381 master - 0 1539226454394 3 connected 10923-16383

    [root@host-172-22-14-88 cluster-conf]# /data/soft/redis-3.2.12/bin/redis-cli -p 6379 cluster nodes|grep master
    4b53748f587e80f7f9209062eba94a2945b0799d 172.22.14.88:6379 myself,master - 0 0 1 connected 0-5460
    157fe9a2f93fd27ebefc661cbac2e3de5713c16a 172.22.14.88:6380 master - 0 1539226482573 2 connected 5461-10922
    806e842e6adf53ee82e155d0bd9805bdf158b68c 172.22.14.88:6381 master - 0 1539226481570 3 connected 10923-16383

    [root@host-172-22-14-88 cluster-conf]# ls
    6379 6380 6381

    本次迁移尝试直接复制aof和rdb数据文件
    在这里插入图片描述

    再查看真集群的结构
    [root@host-172-22-14-105 ~]# cd /data/soft/redis-3.2.12/cluster-conf/
    [root@host-172-22-14-105 cluster-conf]# ls
    6379 6380
    [root@host-172-22-14-105 cluster-conf]# /data/soft/redis-3.2.12/bin/redis-cli -c -h 172.22.14.105 -p 6379
    172.22.14.105:6379> keys *
    (empty list or set) 发现真集群中没数据
    172.22.14.105:6379> exit
    [root@host-172-22-14-105 cluster-conf]#
    [root@host-172-22-14-105 cluster-conf]# /data/soft/redis-3.2.12/bin/redis-cli -p 6379 cluster nodes
    三主三从
    [root@host-172-22-14-105 cluster-conf]# /data/soft/redis-3.2.12/bin/redis-cli -p 6379 cluster nodes|grep master
    在这里插入图片描述
    [root@host-172-22-14-105 cluster-conf]#

    以下是我的尝试,第一种方法失败,大家没有兴趣的话请直接跳到第二种方法

    **

    第一种方法:思路是直接复制aof和rdb文件进行替换

    **

    先关掉该服务器的主节点
    [root@host-172-22-14-105 cluster-conf]# cat 6379/redis_6379.pid | xargs kill
    [root@host-172-22-14-105 cluster-conf]# /data/soft/redis-3.2.12/bin/redis-cli -p 6379 cluster nodes
    Could not connect to Redis at 127.0.0.1:6379: Connection refused
    连不上了,查看主从是否切换
    [root@host-172-22-14-105 cluster-conf]# /data/soft/redis-3.2.12/bin/redis-cli -p 6380 cluster nodes
    在这里插入图片描述

    主从已完成切换,那么把伪集群的6379数据复制过来,不过先备份旧数据
    [root@host-172-22-14-105 cluster-conf]# cd 6379
    [root@host-172-22-14-105 6379]# ls
    appendonly.aof dump.rdb nodes-6379.conf redis.conf redis.log
    [root@host-172-22-14-105 6379]# cp appendonly.aof appendonly.aof.bak
    [root@host-172-22-14-105 6379]# cp dump.rdb dump.rdb.bak
    [root@host-172-22-14-105 6379]# ls
    appendonly.aof appendonly.aof.bak dump.rdb dump.rdb.bak nodes-6379.conf redis.conf redis.log
    [root@host-172-22-14-105 6379]#
    [root@host-172-22-14-105 6379]# ll
    总用量 92
    -rw-r–r-- 1 root root 0 10月 9 18:35 appendonly.aof
    -rw-r–r-- 1 root root 0 10月 11 11:16 appendonly.aof.bak
    -rw-r–r-- 1 root root 77 10月 11 11:10 dump.rdb
    -rw-r–r-- 1 root root 77 10月 11 11:16 dump.rdb.bak
    -rw-r–r-- 1 root root 757 10月 9 18:40 nodes-6379.conf
    -rw-r–r-- 1 root root 46808 10月 9 18:34 redis.conf
    -rw-r–r-- 1 root root 25230 10月 11 11:10 redis.log

    登录172-22-14-88进行复制
    [root@host-172-22-14-88 6379]# ll
    总用量 36160
    -rw-r–r-- 1 root root 35824026 10月 11 11:15 appendonly.aof
    -rw-r–r-- 1 root root 58273 10月 11 11:12 dump.rdb
    -rw-r–r-- 1 root root 349 9月 17 16:55 nodes.conf
    -rw-r–r-- 1 root root 7 9月 21 11:46 redis_6379.pid
    -rw-r–r-- 1 root root 48099 9月 29 15:38 redis.conf
    -rw-r–r-- 1 root root 1074932 10月 11 11:12 redis.log

    [root@host-172-22-14-88 6379]# scp appendonly.aof root@172.22.14.105:/data/soft/redis-3.2.12/cluster-conf/6379/
    The authenticity of host ‘172.22.14.105 (172.22.14.105)’ can’t be established.
    ECDSA key fingerprint is 40:62:8e:d2:4b??a6:dd:43:c9:26:7d:1b:bc:d5:af.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added ‘172.22.14.105’ (ECDSA) to the list of known hosts.
    root@172.22.14.105’s password:
    appendonly.aof 100% 34MB 34.2MB/s 00:00
    [root@host-172-22-14-88 6379]# scp dump.rdb root@172.22.14.105:/data/soft/redis-3.2.12/cluster-conf/6379/
    root@172.22.14.105’s password:
    dump.rdb 100% 57KB 56.9KB/s 00:00

    登录172-22-14-105查看,并开启redis的6379节点
    [root@host-172-22-14-105 6379]# ll
    总用量 35136
    -rw-r–r-- 1 root root 35824026 10月 11 11:19 appendonly.aof
    -rw-r–r-- 1 root root 0 10月 11 11:16 appendonly.aof.bak
    -rw-r–r-- 1 root root 58275 10月 11 11:19 dump.rdb
    -rw-r–r-- 1 root root 77 10月 11 11:16 dump.rdb.bak
    -rw-r–r-- 1 root root 757 10月 9 18:40 nodes-6379.conf
    -rw-r–r-- 1 root root 46808 10月 9 18:34 redis.conf
    -rw-r–r-- 1 root root 25230 10月 11 11:10 redis.log

    开启节点
    [root@host-172-22-14-105 6379]# /data/soft/redis-3.2.12/bin/redis-server /data/soft/redis-3.2.12/cluster-conf/6379/redis.conf &
    [1] 19313
    查看集群状态
    [root@host-172-22-14-105 6379]# /data/soft/redis-3.2.12/bin/redis-cli -p 6379 cluster nodes
    在这里插入图片描述
    查看105服务器的redis状态,可以发现6379为slave,6380为master
    [root@host-172-22-14-105 6379]# /data/soft/redis-3.2.12/bin/redis-cli -p 6379 cluster nodes|grep 105
    在这里插入图片描述
    登录6379节点查看数据,发现还是为空。排查原因发现是被集群自动清空异常数据
    [root@host-172-22-14-105 6379]# /data/soft/redis-3.2.12/bin/redis-cli -c -h 172.22.14.105 -p 6379
    172.22.14.105:6379> keys *
    (empty list or set)

    [root@host-172-22-14-105 6379]# ll
    总用量 100
    -rw-r–r-- 1 root root 0 10月 11 11:21 appendonly.aof
    -rw-r–r-- 1 root root 0 10月 11 11:16 appendonly.aof.bak
    -rw-r–r-- 1 root root 77 10月 11 11:22 dump.rdb
    -rw-r–r-- 1 root root 77 10月 11 11:16 dump.rdb.bak
    -rw-r–r-- 1 root root 819 10月 11 11:21 nodes-6379.conf
    -rw-r–r-- 1 root root 6 10月 11 11:21 redis_6379.pid
    -rw-r–r-- 1 root root 46808 10月 9 18:34 redis.conf
    -rw-r–r-- 1 root root 29738 10月 11 11:22 redis.log

    **

    第二种方法,采用开源工具redis-migrate-tool来进行迁移

    **
    使用 开源工具 redis-migrate-tool来进行迁移,开源项目地址:https://github.com/vipshop/redis-migrate-tool
    先下载redis-migrate-tool
    [root@host-172-22-14-105 ~]# cd /data/soft/
    [root@host-172-22-14-105 ~]# git clone https://github.com/vipshop/redis-migrate-tool.git
    [root@host-172-22-14-105 soft]# cd redis-migrate-tool/
    [root@host-172-22-14-105 redis-migrate-tool]# ls
    ChangeLog configure.ac dep LICENSE m4 Makefile.am nodes README.md rmt.conf src test
    [root@host-172-22-14-105 redis-migrate-tool]# autoreconf -fvi
    在这里插入图片描述

    [root@host-172-22-14-105 redis-migrate-tool]# ./configure
    在这里插入图片描述
    [root@host-172-22-14-105 redis-migrate-tool]# make
    [root@host-172-22-14-105 redis-migrate-tool]# src/redis-migrate-tool -h
    This is redis-migrate-tool-0.1.0
    ok,到这里工具安装好了

    接下去拷贝数据过来
    [root@host-172-22-14-88 cluster-conf]# scp 6379/dump.rdb root@172.22.14.105:/data/soft/20181011data/dump6379.rdb
    [root@host-172-22-14-88 cluster-conf]# scp 6380/dump.rdb root@172.22.14.105:/data/soft/20181011data/dump6380.rdb
    [root@host-172-22-14-88 cluster-conf]# scp 6381/dump.rdb root@172.22.14.105:/data/soft/20181011data/dump6381.rdb

    登录105服务器
    [root@host-172-22-14-105 20181011data]# ls
    dump6379.rdb dump6380.rdb dump6381.rdb

    [root@host-172-22-14-105 redis-migrate-tool]# vim rmt.conf
    在这里插入图片描述
    改为:
    [source]
    type: rdb file
    servers :

    • /data/soft/20181011data/dump6379.rdb
    • /data/soft/20181011data/dump6380.rdb
    • /data/soft/20181011data/dump6381.rdb

    [target]
    type: redis cluster
    servers:
    -127.0.0.1:6379

    [common]
    listen: 0.0.0.0:8888

    执行迁移
    [root@host-172-22-14-105 redis-migrate-tool]# src/redis-migrate-tool -c rmt.conf -o log -d

    状态查看:通过redis-cli连接redis-migrate-tool监控的端口,运行info命令
    [root@host-172-22-14-105 ~]# /data/soft/redis-3.2.12/bin/redis-cli -h 172.22.14.105 -p 8888
    在这里插入图片描述

    然后查看日志查看是否完成导入
    [root@host-172-22-14-105 redis-migrate-tool]# cat log
    [2018-10-11 14:35:33.987] rmt_core.c:525 Nodes count of source group : 3
    [2018-10-11 14:35:33.987] rmt_core.c:526 Total threads count : 4
    [2018-10-11 14:35:33.987] rmt_core.c:527 Read threads count assigned: 1
    [2018-10-11 14:35:33.987] rmt_core.c:528 Write threads count assigned: 3
    [2018-10-11 14:35:33.990] rmt_core.c:2444 Total threads count in fact: 3
    [2018-10-11 14:35:33.990] rmt_core.c:2445 Read threads count in fact: 0
    [2018-10-11 14:35:33.990] rmt_core.c:2446 Write threads count in fact: 3
    [2018-10-11 14:35:33.990] rmt_core.c:2488 write thread(0):
    [2018-10-11 14:35:33.990] rmt_core.c:2494 /data/soft/20181011data/dump6381.rdb
    [2018-10-11 14:35:33.990] rmt_core.c:2488 write thread(1):
    [2018-10-11 14:35:33.990] rmt_core.c:2494 /data/soft/20181011data/dump6380.rdb
    [2018-10-11 14:35:33.990] rmt_core.c:2488 write thread(2):
    [2018-10-11 14:35:33.990] rmt_core.c:2494 /data/soft/20181011data/dump6379.rdb
    [2018-10-11 14:35:33.991] rmt_core.c:2551 migrate job is running…
    [2018-10-11 14:35:33.994] rmt_redis.c:6601 Rdb file for node[/data/soft/20181011data/dump6381.rdb] parsed finished, use: 0 s.
    [2018-10-11 14:35:33.994] rmt_redis.c:6601 Rdb file for node[/data/soft/20181011data/dump6380.rdb] parsed finished, use: 0 s.
    [2018-10-11 14:35:33.998] rmt_redis.c:6601 Rdb file for node[/data/soft/20181011data/dump6379.rdb] parsed finished, use: 0 s.

    通过日志可以发现都finished了,ok,再通过keys * 检查一下
    [root@host-172-22-14-105 ~]# /data/soft/redis-3.2.12/bin/redis-cli -c -h 172.22.14.105 -p 6379
    172.22.14.105:6379> keys *

    正式完成迁移

    展开全文
  • Redis 集群的键空间被分割为 16384 hash个槽(slot), 集群的最大节点数量也是 16384 个 关系:cluster>node>slot>key 分片: Redis Cluster在设计中没有使用一致性哈希(Consistency Hashing),而是使用数据分...
  • redis-migrate 用于不同的redis集群数据迁移
  • 文章目录redis-migrate-tool简介git地址特点redis-migrate-tool安装使用redis-migrate-tool进行迁移rmt_redis.c:6446 ERROR: Can't handle RDB format version 错误解决方案redis-migrate-tool 命令详解rmt.conf详解...
  • [root@server1 redis]# sysctl -w vm.overcommit_memory=1 vm.overcommit_memory = 1 接下来我们设定六个redis服务器: [root@server1 ~]# mkdir /usr/local/rediscluster [root@server1 ~]# cd /usr/local/red.....
  • redis集群同步迁移方法(一):通过redis replication实现 讲到redis的迁移,一般会使用rdb或者aof在主库做自动重载到目标库方法。但该方法有个问题就是无法保证源节点数据和目标节点数据保持一致,...
  • 在生产环境中,我们使用k8s搭建redis集群,nfs存储也在我们的k8s 的work节点上面(无形挖坑),最开始没有什么问题,但是现在遇到一个问题就是我们迫不得已需要把k8s每台机器都重启升级内核,为了解决k8s为linux上的...
  • 在工作中可能会遇到单点Redis向Redis集群迁移数据的问题,但又不能老麻烦运维来做。为了方便研发自己迁移数据,我这里写了一个简单的Redis迁移工具,希望对有需要的人有用。 本工具支持: 单点Redis到单点Redis迁移 ...
  • 目录redis-migrate-tool迁移任务描述迁移过程集群参数修改启动迁移任务监控迁移状态检查数据一致性迁移结果注意 redis-migrate-tool redis-migrate-tool是唯品会开源的redis迁移工具,可以实现热迁移,实现aof/rdb...
  • redis数据迁移

    2018-08-01 12:02:58
    该工具基于redis复制,在迁移过程中,源redis集群仍可对外提供服务;若目标集群是Twemproxy,其会将数据直接导入后端的redis节点;能通过监控端口,查看迁移状态,且迁移完成后,可进行抽样检查。安装redis-migrate-...
  • 来自:掘金(作者:冷冷gg)原文链接:https://juejin.im/post/5dc216dee51d4561f81ad1a7问题由于生产环境的各种原因,我们需要对现有服务器进行迁移,包括线上正在运行的 redis 集群环境 如何去做?涉及到数据源变动...
  • Redis集群同步迁移的方法有很多,比如redis-port,redis-migrate-tool等工具,本文主要讲CentOS通过redis-migrate-tool从集群迁移到单实例。 redis-migrate-tool 是维品会开源的一款redis数据迁移工具,基于redis复制...
  • <div><p>请问下这个工具支持实时迁移redis集群数据到主从版吗,redis版本2.8,谢谢!</p><p>该提问来源于开源项目:CodisLabs/redis-port</p></div>
  • Redis集群迁移工具,基于redis复制,快速,稳定。 特点 快速 多线程 基于redis复制 实时迁移 迁移过程中,源集群不影响对外提供服务 异构迁移 支持Twemproxy集群,redis cluster集群,rdb文件 和 aof...
  • hash tag,业务层对数据标记,需要聚合操作的key,用相同的属性hash,落到相同槽位。 Predixy https://github.com/joyieldInc/predixy/releases/download/1.0.5/predixy-1.0.5-bin-amd64-linux.tar.gz makdir ...
  • org.springframework.data.redis.connection.jedis.JedisConnectionFactory; 10 import org.springframework.data.redis.core.RedisTemplate; 11 import org.springframework.data.redis.serializer....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 456
精华内容 182
关键字:

redis集群数据迁移

redis 订阅