cbrestore/cbbackup 从 Couchbase 5.5 到 Couchbase 6.5

cbrestore/cbbackup from Couchbase 5.5 to Couchbase 6.5

我已经使用以下命令从 Couchbase 5.5 集群备份数据:

$ cbbackup http://couchbase:8091 ~/cbbackup -u *** -p ***

然后,我将 ~/cbbackup 文件从集群复制到我的本地机器上。 我有一个新的 Couchbase 6.5 集群,我想将数据迁移到该集群。 然后我将 ~/cbbackup 复制到新集群中。

但是,当我尝试在 Couchbase 6.5 集群中恢复它时,发生了这种情况:

$ cbrestore ~/cbbackup http://couchbase:8091 -u *** -p ***
2020-05-23 14:11:47,209: s0 error: async operation: error: conn.sendall() exception: [Errno 104] Connection reset by peer on sink: http://couchbase:8091(b'default'@b'couchbase-0001.couchbase.couchbase.svc:8091')
2020-05-23 14:11:47,221: s2 error: async operation: error: conn.sendall() exception: [Errno 104] Connection reset by peer on sink: http://couchbase:8091(b'default'@b'couchbase-0003.couchbase.couchbase.svc:8091')
2020-05-23 14:11:47,226: s1 error: async operation: error: conn.sendall() exception: [Errno 104] Connection reset by peer on sink: http://couchbase:8091(b'default'@b'couchbase-0002.couchbase.couchbase.svc:8091')
error: conn.sendall() exception: [Errno 104] Connection reset by peer

如何将备份从 Couchbase 5.5 恢复到我的 Couchbase 6.5 集群?

幸运的是,我很清楚你需要什么!

根据 this chart 版本兼容性,Couchbase 6.5 应该可以将备份恢复到 Couchbase 5.0。

虽然它失败的原因,我不确定。根据 Sync Gateway 制作的 this thread at the Couchbase forums, it could be because of some problem handling xattrs [MB-31224];但同样,我不确定。

然而,经过多次试验和错误,曾经对我有用的是使用 6.5 中的 cbbackup 来备份 5.5 集群。那么它不是 5.5 的 cbbackup 和 6.5 的 cbrestore,而是 6.5 的两者。它奏效了!

我的设置是 运行 在 Kubernetes 中,所以我做了这样的事情:

$ kubectl run -i -t couchbase-migrate --image=couchbase/server:6.5.1 --restart=Never --rm=true --command -- /bin/bash
root@couchbase-migrate:/# cbbackup http://couchbase:8091 ~/cbbackup -u *** -p ***
...

然后我将备份从 couchbase-migrate pod 复制到我的本地机器上。

之后,我同样进行了还原:

$ kubectl run -i -t couchbase-migrate --image=couchbase/server:6.5.1 --restart=Never --rm=true --command -- /bin/bash
...
root@couchbase-migrate:/# cbrestore ~/cbbackup http://couchbase:8091 -u *** -p ***
...

不同 Couchbase 版本之间的备份和恢复过程存在兼容性问题。

从问题描述来看,好像是一次数据迁移。

如果没有任何效果,实际上我也有类似的用例,我只是通过 运行 简单的 SELECT 查询将所有记录从旧版本的 Couchbase 导出到外部文件并摄取同样使用基于 java 的简单应用程序到更高版本的 Couchbase。

此方法与标准 backup/restore 流程的区别在于,backup/restore 也会负责构建索引,而且速度也会更快。