当硬盘空间可用时,Aerospike%可用写入块的年龄较小

时间:2017-12-13 10:25:27

标签: aerospike

我们发现自己遇到了这个问题。配置如下: -

user> (require '[clojure.zip :as z])
nil

user> (defn dfs [goal? tree]
        (loop [curr (z/zipper coll? seq identity tree)]
          (cond (z/end? curr) nil
                (goal? (z/node curr)) (z/node curr)
                :else (recur (z/next curr)))))
#'user/dfs

user> (dfs #{10} [1 [3 5 [7 9] [10] 11 12]])
10

user> (dfs #{100} [1 [3 5 [7 9] [10] 11 12]])
nil

user> (dfs (every-pred number? even?) [1 [3 5 [7 9] [10] 11 12]])
10

enter image description here

有人可以帮我们解决这个问题吗?这可能是什么原因?

2 个答案:

答案 0 :(得分:3)

Aerospike只会写入免费区块。块可以包含适合的任意数量的记录。如果您的写入/更新模式使得块永远不会低于50%活动记录(碎片整理的默认阈值:defrag-lwm-pct),那么您有一堆"空"无法利用的空间。在managing storage页面中阅读有关碎片整理的更多信息。

如果群集没有看到任何写入,则可以更轻松地从中恢复。您可以增加 defrag-lwm-pct,以便更多块符合条件并进行碎片整理。

另一个原因可能是硬盘速度不够快,无法跟上碎片整理。

您可以在Aerospike KB - Recovering from Available Percent Zero中详细了解可能的解决方案。不要读过去"停止节点上的服务......"

答案 1 :(得分:2)

您基本上没有对您的perisistence存储设备进行碎片整理(每个节点75GB)。从您发布的快照中,您在3个节点上有大约一百万条记录,其中有2100万条已过期。所以看起来你正在用非常短的ttl编写记录,并且碎片整理无法跟上。

当你处于以下状态时,你可以发布几行的输出:

$ grep defrag /var/log/aerospike/aerospike.log

$ grep thr_nsup /var/log/aerospike/aerospike.log

您的写入/更新负载是多少?我怀疑你只是创建简短的ttl记录和阅读,而不是更新。

根据您的工作情况,增加defrag-lwm-pct可能会让您的情况变得更糟。我还会从默认的100微秒调整nsup-delete-sleep,但这取决于上面的日志greps显示的内容。所以发布那些,让我们看看。

(编辑:此外,即使您在持久性存储上超过50%HWM,您也没有看到驱逐,这意味着您的nsup线程需要很长时间才能运行。这再次指向{{1}需要调整设置的值。)