Redis数据迁移方案分享

sw
需求场景

受疫情影响,公司业务下滑,公司内部开始开源节流。IT基础设施这边要做的就是压缩服务器资源,对线上业务系统、服务等进行整合。

此次整合涉及到单机Redis数据的迁移。

本文模拟线上redis环境,进行数据进行迁移测试。

测试环境

Redis实例

角色

说明

10.100.210.33:6380

模拟线上生产环境

10.100.202.248:6381

模拟目标服务器上新部署的redis从库——Redis主从方案迁移数据

完成

10.100.202.248:6382

模拟目标服务器上新部署的redis实例——RedisBGSAVE方案迁移数据

完成

10.100.202.248:6383

模拟目标服务器上新部署的redis实例——redis-dump方案迁移数据

未测试

方案一:Redis从库同步主库的数据

线上环境中redis主实例配置了requirepassAbc@123,搭建从库实例,要想成功获取主库的数据,需在从库配置文件中配置masterauthAbc@123.

从库的配置文件中,requirepassAbc@123配置项目也需要配置,这里配置该参数的目的是当从库的数据与主库的数据保持同步后,会将其与主库断开连接,重启redis实例,使其使用从库本地的RDB文件进行启动,同时将应用中的redis相关配置项指向该实例,保证其与原redis实例的连接方式不变(连接redis密码与使用主库时一致。)

从库配置

1990:C07May202213:38:50.341Redisversion=5.0.12,bits=64,commit=00000000,modified=0,pid=1990,juststarted1990:C07May202213:38:50.341WARNING:TheTCPbacklogsettingof511cannotbeenforcedbecause/proc/sys/net/core/:S07May202213:38:50.342WARNINGovercommit_memoryissetto0!'_memory=1'to/etc/'_memory=1':S07May202213:38:50.342_6381restartStoppingRedisstoppedStartingRedisserver[root@c7-8redis]Replicationrole::638010.100.210.33:638010.100.210.33:638010.100.210.33:6380bgsave(error):6380authAbc@123:6380bgsaveBackgroundsavingstarted

redis_6380实例运行日志中输出信息如下:

26504:M07May14:31:39.167*Backgroundsavingstartedbypid2145121451:C07May14:31:39.173*DBsavedondisk21451:C07May14:31:39.174*RDB:0MBofmemoryusedbycopy-on-write26504:M07May14:31:39.259*Backgroundsavingterminatedwithsuccess

拷贝文件到目标服务器上:

[root@develop~]./install_etuparunningredisserverPleaseselecttheredisportforthisinstance:[6379]6382Pleaseselecttheredisconfigfilename[/etc/redis/6382.conf]Selecteddefault-/etc/redis/6382.confPleaseselecttheredislogfilename[/var/log/redis_6382.log]Selecteddefault-/var/log/redis_6382.logPleaseselectthedatadirectoryforthisinstance[/var/lib/redis/6382]Selecteddefault-/var/lib/redis/6382Pleaseselecttheredisexecutablepath[/usr/local/bin/redis-server]Selectedconfig:Port:6382Configfile:/etc/redis/6382.confLogfile:/var/log/redis_6382.logDatadir:/var/lib/redis/6382Executable:/usr/local/bin/redis-serverCliExecutable:/usr/local/bin/redis-cliIsthisok?/tmp/6382.conf=/etc//redis_6382InstallingserviceSuccessfullyaddedtochkconfig!Successfullyaddedtorunlevels345!StartingRedisserverInstallationsuccessful!

停止redis_6382实例,避免拷贝过来的rdb文件被进程覆盖

serviceredis_6382stop
[root@c7-8utils]:6382authAbc@123:6382127.0.0.1:6382127.0.0.1:6382keys*1)"GPS:{862370051630949}:20210527-1"2)"GPS:{862370051630949}:20210531-1"3)"HzAccessToken:0bc7db7327184fdda009f411fa2457b7"

该方法会存在差异数据,差异数据的多少取决于业务繁忙程度和执行BGSAVE命令后到启动新实例并加载完成之间的时间差。

时间越长,业务越繁忙,差异数据越大。

方案三:redis-dump进行数据迁移

redis-dumpredis-load工具目前仍为BETA版本。是一个将Redis数据导入/导出为json格式数据的小工具。

其数据导出/导入通过redis-dump、redis-load命令来实现,其中,redis-dump命令将redis数据输出到json格式的文件中;

redis-load命令则是将json格式数据导入到Redis数据库中。

gitee地址。

redis-dump工具支持按db进行转储,相比BGSAVE和主从模式更灵活。

此处不再进行测试,感兴趣的可以参考redis-dump作者的手册进行测试。

文章版权声明:除非注明,否则均为虚境探索者原创文章,转载或复制请以超链接形式并注明出处。

上一个 回合制RPG游戏推荐 不容错过的经典大作

下一个 两只企鹅在游戏里秀恩爱的下场是什么?