【发布时间】:2020-02-13 19:52:54
【问题描述】:
使用以下代码在 Aerospike 中加载数据。 data 是 BinMap 类型的地图列表
for _, binMap := range data {
id, ok := binMap["id"].(string)
key, _ := as.NewKey("test", "myset", id)
err := shared.Client.Put(nil, key, binMap)
if err !=nil {
fmt.Println(err)
}
加载几条记录后,收到以下错误消息。
command execution timed out on client: Exceeded number of retries.
See `Policy.MaxRetries`. (last error: Node not found for partition
test:711 in partition table.)
对于每次迭代,分区测试编号都会发生变化。 即使在每个 Put 命令后等待 5 秒后,该错误仍然存在。我不确定错误消息中报告了什么超时。go 客户端需要什么客户端配置?
使用 MacOs 10.15.3;去客户端; Aerospike 在 docker 2.2.0.3 上运行
【问题讨论】:
-
您的客户端未成功连接到 Aerospike 集群的所有“节点” - 每个节点都将其分区所有权发送给客户端。有4K分区。每条记录都属于一个唯一的分区 ID。所以客户端一直在尝试写入上面711分区所有者的节点,重试后放弃。
-
我正在运行单节点集群。只是按照这里的指示:aerospike.com/docs/operations/install/vagrant/mac/index.html。是否需要多节点安装?
-
不,不需要多节点集群。单节点集群很好。所以你正在失去从客户端到节点的连接。这又可能与 docker 相关。
-
看来go客户端搞砸了。我无法执行任何读/写操作。如果我重新启动应用程序(去客户端),我可以执行读/写。是在循环中执行写操作搞砸了 go 客户端。
-
“搞砸了”是一种概括。很多与 Aerospike 交互的常用应用程序都是用 Go 编写的,包括 Snapchat 的服务。所以 Go 客户端肯定可以工作。如果可以重现问题,请在 repo 中打开一个错误:github.com/aerospike/aerospike-client-go