踩坑之路——Redis迁移遇到的一路坑

来源:互联网 发布:java项目源代码网站 编辑:程序博客网 时间:2024/06/07 03:40

坑点

redis-Docker 里面没有redis.conf ?

redis 从 rdb 无缝切换到 aof 备份方式

redis 迁移命令


1. Redis-Docker 里面没有 redis.conf

需求是,公司要上云,把之前的机房的redis迁移到云redis。阿里的数据库redis版只支持aof方式,而公司之前的redis用的是rdb,所以首先需要把 rdb 转换成 aof ,所以需要改 redis.confappendonly 的选项,但是在docker中查找,没有发现conf 文件,一番检查发现,使用的官方 redis docker 的 dockefile 中是这样写的。

RUN mkdir /data && chown redis:redis /dataVOLUME /dataWORKDIR /dataCOPY docker-entrypoint.sh /usr/local/bin/ENTRYPOINT ["docker-entrypoint.sh"]EXPOSE 6379CMD ["redis-server"]

怀疑是当时run的时候参数不对,或者是后来被删除了,正确的run 方法

docker run -d -it \-p 6379:6379 \-v /path to redis.conf:/etc/redis/redis.conf \-v /expose path  data:/data \--restart always \--name some_redis \redis-server /etc/redis/redis.conf

这样就带了conf 进去,同时使用conf 来启动 ,这里要注意,conf 文件中的 daemonize yes 要改为no ,这个参数代表着 redis-server 会 运行在后台,docker 会自动退出 。conf文件可以从其他地方copy一份过来.

这里有很多解决方案,如果你想重新跑一个新的容器,你需要先将 rdb.dump 文件 copy 到容器外面。如果你不想重新跑一个新的容器, 你也可以直接在之前的reids容器里面创建配置文件。


2. redis 从 rdb 无缝切换到 aof 备份方式

既然 redis.conf 文件的问题解决了,就可以开始考虑开启aof 生成 appendonly.aof文件,然后提交给远端redis服务器就好了,思路很简单,这里就不描述我没有找到正确方法之前的一堆狗屎操作了,直接贴上正确的步骤,很简单:

//在docker 内执行 redis-cli 切换到客户端,设置aof 开启,这时候已经有了aof文件了config set appendonly yesconfig set save ""

这样,就有了aof 文件了,这也说明了,这样开启aof 不是增量的,而是所有的数据。

这里做操作之前记得先备份 rdb.dump 文件,以免误操作了,还能恢复数据。如果你的rdb文件是在docker 内的 那么你可以这样来备份。

docker cp <containerId>:/docker-inner/rdb.dump    /dokcer-outer/rdb.dump.back 

3. redis 迁移命令

接下来两步是针对迁移到 阿里云的云数据库redis,如果只是普通迁移,直接拷贝持久化文件即可。

redis-cli -h <-填写云redis的host地址->     -a    <-云redis密码->   --pipe  < appendonly.aof

由于云数据库 Redis 版仅支持从阿里云内网访问,所以此操作方案仅在阿里云 ECS 上执行才生效。 若您的 Redis 不在阿里云 ECS 服务器上,您需要将原有的 AOF 文件复制到 ECS 上再执行以上操作。所以这里还需要把aof 从之前的服务器放到 关联的ecs上来执行上面的迁移命令,真是全是坑!

吐槽一下没有运维的坏处,就是作为一只后端狗,搞起来真的很烦啊!!而且日渐感觉到运维的重要性就是,服务了很多下游,其中真的有很多门道,膜拜一下运维大大。还有要吐槽的就是 docker 里面的初识环境一定要记得带上一些基础套件,不然 vim 、ping 什么都没有! ~ 全部需要手动安装,等到用的时候真的想死的心都有了~

最终!redis 上云迁移完成!!~

这里写图片描述