私たちはプロジェクトでaerospikeを使用し、奇妙な問題を捉えました。 3つのノードクラスタがあり、あるノードの再起動後に動作を停止します。 そこで、問題を説明するテストを行います。Aerospikeクラスタは利用可能なブロックをクリーニングしていません
テストクラスタを作成します。 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
}
である私たちは、およそその66%程度等しい状況
利用できるPCTとディスク使用量を持っている後100Mbのテストデータを書き込みます34%
すべて良い:slight_smile:
しかし、私たちは一つのノードを停止しました。移行後、我々は可能なのpct = 49%とディスクの使用率が50%
戻りノードをクラスタにいることを確認し、移行後に、私たちは、ディスク使用率が前回の約32%になったことがわかりますが、古いノード上利用できるPCTは49%
滞在します利用できるPCT = 31%
繰り返してもう一回、私たちはそのような状況に 利用できるPCT = 0%を取得し
私たちのクラスタがクラッシュし、クライアントがAerospikeExceptionを取得:エラーコード8:サーバのメモリエラー
私たちが利用できるのpctをきれいにすることができるので、どのように?
あなたのログにdefrag-qをgrepして結果を投稿できますか? –
私はあなたの名前空間がデフォルトのポスト書き込みキューに対して小さすぎると信じています。設定で0に設定してテストを繰り返してみてください。 – kporter
kporterはおそらくそれを打ちました。デフォルトのポスト書き込みキューは、デバイスごとに256 x 1MB(書き込みブロックサイズ)になります。ポスト書込みキュー内のブロックのデフラグはできません。それを8またはそれ以上に小さくすると助けになるはずです。 – Meher