2016-05-25 2 views
1

私たちはプロジェクトで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%程度等しい状況

enter image description here 利用できるPCTとディスク使用量を持っている後100Mbのテストデータを書き込みます34%

すべて良い:slight_smile:

しかし、私たちは一つのノードを停止しました。移行後、我々は可能なのpct = 49%とディスクの使用率が50%

戻りノードをクラスタにいることを確認し、移行後に、私たちは、ディスク使用率が前回の約32%になったことがわかりますが、古いノード上利用できるPCTは49%

滞在します

enter image description here 停止ノード1つのより多くの時間

利用できるPCT = 31%

繰り返してもう一回、私たちはそのような状況に 利用できるPCT = 0%を取得し

私たちのクラスタがクラッシュし、クライアントがAerospikeExceptionを取得:エラーコード8:サーバのメモリエラー

私たちが利用できるのpctをきれいにすることができるので、どのように?

+0

あなたのログにdefrag-qをgrepして結果を投稿できますか? –

+0

私はあなたの名前空間がデフォルトのポスト書き込みキューに対して小さすぎると信じています。設定で0に設定してテストを繰り返してみてください。 – kporter

+0

kporterはおそらくそれを打ちました。デフォルトのポスト書き込みキューは、デバイスごとに256 x 1MB(書き込みブロックサイズ)になります。ポスト書込みキュー内のブロックのデフラグはできません。それを8またはそれ以上に小さくすると助けになるはずです。 – Meher

答えて

3

defrag-qが空の場合(ログがグロッピングされているかどうかを確認できます)、ネームスペースが書き込み後キューよりも小さい可能性があります。 post-write-queueのブロックは最適化対象外であるため、スペースを再利用するために、最適化を行わずにavail-pctの傾向が下がっていることがわかります。デフォルトではpost-write-queueは256ブロックなので、あなたの場合は256Mbに相当します。あなたの名前空間がそれよりも小さい場合は、avail-pctが表示されます。停止書き込みを押すまで、引き続きドロップします。この値に満足している場合は、あなたのaerospike.confに修正する必要があり

asinfo -v 'set-config:context=namespace;id=<NAMESPACE>;post-write-queue=8' 

を:あなたは、私が8つのブロックを提案し、ここで、次のコマンドを使用して(つまり、何の再起動は必要ありません)を動的ポストライト・キューのサイズを小さくすることができますノードを再始動した後も持続するようにします。

関連する問題