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。遗憾的是,目前没有针对此限制检查配置解析器,我无法在我们的文档中找到参考资料——这两个问题都已得到解决。

您可以改为使用多个文件来存储每个命名空间的数据(每个文件限制为 2TB)。正如在其他地方所讨论的,通过为给定的命名空间使用多个文件或设备,您可能会看到更好的性能。

于 2015-05-07T00:04:19.250 回答
0

阅读 Aerospike 手册,设备尺寸没有限制。仅适用于文件大小(最大 2TB)

手动的:

SSD 存储引擎的配方 SSD 命名空间的最低配置需要将 storage-engine 设置为 device 并为每个 SSD 添加一个设备参数以供此命名空间使用。此外,可能需要将内存大小从默认的 4GB 更改为适合预期主索引大小的大小。有关调整主索引大小的帮助,请参阅调整指南。为了提高性能,我们建议在 SSD 支持的命名空间上将写入块大小从默认的 1MB 减少到 128 Kb。

内存中数据的 HDD 存储引擎 的秘诀 具有 Data-in-Memory 命名空间的 HDD 的最低配置包括将 storage-engine 设置为 device,将 data-in-memory 设置为 true,最后提供文件参数列表以指示数据将被持久化的地方。此外,文件大小需要足够大以支持磁盘上的数据大小(最大允许值为 2 TiB)。最后,内存大小可能需要从默认的 4GB 调整为适合处理预期主索引大小和内存中数据的预期大小的大小。如需帮助调整文件大小或内存大小,请参阅我们的调整指南。

于 2015-05-18T15:52:38.807 回答