2

aerospike クラスターにデータを書き込む際に奇妙な問題が発生しました

aql> insert into storebig.Chunks (PK,Data) values ('5cb138284d431abd6a053a56625ec088bfb88912', '1234567890')                                                          
OK, 1 record affected.

aql> select * from storebig.Chunks where PK = '5cb138284d431abd6a053a56625ec088bfb88912'
Error: (2) AEROSPIKE_ERR_RECORD_NOT_FOUND

aql> insert into storebig.Chunks (PK,Data) values ('5cb138284d431abd6a053a56625ec088bfb88912', '1234567890')
Error: (1) AEROSPIKE_ERR_SERVER

golang クライアント ライブラリと同じ話 (もちろん)

クラスターが正常ではない可能性が非常に高く、サーバー ログにいくつかの奇妙なメッセージが表示されます。

May 06 2015 12:17:49 GMT: WARNING (drv_ssd): (drv_ssd.c::1236) read: read wrong key: expecting de6f0bc93bfdf560 got 8ad3dd7fce1ac7ec
May 06 2015 12:17:49 GMT: WARNING (drv_ssd): (drv_ssd.c::1236) read: read wrong key: expecting de6f0bc93bfdf560 got 8ad3dd7fce1ac7ec
May 06 2015 12:17:50 GMT: WARNING (drv_ssd): (drv_ssd.c::1230) read: bad block magic offset 29843600384
May 06 2015 12:17:50 GMT: WARNING (drv_ssd): (drv_ssd.c::1230) read: bad block magic offset 29843600384

私の質問は、状況を調査し、デバッグして回復するにはどうすればよいですか? どこを見て、何を試しますか?

ありがとうございました。

敬具、ダニエル・ポドルスキー

アップデート

構成テンプレート (docker コンテナーの開始時にこのテンプレートから生成された実際の構成)

service {
  user root
  group root
  paxos-single-replica-limit 1
  pidfile /var/run/aerospike/asd.pid
  service-threads 4
  transaction-queues 4
  transaction-threads-per-queue 4
  proto-fd-max 15000
}

logging {
  file /storage/logs/aerospike.log {
    context any info
  }
  console {
    context any info
  }
}
network {
  service {
    address <%=os.getenv("NODE_EXT_ADDR")%>
    port 3000
  }
  fabric {
    address <%=os.getenv("NODE_INT_ADDR")%>
    port 3001
  }
  heartbeat {
    mode multicast
    address 239.1.99.2
    port 9918
    interface-address <%=os.getenv("NODE_INT_ADDR")%> interval 150
    timeout 10
  }
  info {
    address <%=os.getenv("NODE_INT_ADDR")%>
    port 3003
  }
}
namespace storebig {
  replication-factor 3
  memory-size <%=os.getenv("MEM_USE_BIG")%>K
  default-ttl 0
  high-water-disk-pct   98
  high-water-memory-pct 98
  stop-writes-pct       95
  storage-engine device {
    file /storage/data/big.dat
    filesize 3T
    data-in-memory false
  }
}
namespace storefast {
  replication-factor 3
  memory-size <%=os.getenv("MEM_USE_FAST")%>K
  default-ttl 0
  high-water-disk-pct   98
  high-water-memory-pct 98
  stop-writes-pct       95
  storage-engine device {
    file /storage/data/fast.dat
    filesize <%=os.getenv("MEM_USE_FAST")%>K
    data-in-memory true
  }
}
namespace storetest {
  replication-factor 3
  memory-size <%=os.getenv("MEM_USE_FAST")%>K
  default-ttl 0
  high-water-disk-pct   98
  high-water-memory-pct 98
  stop-writes-pct       95
  storage-engine device {
    file /storage/data/test.dat
    filesize 3T
    data-in-memory false
  }
}
4

2 に答える 2

2

あなたの設定を読んだ後、私はあなたの問題を見つけたと思います. Aerospike の個々のデバイスとファイルは 2TiB を超えることはできず、3TiB に構成されています。残念ながら、現在、この制限に対する構成パーサーのチェックインはなく、ドキュメントで参照を見つけることができません。これらの問題は両方とも対処中です。

代わりに、複数のファイルを使用して各名前空間のデータを保存できます (各ファイルは 2 TB に制限されています)。他の場所で説明したように、特定の名前空間に複数のファイルまたはデバイスを使用すると、パフォーマンスが向上する可能性があります。

于 2015-05-07T00:04:19.250 に答える
0

Aerospike のマニュアルを読むと、デバイスのサイズに制限はありません。ファイルサイズのみ(最大2TB)

マニュアル:

SSD ストレージ エンジンのレシピ SSD 名前空間の最小構成では、ストレージ エンジンをデバイスに設定し、この名前空間で使用される各 SSD のデバイス パラメータを追加する必要があります。さらに、memory-size をデフォルトの 4GB から予想されるプライマリ インデックス サイズに適したサイズに変更する必要がある場合があります。プライマリ インデックスのサイジングについては、サイジング ガイドを参照してください。パフォーマンスのために、SSD でバックアップされた名前空間で write-block-size をデフォルトの 1 MB から 128 Kb に減らすことをお勧めします。

Data-in-Memory 名前空間を使用する HDD ストレージ エンジンのレシピ Data-in-Memory 名前空間を使用する HDD の最小構成には、storage-engine をデバイスに設定し、data-in-memory を true に設定し、最後に指定するファイル パラメータのリストを提供する必要があります。データが永続化される場所。また、ファイルサイズは、ディスク上のデータのサイズをサポートするのに十分な大きさである必要があります (最大許容値は 2 TiB)。最後に、memory-size をデフォルトの 4GB から、予期されるプライマリ インデックス サイズとメモリ内のデータの予期されるサイズを処理するのに適切なサイズに調整する必要がある場合があります。ファイル サイズまたはメモリ サイズのサイジングについては、サイジング ガイドを参照してください。

于 2015-05-18T15:52:38.807 に答える