首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Redis似乎在启动时删除了dump.rdb。使用库伯奈特斯聚氯乙烯和KubeDB。为什么会发生这种情况?

Redis似乎在启动时删除了dump.rdb。使用库伯奈特斯聚氯乙烯和KubeDB。为什么会发生这种情况?
EN

Stack Overflow用户
提问于 2019-06-28 09:23:30
回答 2查看 2.1K关注 0票数 2

我们在集群中使用KubeDB来管理DB。

因此,Redis是通过KubeDB Redis对象部署的,KubeDB将PVC附加到Redis吊舱。

不幸的是,KubeDB不支持任何恢复或备份红宝石转储(目前)。

对于备份,我们的解决方案是运行一个CronJob,它将dump.rdb从Redis复制到作业荚中,然后将其上传到S3。

为了恢复垃圾场,我也想做同样的事情,只是反过来。有一个临时结束符,它下载S3备份,然后将其复制到dump.rdb位置。

redis.conf看起来如下所示:

代码语言:javascript
运行
复制
....
# The filename where to dump the DB
dbfilename dump.rdb

# The working directory.
#
# The DB will be written inside this directory, with the filename specified
# above using the 'dbfilename' configuration directive.
#
# The Append Only File will also be created inside this directory.
#
# Note that you must specify a directory here, not a file name.
dir /data
....

复制成功了。dump.rdb位于具有正确权限的正确位置。我通过使用相同的redis.conf在Redis吊舱中启动第二个Redis服务器来验证这一点。dump.rdb正在被加载到服务器中,没有问题。

但是,由于我不想手动启动第二个Redis服务器,所以我重新启动了dump.rdb的Redis(通过kubectl删除荚)来拾取复制的。

每次我删除pod时,都会删除dump.rdb,并创建一个新的dump.rdb,其大小要小得多(93个字节)。

我不认为这是一个PVC问题,因为我已经创建了一些文件,以测试它们是否也被删除。他们不是。只有dump.rdb

这一切为什么要发生?我希望Redis只是从dump.rdb中恢复DB,而不是创建一个新的数据库。

编辑:是的,dump.rdb的大小大约是47 GB。红色版本为4.0.11。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-28 14:56:45

所以,几个小时后,我的队友记得Redis执行了一次保存到关机上。

现在,我不再使用kubectl delete pod删除pod,而是更改代码,使用redis-cli运行SHUTDOWN NOSAVE

代码语言:javascript
运行
复制
kubectl exec <redis-pod> -- /bin/bash -c 'redis-cli -a $(cat /usr/local/etc/redis/redis.conf | grep "requirepass " | sed -e "s/requirepass //g") SHUTDOWN NOSAVE'
票数 6
EN

Stack Overflow用户

发布于 2020-11-18 09:56:00

在Kubernetes AOF =yes上恢复Redis:

要做的第一件事是从kubernetes服务器上删除redis部署:

代码语言:javascript
运行
复制
kubectl delete -f ./redis.yaml

连接到安装文件系统上的redis持久存储(PVC),可以是GlusterFS -音量、Azure存储-文件共享、min.io S3桶。

然后,删除当前的dumb.rdb文件(如果有)或将其重命名为dump.rdb.old:

复制好的备份dump.rdb文件并更正其权限:

代码语言:javascript
运行
复制
chown 999:999 dump.rdb
chmod 644 dump.rdb

接下来,重要的部分是通过编辑redis.yaml文件禁用AOF,只将附录设置为"no":验证附录设置为"no":

代码语言:javascript
运行
复制
  containers:
    - name: redis
      image: redis:5.0.4
      imagePullPolicy: Always
      args: ["--requirepass", "$(redis_pass)", "--appendonly", "no", "--save", "900", "1", "--save", "30", "1"]

接下来,在kubernetes上创建Redis部署:

代码语言:javascript
运行
复制
kubectl apply-f ./redis.yaml

运行以下命令创建新的appendonly.aof文件

代码语言:javascript
运行
复制
kubectl exec redis-0 -- redis-cli -a <redis-secret> bgrewriteaof

检查进度(0完成,1-尚未),如果存在与dump.rdb大小相同的新的dump.rdb文件

代码语言:javascript
运行
复制
kubectl exec redis-0 -- redis-cli -a <redis-secret> info | grep aof_rewrite_in_progress

您应该看到一个新的appendonly.aof文件。接下来,重新创建redis服务器:在它完成后,通过将redis.yaml文件更改为yes,再次启用AOF。

代码语言:javascript
运行
复制
  containers:
    - name: redis
      image: redis:5.0.4
      imagePullPolicy: Always
      args: ["--requirepass", "$(redis_pass)", "--appendonly", "yes", "--save", "900", "1", "--save", "30", "1"]

然后再重新创建Redis服务器:

代码语言:javascript
运行
复制
kubectl delete-f ./redis.yaml
kubectl apply-f ./redis.yaml

恢复工作已经完成。

如果您使用linux并安装了redis作为服务,请使用以下说明:我们

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56804266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档