我已经建立了一个 4 个节点的 CouchDB 集群来存储我检索到的推文
集群配置为有 8 个分片,每个文档保留 3 个副本
[cluster]
q=8
r=2
w=2
n=3
我没有添加任何视图或附加索引,Fauxton 中显示的数据库大小为4.3 GB
但是,CouchDB 在其中一个节点中占用了异常大的磁盘空间
$ ansible -i hosts -s -m shell -a 'du /vol/couchdb/shards/* -sh' couchdb
crake.couchdb.cloud | SUCCESS | rc=0 >>
363M /vol/couchdb/shards/00000000-1fffffff
990M /vol/couchdb/shards/20000000-3fffffff
17G /vol/couchdb/shards/40000000-5fffffff
1.4G /vol/couchdb/shards/60000000-7fffffff
359M /vol/couchdb/shards/80000000-9fffffff
989M /vol/couchdb/shards/a0000000-bfffffff
12G /vol/couchdb/shards/c0000000-dfffffff
1.6G /vol/couchdb/shards/e0000000-ffffffff
darter.couchdb.cloud | SUCCESS | rc=0 >>
1.4G /vol/couchdb/shards/00000000-1fffffff
367M /vol/couchdb/shards/20000000-3fffffff
1001M /vol/couchdb/shards/40000000-5fffffff
1.4G /vol/couchdb/shards/60000000-7fffffff
1.4G /vol/couchdb/shards/80000000-9fffffff
364M /vol/couchdb/shards/a0000000-bfffffff
998M /vol/couchdb/shards/c0000000-dfffffff
1.4G /vol/couchdb/shards/e0000000-ffffffff
bustard.couchdb.cloud | SUCCESS | rc=0 >>
1004M /vol/couchdb/shards/00000000-1fffffff
1.4G /vol/couchdb/shards/20000000-3fffffff
1.4G /vol/couchdb/shards/40000000-5fffffff
365M /vol/couchdb/shards/60000000-7fffffff
1001M /vol/couchdb/shards/80000000-9fffffff
1.4G /vol/couchdb/shards/a0000000-bfffffff
1.4G /vol/couchdb/shards/c0000000-dfffffff
364M /vol/couchdb/shards/e0000000-ffffffff
avocet.couchdb.cloud | SUCCESS | rc=0 >>
1.4G /vol/couchdb/shards/00000000-1fffffff
1.4G /vol/couchdb/shards/20000000-3fffffff
368M /vol/couchdb/shards/40000000-5fffffff
999M /vol/couchdb/shards/60000000-7fffffff
1.4G /vol/couchdb/shards/80000000-9fffffff
1.4G /vol/couchdb/shards/a0000000-bfffffff
364M /vol/couchdb/shards/c0000000-dfffffff
1001M /vol/couchdb/shards/e0000000-ffffffff
在crake.couchdb.cloud
中,两个碎片40000000-5fffffff
和c0000000-dfffffff
比其他碎片大得多。
我曾经尝试删除那些大碎片crake.couchdb.cloud
并等待 CouchDB 本身重建。重建后磁盘使用量是平衡的,但是在我开始向数据库添加新文档后它又逐渐变得不平衡。
我正在MD5(tweet[id_str])
用作文档 ID。这可能是问题的原因吗?
我对此感到非常困惑,因为我认为即使我犯了任何错误,当数据在集群中复制时,它也应该占用 3 个不同节点的资源。
请帮忙,谢谢。
更新
后来我删除了所有的 VPS 实例,并用 3 个 CouchDB 节点重建了集群,即Avocet
,Bustard
和Crake
. 新的集群配置如下:
[cluster]
q=12
r=2
w=2
n=2
在重建之前,我将所有数据复制到另一个 CouchDB 实例,以便在完成后将它们传输回来。恢复后磁盘使用平衡。
另外,我在第 4 个节点上引入了一个 HAProxy,即Darter
作为负载均衡器。
所以这一次,我所有的 twitter 检索器都将他们的请求发送到平衡器。然而,磁盘使用再次变得不平衡,并且正是第三个节点Crake
占用了更多空间。
bustard.couchdb.cloud | SUCCESS | rc=0 >>
Filesystem Size Used Avail Use% Mounted on
/dev/vdc 81G 9.4G 68G 13% /vol
avocet.couchdb.cloud | SUCCESS | rc=0 >>
Filesystem Size Used Avail Use% Mounted on
/dev/vdc 81G 9.3G 68G 13% /vol
crake.couchdb.cloud | SUCCESS | rc=0 >>
Filesystem Size Used Avail Use% Mounted on
/dev/vdc 81G 30G 48G 39% /vol
数据库大小仅4.2 GB
比Crake
这大 7 倍!
我现在完全一无所知...
更新 2
_dbs
来自所有节点的信息
crake.couchdb.cloud | SUCCESS | rc=0 >>
{
"db_name": "_dbs",
"update_seq": "11-g2wAAAABaANkABtjb3VjaGRiQGNyYWtlLmNvdWNoZGIuY2xvdWRsAAAAAmEAbgQA_____2phC2o",
"sizes": {
"file": 131281,
"external": 8313,
"active": 9975
},
"purge_seq": 0,
"other": {
"data_size": 8313
},
"doc_del_count": 0,
"doc_count": 7,
"disk_size": 131281,
"disk_format_version": 6,
"data_size": 9975,
"compact_running": false,
"instance_start_time": "0"
}
avocet.couchdb.cloud | SUCCESS | rc=0 >>
{
"db_name": "_dbs",
"update_seq": "15-g2wAAAABaANkABxjb3VjaGRiQGF2b2NldC5jb3VjaGRiLmNsb3VkbAAAAAJhAG4EAP____9qYQ9q",
"sizes": {
"file": 159954,
"external": 8313,
"active": 10444
},
"purge_seq": 0,
"other": {
"data_size": 8313
},
"doc_del_count": 0,
"doc_count": 7,
"disk_size": 159954,
"disk_format_version": 6,
"data_size": 10444,
"compact_running": false,
"instance_start_time": "0"
}
bustard.couchdb.cloud | SUCCESS | rc=0 >>
{
"db_name": "_dbs",
"update_seq": "15-g2wAAAABaANkAB1jb3VjaGRiQGJ1c3RhcmQuY291Y2hkYi5jbG91ZGwAAAACYQBuBAD_____amEPag",
"sizes": {
"file": 159955,
"external": 8313,
"active": 9999
},
"purge_seq": 0,
"other": {
"data_size": 8313
},
"doc_del_count": 0,
"doc_count": 7,
"disk_size": 159955,
"disk_format_version": 6,
"data_size": 9999,
"compact_running": false,
"instance_start_time": "0"
}