k8s中redis cluster集群数据迁移到外部redis cluster集群
背景在生产环境中,我们使用k8s搭建redis集群,nfs存储也在我们的k8s 的work节点上面(无形挖坑),最开始没有什么问题,但是现在遇到一个问题就是我们迫不得已需要把k8s每台机器都重启升级内核,为了解决k8s为linux上的一个Bug。但是生产的数据不能随随便便停机,最好最数据迁移。虽然我们下面的方式能实现迁移,但是会有一些数据的丢失。而这些数据的丢失在公司容忍范围之内。方案探讨方案一,
背景
在生产环境中,我们使用k8s搭建redis集群,nfs存储也在我们的k8s 的work节点上面(无形挖坑),最开始没有什么问题,但是现在遇到一个问题就是我们迫不得已需要把k8s每台机器都重启升级内核,为了解决k8s为linux上的一个Bug。但是生产的数据不能随随便便停机,最好最数据迁移。虽然我们下面的方式能实现迁移,但是会有一些数据的丢失。而这些数据的丢失在公司容忍范围之内。
方案探讨
方案一,使用搜狐的cachecloud,网址如下:
https://github.com/sohutv/cachecloud
但是在研究的过程,发现他好多文档已经打不开了。最直接就是想去看迁移工具这个章节,但是网址已经打不开了
方案二,在研究cachecloud的过程中,发现cachecloud使用的迁移工具是基于唯品会的redis-migrate-tool 网址如下:https://github.com/vipshop/redis-migrate-tool
在研究的过程中,发现这个工具已经很久没有维护。从中发现一个最为致命的一点就是cachecloud 在19年才支持redis版本4的迁移,而我们生产中redis的版本已经是5了。后面也不想再研究下去了。猜测90%的概率是不支持redis版本5的迁移。
方案三,这是我们最终采用的方案,使用阿里开源的RedisShake,网址如下:
https://github.com/alibaba/RedisShake
具体详情开源查看网址下的描述。
因为我们的需求是将k8s集群中的数据迁移出来到新的redis集群上,允许有一小段时间的丢失,实际上,我们肯定会选择尽量不影响生产的时间段进行处理。
具体我们的做法是,把k8s集群中redis的dump.rdb文件拷贝出来,通过RedisShake工具把数据同步到新的redis集群中。
具体操作详情看如下文档:https://github.com/alibaba/RedisShake/wiki/%E7%AC%AC%E4%B8%80%E6%AC%A1%E4%BD%BF%E7%94%A8%EF%BC%8C%E5%A6%82%E4%BD%95%E8%BF%9B%E8%A1%8C%E9%85%8D%E7%BD%AE%EF%BC%9F#32-%E9%9B%86%E7%BE%A4%E7%89%88cluster%E5%88%B0%E9%9B%86%E7%BE%A4%E7%89%88cluster%E9%85%8D%E7%BD%AE%E4%B8%BE%E4%BE%8B
具体步骤如下
前提是部署RedisShake的机器必须要和新的redis集群网络是通的
1.下载(你也可以自己下载源码,自己编译,我比较懒,直接使用他们已经编译好的)
wget https://github.com/alibaba/RedisShake/releases/tag/release-v2.0.3-20200724
2.解压
tar -zxvf redis-shake-v2.0.3.tar.gz
3.redis-shake.conf配置如下(我把里面一些注释去掉,不然太多,只留下我配置的内容,但是实际上需要配置的地方如,source.type ; source.rdb.input ;target.address;)
conf.version = 1
id = redis-shake
log.file =
log.level = info
pid_path =
system_profile = 9310
http_profile = 9320
parallel = 32
#修改为cluster类型 具体可以看下
source.type = cluster
#这里需要注释掉
#source.address = 192.168.226.128:6379
source.auth_type = auth
source.tls_enable = false
#这里的dump.rdb文件 是我从生产上拷贝到这台机器上的
source.rdb.input = /data/redis-5.0.5/db/dump1.rdb;/data/redis-5.0.5/db/dump2.rdb;/data/redis-5.0.5/db/dump3.rdb;/data/redis-5.0.5/db/dump4.rdb;/data/redis-5.0.5/db/dump5.rdb;/data/redis-5.0.5/db/dump6.rdb
source.rdb.parallel = 0
source.rdb.special_cloud =
target.type = cluster
#这里需要填写目标的都是master或者slave的ip port
target.address = 192.168.226.129:7000;192.168.226.129:7001;192.168.226.129:7002
target.auth_type = auth
target.db = -1
target.tls_enable = false
target.rdb.output = local_dump
target.version =
fake_time =
key_exists = none
filter.db.whitelist =
filter.db.blacklist =
filter.key.whitelist =
filter.key.blacklist =
4.执行
./redis-shake.linux -conf=redis-shake.conf -type=restore
更多推荐
所有评论(0)