1

在我在 EC2 上的测试设置中,我完成了以下操作:

  1. 一个 Aerospike 服务器正在 ZoneA 中运行(比如 Aerospike-A)。
  2. 同一集群的另一个节点正在 ZoneB 中运行(例如 Aerospike-B)。
  3. 使用上述集群的应用程序正在 ZoneA 中运行。
  4. 我正在像这样初始化 AerospikeClinet:

    hosts= new Host[];
    hosts[0] = new Host(PUBLIC_IP_OF_AEROSPIKE-A, 3000);
    AerospikeClient client = new AerospikeClient(policy, hosts);
    

通过上述设置,我得到以下行为:

  1. Aerospike-A 和 Aerospike-B 上都发生了写操作。
  2. 仅在 Aerospike-A 上进行读取(数据大约 100 万条记录,占用 900MB 内存和 1.3 GB 磁盘)

    Question: Why are reads not going to both the nodes?
    
  3. 如果我把 Aerospike-B 拿下来,一切都会完美无缺。没有中断。
  4. 如果我关闭 Aerospike-A,所有的写入和读取都开始失败。我已经等了 5 分钟让其他节点占用流量,但它没有用。

    Questions: 
    a. In above scenario, I would expect Aerospike-B to take all the traffic. But this is not happening. Is there anything I am doing wrong?
    b. Should I be giving both the hosts while initializing the client?
    c. I had executed "clinfo -v 'config-set:context=service;paxos-recovery-policy=auto-dun-all'" on both the nodes. Is that creating a problem?
    
4

1 回答 1

1

在 EC2 中,您应该将集群的所有节点放在同一区域的同一 AZ 中。您可以使用机架感知功能在两个单独的 AZ 中设置节点,但是您将支付每次写入的延迟时间。

现在您看到的可能是由于配置错误。每台 EC2 机器都有一个公共 IP 和一个本地 IP。位于同一子网上的机器可以通过本地 IP 相互访问,但来自不同 AZ 的机器不能。access-address如果您的集群节点分布在两个可用区中,您需要确保将您的 IP 设置为公共 IP。否则,您有可以访问某些节点的客户端,大量代理事件,因为集群节点会尝试补偿并将您的读写移动到正确的节点,以及节点离开或加入集群时数据的奇怪问题。

更多细节:

于 2015-08-03T19:57:53.877 回答