我已经处理这个问题好几个星期了。
我有以下场景:
couchdb2.3.1-A <===> couchdb2.3.1-B <===> couchdb3.1.1-A <===> couchdb3.1.1-B
其中<===>
代表两个拉取复制,每侧配置一个。即:couchdb1 从 couchdb2 拉取,反之亦然。
Couchdb 在 docker 容器中运行
如果在 处进行写入couchdb2.3.1-A
,则它必须通过所有服务器,直到到达couchdb3.1.1-B
。
它们全都有专用硬盘。Couchdb 不与任何其他服务共享磁盘。
couchdb2.3.1
A
并且B
没有问题。
couchdb3.1.1-A
随着时间的推移,磁盘延迟逐渐增加。因此,我们停止向其发出写入请求,并开始仅与 通信couchdb3.1.1-B
。couchdb3.1.1-A
仍然接收写入,但仅通过复制协议。磁盘延迟没有变化。
自问题出现以来我们所做的改变:
- 升级内核从
4.15.0-55-generic
至5.4.0-88-generic
- 将 Ubuntu 从 升级
18.04
到20.04
- 已删除
_global_changes
数据库couchdb3.1.1-A
更多信息:
- Couchdb 正在使用 docker local-persist 卷。
- 磁盘是用于
2.3.1
CouchDBs 的 WD Purple 和用于3.1.1
CouchDBs 的 WD Black。 - 我们只有一个数据库
88GiB
和 2 个视图:一个22GB
和一个小视图30MB
(高度更新) docker stats
显示couchdb3.1.1与2.3.1相比使用了大量内存:3.5GiB
对于 couchdb3.1.1-A(不接收直接写入请求)8.0GiB
对于 couchdb3.1.1-A(接收读取和写入请求)226MiB
对于 2.3.1-A552MiB
对于 2.3.1-B
- 数据库压缩在夜间进行。问题只发生在白天,因为大多数写入操作都是在白天进行的。
- 大部分配置都是默认的。
来自 munin 监控的延迟图:
任何帮助都将受到赞赏。