Redis似乎在启动时删除了dump.rdb。使用Kubernetes PVC和KubeDB。为什么会这样呢?

莫里茨·施米兹诉

我们在集群中使用KubeDB来管理数据库。

因此,Redis是通过KubeDB Redis对象部署的,并且KubeDB将PVC附加到Redis Pod。

不幸的是,KubeDB还不支持Redis转储的任何还原或备份。

对于备份,我们的解决方案是运行CronJob,该CronJobdump.rdb从Redis容器复制到作业容器,然后将其上传到S3。

对于恢复转储,我想这样做,反之亦然。有一个临时容器,该容器可以下载S3备份,然后将其复制到Redis容器中dump.rdb

redis.conf如下所示:

....
# 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 pod在Redis pod中启动第二个redis-server来验证这一点redis.confdump.rdb被加载到服务器没有问题。

但是,由于我不想手动启动第二个Redis服务器,因此我重新启动了Redis pod(通过kubectl delete pods)来使该pod拾取复制的dump.rdb

每次删除Pod时,都会删除该Pod,dump.rdb并以dump.rdb较小的大小(93个字节)创建一个新的Pod

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

为什么会这样?我期望Redis仅从中还原数据库dump.rdb,而不创建新数据库

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

莫里茨·施米兹诉

如此,几个小时后,我的队友记得Redis执行了一次保存以在关闭时转储

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

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'

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用备份 dump.rdb 启动 redis 容器

初学者:使用数组时,为什么可以这样做,但不能呢?

是否可以使用管道“ |”运行输出本身?如果没有,为什么会这样呢?

Jsonresult在我的Ajax调用中使用参数失败。为什么会这样呢?

进行左联接时,Postgresql Null值将填充左表。为什么会这样呢?

当我单击网站上的链接时,它没有打开?为什么会这样呢?

如果在等式左侧加上括号时,如果条件不起作用,为什么会这样呢?

为什么会这样呢?

为什么会这样呢?

当我使用 $_POST['area'] = $_SESSION['area'] 时,为什么会这样,为什么它的长度会改变?

为什么在html和css中单击时图像会移动?怎么预防呢?

为什么在春季启动时使用MappingJacksonValue

为什么在启动时不使用/ etc / fstab?

使用LINQ方法Any()时,为什么C#编译器会创建私有DisplayClass,如何避免呢?

为什么当我使用-w时grep会返回一个匹配项,而没有它,为什么呢?

在添加空数组和对象时,为什么控制台会这样返回?

使用AJAX调用删除对象时,为什么会返回2个响应200和204?

使用“%c%c ...”格式说明符来打印字符串会产生不稳定的结果。为什么会这样呢?

为什么debian安装程序会强迫我使用以z开头的用户名,而adduser却没有这样做呢?

使用'\ n'代替endl会影响输出,为什么呢?

启动终端时,每次在终端顶部打印“ $:找不到命令”。为什么这样做呢?

为什么会这样呢?saveInstanceState = null

启动时使用javascript失败删除div

当我仍然可以看到和使用登录屏幕时,为什么我的GUI屏幕在Linux启动时空白?

如果constexpr失败,为什么会这样使用C ++ 17?

除了'xinput'之外,Linux如何知道在启动时使用触摸屏?

叠加时为什么径向渐变会像这样出现?

在启动时创建一个带有现有 rdb 和加载模块的 redis docker 容器?

为什么即使使用异步流,cudaMemcpyAsync和内核启动也会阻止?