【问题标题】:Aerospike - command execution timed out on clientAerospike - 客户端上的命令执行超时
【发布时间】: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

标签: aerospike aerospike-ce


【解决方案1】:

很有可能您的集群没有正确形成,或者它的网络设置不正确,无法让客户端访问所有节点。由于您使用的是 Docker,请查看 Lucien 的 Medium 帖子 How do I get a 2 nodes Aerospike cluster running quickly in Docker without editing a single file?

【讨论】:

  • 他正在使用单个节点进行测试。
  • 似乎客户端无法与服务器通信,这意味着网络问题。
  • 在循环中存储记录时,经过几次迭代,通信失败。前四五条记录毫无问题地存储在数据库中。
  • 请打开一个问题github.com/aerospike/aerospike-client-go。人们在生产中非常密集地使用这个客户端,所以有些事情发生了,但不知道是什么。添加代码示例、输出而不是您的服务器版本、客户端版本、客户端和服务器上的操作系统。这是个谜
  • 我的数据中的时间格式可能会导致一些问题。仍在调查中。
猜你喜欢
  • 1970-01-01
  • 2010-10-30
  • 1970-01-01
  • 1970-01-01
  • 2018-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-01
相关资源
最近更新 更多