Redis 备份恢复以及数据迁移

昨晚老板突然在群里发了一张图片,说昨天才用的,怎么今天还要登录?相关人赶紧看看。
image.png

我心想让你登录就登录呗,哪来那么多事?本想洗洗睡了。老大突然微信问我说,是不是 Redis 出问题了?怎么用户的登录态没了?我们趁老板还没收到客户投诉之前把数据恢复一下。

没办法既然到找到我了,那就是对我的百分百信任,为公司赴汤蹈火在所不辞。更何况只是恢复一下数据呢,你说是吧?
image.png

Redis 恢复数据那就免不了和 RBD、AOF这俩老货打交道了。

简单来说:

  • RDB 是全量备份
  • AOF 是增量备份
    image.png

别急,再通俗点:

  • RDB 就是在一个特定的时间点把全部数据备份一次
  • AOF 就是如果写入了,就把这次写操作记起来
    image.png

别动手,举个栗子给你,包懂的:

我女朋友送了一盒乐高给我,打算和我在星期四的晚上点个KFC疯狂套餐。然后做一件疯狂的事情。

我把盒子拿出来一看,封面已经把乐高模型都画出来了。我说这不是洒洒水吗?10分钟搞定它。

1个小时后,装逼不成的我只能求女票把说明书给我,然后和我一起拼。

经过两个人近3个小时的鏖战,模型终于是拼好了。

image.png

把你的脚放下,我马上解释。在这个例子中,盒子封面就相当于RDB,它是乐高模型在某个时刻的样子,有一个词我相信你一定听过,快照。我可以在拼好底座的时候拍个照,这是一个快照。在底座的基础上再拼上主体,然后我再拍个照,这也是一个快照。总之呢,只要能通过这张照片欢迎出原来的东西,那这张照片就是一个完美的快照。像我拆电脑前必须先拍张照片,不是怕忘记什么。只是我想记住写什么,免得多出来一两颗螺丝就不好了。

image.png

说了半天,AOF呢?你难道没发现我最后是靠什么拼好乐高模型的吗?没错说明书就相当于AOF。说明书记录了底座要怎么拼,主体要怎么拼,以及最后的封顶要怎么拼。每一步都给你写清楚,就怕你到时候没拼好找他退钱。AOF 就是这样工作的,当我向 Redis 里面写入数据时,他就记起来,一直记一直记。只要记得足够多,那还原不是简简单单3小时的事吗?

拼完乐高之后,我女票说她累了,要我抱抱

image.png

咳咳,这篇文的主题是什么来着?Redis 数据迁移,差点忘了。接下来就是劲爆的数据迁移,请先去厕所,然后打开再看,我怕你们其他时间不看。

说回数据恢复,首先看一下 Redis 实例有没有开启备份

127.0.0.1:6379> CONFIG GET save
1) "save"
2) ""
127.0.0.1:6379> CONFIG GET appendonly
1) "appendonly"
2) "no"

哇哦,看到这个结果的时候我心都死了,这表示不会自动进行 RDB 备份,没有开启 AOF 备份。我嘞个豆,你让我做饭,但是不给我米,还说想吃香香的饭,那我怎么办?我只能问运维有没有备份,意外的是运维说他昨晚刚备份完。确实挺意外的,果然这小伙之前被叼那么多次是有用的。

既然有备份文件了 ,那就直接恢复吧,数据丢点就丢点。总比全部丢了要强。突然发现我的Redis是部署在K8S里面的,那我就得先把文件给复制进去。

kubectl cp ./2406141123dump.rdb prod/redis-deploy-6764468fd6-lrkq7:/data/2406141123dump.rdb kubectl cp <local-file_name> <name-space>/<pod-name>:<pod-file-name>

然后执行恢复命令

# 先找到对应得pod
kubectl get pods -n prod | grep redis # 进入pod
kubectl exec -it <pod-name> bash -n <name-space># 通过redis-cli 恢复rdb
redis-cli -h localhost -p 6379 --rdb /data/2406141123dump.rdb

这时候我们就拥有群里的狗叫权了

image.png

数据恢复完之后的常规操作那当然是再备份一把了,我们可以选择开启RDB的自动备份和AOF,但是但是那是运维的事情。秉承着别人的事情我坚决不做,自己的事情适当不做的原则,我们忽略它。
然后手动触发一次RDB备份,给回运维保存,数据恢复就告一段落了。

# 先查一下现在的rdb最新备份时间
127.0.0.1:6379> lastsave
(integer) 1718779144# 触发备份
127.0.0.1:6379> bgsave
Background saving started#再查一遍最新备份时间,如果和上次不同就说明成了
127.0.0.1:6379> lastsave
(integer) 1719225459127.0.0.1:6379> exit

别忘了,我们现在在 K8S 的pod里面,我们还得把备份文件复制到宿主机去

# 先看一下有没有备份文件 dump.rdb
ls -l /data# 将k8s中pod的文件拷贝到宿主机
kubectl cp prod/redis-deploy-6764468fd6-lrkq7:/data/dump.rdb ./dump.rdb

发给运维,大功告成。

image.png

作为一个专业的前端后端运维测试工程师,我们解决了问题,还得解决提出问题的人(bushi)。
让我来看看怎么个事?问就是流量突增,毕竟这是所有人都喜欢的答案,当然是包括我的,这意味着我们只要加钱就行了。加钱就意味着是老板给的不够,不是我们前端后端运维测试工程师的问题。

这该死的世界啊,我究竟要为这个世界背负多少的秘密。我永远不会告诉别人,当时Redis所在的机器莫名重启了,而且Redis是单节点,没有挂载持久化盘。而且运维每天都是手动备份,我当时能拿到前一天的备份真的是好运,因为他想起来他好几天没备份了,就备份了一下子。

image.png

既然发现了问题那就解决问题吧,既然 Redis 单节点而且没有持久化,那我们就打一层反逻辑。在集群里面部署一个 多节点有持久化的 Redis,是不是就解决了。是的,答案往往就是这么的朴实无华。那有没有更好更简单的方法呢?必定是有的。给钱申请一个云Redis,然后把数据迁移过去,完美。

image.png

可用性和持久化解决了,那接下来就是数据迁移了,我找了挺多工具的,但最后只留下两个来尝试,因为很多工具都不维护了:

  • https://github.com/erikdubbelboer/phpRedisAdmin
  • https://github.com/tair-opensource/RedisShake

image.png

phpRedisAdmin 有图形页面,还能导入导出。看起来相当不错,但是有这几个问题让我放弃了它:

  • 导出结果是字符串格式的,有序列化问题
  • 导出结果没有过期时间
  • key 多的时候,页面很卡

image.png

这就是我导出内容的一部分截图,中间那一堆乱码是因为我用来默认了 RedisTemplate

然后是 Redis-Shake,这是一个go写的,专门用来做数据迁移的工具。支持多种方式从源Redis实例拉取数据同步到目标实例。

# 下载二进制文件
wget https://github.com/tair-opensource/RedisShake/releases/download/v4.1.0/redis-shake-linux-amd64.tar.gz# 解压
tar -zxvf redis-shake-linux-amd64.tar.gz# 修改配置文件 shake.toml,然后执行同步
./redis-shake shake.toml

image.png

靠谱

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/361096.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

筑梦未来:高考后,专业与学校的天秤两端

前言 2024 年高考落幕&#xff0c;几人欢喜几人愁&#xff0c;作为一个过来人&#xff0c;希望每一个努力的悻悻学子都能得偿所愿&#xff0c;不负年华&#xff0c;报的心仪的志愿。 接下来我将从三个方向进行一些分析建议&#xff0c;在专业与大学排名间做出适当的权衡。 专…

智能语音抽油烟机:置入WTK6900L离线语音识别芯片 掌控厨房新风尚

一、抽油烟机语音识别芯片开发背景 在繁忙的现代生活中&#xff0c;人们对于家居生活的便捷性和舒适性要求越来越高。传统的抽油烟机操作方式往往需要用户手动调节风速、开关等功能&#xff0c;不仅操作繁琐&#xff0c;而且在烹饪过程中容易分散注意力&#xff0c;增加安全隐…

【深度学习】基于因果表示学习的CITRIS模型原理和实验

1.引言 1.1.本文的主要内容 理解动态系统中的潜在因果因素&#xff0c;对于智能代理在复杂环境中进行有效推理至关重要。本文将深入介绍CITRIS&#xff0c;这是一种基于变分自编码器&#xff08;VAE&#xff09;的框架&#xff0c;它能够从时间序列图像中提取并学习因果表示&…

Kafka入门-基础概念及参数

一、Kafka术语 Kafka属于分布式的消息引擎系统&#xff0c;它的主要功能是提供一套完备的消息发布与订阅解决方案。可以为每个业务、每个应用甚至是每类数据都创建专属的主题。 Kafka的服务器端由被称为Broker的服务进程构成&#xff0c;即一个Kafka集群由多个Broker组成&#…

薄冰英语语法学习--名词2-格

名词后面 s&#xff0c;代表后面这个东西属于前面的。 比如toms book&#xff0c;汤姆的书。 末尾是s&#xff0c;那么直接在最后加就行了。比如boys&#xff0c;男孩们的 表示几个词共同 的所有关系在最后一个词的词尾加 sMary and Toms books 玛丽和汤姆共有的书表示几个词…

Android简介-历史、API等级与体系结构

1. Android简介 Android是一种基于Linux内核的自由及开放源代码的操作系统。最初是由安迪鲁宾(Andy Rubin)开发的一款相机操作系统。2005年8月被Google收购。2007年11月&#xff0c;Google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良Android系统。…

TCP: 传输控制协议

TCP: 传输控制协议 TCP的服务TCP 的首部小结 本系列文章旨在巩固网络编程理论知识&#xff0c;后续将结合实际开展深入理解的文章。 TCP的服务 T C P和U D P都使用相同的网络层&#xff08;I P&#xff09;&#xff0c;T C P却向应用层提供与U D P完全不同的服务。 T C P提供一…

51单片机STC89C52RC——8.2 8*8 LED点阵模块(动态图像)

目的/效果 在《51单片机STC89C52RC——8.1 8*8 LED点阵模块&#xff08;点亮一个LED&#xff09;》我们点亮一个LED&#xff0c;接下来我们将在8*8的矩阵中展示动态的图像。 1&#xff1a;单列展示&#xff1a; 2&#xff1a;单行展示 3&#xff1a;笑脸 4&#xff1a;右移…

JavaScript的学习之文档的加载

目录 一、onload的运用 浏览器在加载一个页面时&#xff0c;是按照自上而下的顺序加载的&#xff0c;读取到一行就执行一行&#xff0c; 如果script标签写到页面的上方&#xff0c;在代码执行时&#xff0c;页面还没有加载&#xff0c;所以要将JS代码写道页面下面 一、onload的…

Python使用attr库打造数据类,你还在手写构造函数吗?

1、attr库基础介绍 🛠️ 1.1 attr安装与导入 在Python中,attr库是一个简化创建数据类的工具 ,它通过简洁的语法自动添加属性和方法 ,如getter、setter等。要开始使用attr,首先需要通过pip安装这个库。打开终端或命令提示符,运行以下命令进行安装: pip install attrs…

2024软件设计师笔记之考点版(一考就过):11-25

软件设计师之一考就过:成绩版 考点11:防火墙、入侵检测 真题1:(专家系统、模型检测、简单匹配)属于入侵检测;而漏洞扫描不属于。 真题2:防火墙特性包括(控制进出网络的数据包和数据流向、提供流量信息的日志和审计、隐藏内部IP以及网络结构细节),但不包括提供漏洞扫…

「6.25更新日志」JVS·智能BI、逻辑引擎(服务编排)功能更新说明

项目介绍 JVS是企业级数字化服务构建的基础脚手架&#xff0c;主要解决企业信息化项目交付难、实施效率低、开发成本高的问题&#xff0c;采用微服务配置化的方式&#xff0c;提供了 低代码数据分析物联网的核心能力产品&#xff0c;并构建了协同办公、企业常用的管理工具等&am…

AttributeError: module ‘numpy‘ has no attribute ‘long‘

我使用的numpy版本是1.26.4。numpy.long在numpy 1.20就不维护了&#xff0c;numpy 1.24就移除掉了&#xff0c;因此解决方案之一就是重新安装numpy 或者&#xff0c;ctrl鼠标左键定位到报错的地方&#xff0c;将numpy.long改为numpy.longlong。 https://numpy.org/devdocs/rele…

NetSuite Account Merge 科目合并功能分析

最近项目中&#xff0c;客户有提到过能否将不用的Account与新建的Account进行合并&#xff0c;即我们所说的Merge功能&#xff5e;可以&#xff0c;但是该功能有使用的限制&#xff0c;比如最直接的一点需要注意&#xff0c;不同类型的Account是不可以使用Merge功能的&#xff…

mysql数据库中使用存储过程带来的好处和示例(存储过程的概念、定义、作用等详解)

目录 一、概述 二、存储过程的作用 1、代码重用 2、简化复杂操作 3、提高性能 4、安全性和数据完整性 三、相对于sql操纵语句&#xff08;select、insert等&#xff09;存储过程的好处 1、代码重用和封装 &#xff08;1&#xff09;概述 &#xff08;2&#xff09;举…

红酒舞动,运动风采,品味力与美

当夜幕降临&#xff0c;城市的灯火渐次亮起&#xff0c;忙碌了一天的人们开始寻找那份属于自己的宁静与愉悦。在这个时刻&#xff0c;红酒与运动&#xff0c;这两个看似截然不同的元素&#xff0c;却能以它们不同的魅力&#xff0c;为我们带来一场视觉与感官的盛宴。 红酒&…

多供应商食品零售商城系统的会员营销设计和实现

在多供应商食品零售商城系统中&#xff0c;会员营销是提升用户粘性和增加销售的重要手段。一个有效的会员营销系统能够帮助平台更好地了解用户需求&#xff0c;提供个性化服务&#xff0c;进而提高用户满意度和忠诚度。本文将详细探讨多供应商食品零售商城系统的会员营销设计与…

四川赤橙宏海商务信息咨询有限公司一站式抖音电商服务

在数字化浪潮汹涌的当下&#xff0c;电商行业正以前所未有的速度发展&#xff0c;而抖音电商作为其中的佼佼者&#xff0c;更是吸引了无数商家和消费者的目光。在这个充满机遇与挑战的市场中&#xff0c;四川赤橙宏海商务信息咨询有限公司凭借其专业的服务和丰富的经验&#xf…

免费资源推荐丨维普OA期刊服务:OA传播 可在线阅读,可下载PDF

《OA传播(Communication based on Open Access,CBOA)》数据库 产品介绍 OA传播(Communication based on Open Access,CBOA)由重庆非晓数据科技有限公司(重庆维普资讯有限公司子公司)出品&#xff0c;是以服务全球科学研究与技术创新为宗旨的OA学术文献一站式免费检索、下载、传…

背包模型——AcWing 423. 采药

背包模型 定义 背包模型是一种常见的算法问题模型&#xff0c;它主要涉及将一些物品放入一个容量有限的背包中&#xff0c;以达到某种最优目标&#xff0c;如最大化价值或最小化重量等。 运用情况 常用于资源分配、项目选择、货物装载等实际问题中。例如&#xff0c;在选择…