我们最近迁移到Couchbase 3.1.0。奇怪的是 - 当执行存储桶的完整备份时,Web UI会发出警报并且“内存不足”出现错误。节点Y上的Bucket X已满。分配给此存储桶的所有内存都用于元数据"。 Web UI中RAM使用的数字与之相反 - 使用了大约75%,但不是100%。我查看了日志,但没有发现任何类似的错误 这是否正常?
答案 0 :(得分:1)
这是Couchbase Server 3.x版本中的已知问题。
要理解这个问题,我们还必须首先了解数据库变更协议(DCP),这是用于在整个系统中传输数据的协议。在高水平上,DCP的流量控制如下:
cbbackup
实用程序不实现任何流控制(数据缓冲区限制),但它会尝试同时从所有节点流式传输所有vbucket,缓冲区大小没有上限。
虽然这并不意味着它将使用与总体数据大小相同的内存量(因为cbbackup进程缓慢地耗尽了流),但它确实意味着需要大量内存开销才能存储数据流。
当您处于繁重的DGM(磁盘大于内存)情况时,存储流所需的内存量可能比cbbackup可以消耗它们的速度更快,因为它会从磁盘上传输大量数据,导致非常大流,如前所述占用大量内存。
显示有关占用所有内存的元数据的轻微误导消息,因为没有剩余的数据存储空间,因此所有剩余的内存都分配给元数据,当使用值驱逐时,无法从内存中弹出。
这仅影响4.0之前的Couchbase Server版本的原因是,在4.0中,对DCP流管理进行了服务器端改进,允许暂停DCP流以减少内存占用,这被跟踪为{{ 3}}。 因此,您不应在Couchbase Server 4.x +版本上遇到相同的问题,无论您的存储桶是如何使用DGM。
如果您发现自己处于发生此问题的情况,则终止备份作业应立即释放流所占用的所有内存。 不幸的是,如果您已经将大部分数据从备份中驱逐出内存,那么您将不得不在一小段时间内从磁盘而不是RAM中检索大量数据,这可能会增加您的数据得到延迟。 随着时间的推移,“热”数据将在请求时被带入内存,因此这只会在一段时间内出现问题,但这仍然是一个非常不合适的情况。
完全避免此问题的解决方法是在执行备份时仅一次流式传输少量vbucket,而不是默认情况下cbbackup执行的所有vbuckets。
这可以使用cbbackupwrapper
来实现,cbbackupwrapper
与所有Couchbase Server 3.1.0及更高版本捆绑在一起,使用-n
的详细信息可以在MB-12179中找到。
特别要注意的参数是cbbackupwrapper
标志,它指定一次批量备份的vbucket的数量。
顾名思义,cbbackup
只是-n
之上的包装脚本,它将vbuckets分区并自动处理所有目录创建和备份生成,同时仍然使用cbbackup。
例如,批量大小为50,cbbackupwrapper将首先备份vbuckets 0-49,然后是50-99,然后是100-149等。
建议您在一个镜像生产环境的测试环境中使用cbbackupwrapper进行测试,以便为-P
和-n
找到合适的值(它控制一次运行多少个备份进程,组合这两个中控制了备份引起的内存压力以及整体速度。
您不应该发现将-P
的值从默认值100降低会降低备份速度,在某些情况下,您可能会发现备份速度实际上会增加,因为服务器上的内存压力要小得多。
但是,如果您希望进一步加快备份速度,您可能希望明智地调整cbbackupwrapper http://[host]:8091 [backup_dir] -u [user_name] -p [password] -n 50
参数。
以下是一个示例命令:
cbbackupwrapper
应该注意的是,如果您使用cbrestorewrapper
执行备份,那么您还必须使用cbrestorewrapper
来恢复数据,因为cbbackupwrapper
会自动了解所使用的目录结构。 {{1}}。
答案 1 :(得分:0)
运行完整备份时,默认情况下,备份工具通过网络从所有节点流式传输数据。这不是最好的方法,因为它会导致大量额外负载并增加内存使用量,尤其是在其中一个Couchbase节点上运行cbbackup时。我会使用cbbackup的数据复制模式,它直接从磁盘上的文件复制数据:
> sudo /opt/couchbase/bin/cbbackup couchstore-files:///opt/couchbase/var/lib/couchbase/data/ /tmp/backup
当然,将数据路径更改为实际存储Couchbase数据的位置。 (在我的示例中,它以sudo身份运行,因为只有root对/ opt / couchbase / blabla具有读取权限。)在每个节点上执行此操作,然后收集所有备份文件夹并将它们放在某处。请注意,备份是非常可压缩的,因此您可能希望在通过网络复制之前将其压缩。