Aerospike 集群不清理可用块
Aerospike cluster not clean available blocks
我们在项目中使用了 aerospike 并发现了一个奇怪的问题。
我们有一个 3 节点集群,在某个节点重新启动后它停止工作。
所以,我们做测试来解释我们的问题
我们做测试集群。 3 个节点,复制计数 = 2
这是我们的命名空间配置
namespace test{
replication-factor 2
memory-size 100M
high-water-memory-pct 90
high-water-disk-pct 90
stop-writes-pct 95
single-bin true
default-ttl 0
storage-engine device {
cold-start-empty true
file /tmp/test.dat
write-block-size 1M
}
我们写入100Mb的测试数据之后就有这种情况
可用 pct 约为 66%,磁盘使用率约为 34%
都很好:slight_smile:
但是我们停止了一个节点。迁移后我们看到可用 pct = 49% 和磁盘使用率 50%
Return 节点到集群,迁移后我们看到磁盘使用率变为之前的大约 32%,但是 旧节点上的可用 pct 保持在 49%
再次停止节点
可用 pct = 31%
再重复一次我们得到那种情况
可用 pct = 0%
我们的集群崩溃了,客户端收到 AerospikeException:错误代码 8:服务器内存错误
那么我们如何清理可用的 pct?
如果你的 defrag-q
是空的(你可以看到它是否来自 grepping 日志)那么问题很可能是你的名字space 小于你的 post-写队列。 post-write-queue
上的块不符合碎片整理条件,因此您会看到 avail-pct
呈下降趋势,没有碎片整理以回收 space。默认情况下,post-write-queue
是 256 个块,因此在您的情况下相当于 256Mb。如果您的 namespace 小于该值,您将看到 avail-pct 继续下降,直到您点击停止写入。您可以使用以下命令动态地减少 post-write-queue 的大小(即不需要重新启动),这里我建议 8 个块:
asinfo -v 'set-config:context=namespace;id=<NAMESPACE>;post-write-queue=8'
如果您对这个值感到满意,您应该修改 aerospike.conf
以包含它,以便它在节点重新启动后仍然存在。
我们在项目中使用了 aerospike 并发现了一个奇怪的问题。 我们有一个 3 节点集群,在某个节点重新启动后它停止工作。 所以,我们做测试来解释我们的问题
我们做测试集群。 3 个节点,复制计数 = 2
这是我们的命名空间配置
namespace test{
replication-factor 2
memory-size 100M
high-water-memory-pct 90
high-water-disk-pct 90
stop-writes-pct 95
single-bin true
default-ttl 0
storage-engine device {
cold-start-empty true
file /tmp/test.dat
write-block-size 1M
}
我们写入100Mb的测试数据之后就有这种情况
都很好:slight_smile:
但是我们停止了一个节点。迁移后我们看到可用 pct = 49% 和磁盘使用率 50%
Return 节点到集群,迁移后我们看到磁盘使用率变为之前的大约 32%,但是 旧节点上的可用 pct 保持在 49%
可用 pct = 31%
再重复一次我们得到那种情况 可用 pct = 0%
我们的集群崩溃了,客户端收到 AerospikeException:错误代码 8:服务器内存错误
那么我们如何清理可用的 pct?
如果你的 defrag-q
是空的(你可以看到它是否来自 grepping 日志)那么问题很可能是你的名字space 小于你的 post-写队列。 post-write-queue
上的块不符合碎片整理条件,因此您会看到 avail-pct
呈下降趋势,没有碎片整理以回收 space。默认情况下,post-write-queue
是 256 个块,因此在您的情况下相当于 256Mb。如果您的 namespace 小于该值,您将看到 avail-pct 继续下降,直到您点击停止写入。您可以使用以下命令动态地减少 post-write-queue 的大小(即不需要重新启动),这里我建议 8 个块:
asinfo -v 'set-config:context=namespace;id=<NAMESPACE>;post-write-queue=8'
如果您对这个值感到满意,您应该修改 aerospike.conf
以包含它,以便它在节点重新启动后仍然存在。