1

EC2 でのテスト セットアップでは、次のことを行いました。

  1. 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 万レコードで、900 MB のメモリと 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 に配置する必要があります。ラック認識機能使用して 2 つの別々の AZ にノードを設定できますが、書き込みごとにレイテンシーヒットが発生します。

今あなたが見ているのは、設定ミスが原因である可能性があります。各 EC2 マシンには、パブリック IP とローカル IP があります。同じサブネットにあるマシンは、ローカル IP を介して相互にアクセスできますが、別の AZ のマシンはできません。access-addressクラスター ノードが 2 つのアベイラビリティー ゾーンに分散している場合は、パブリック IP に設定されていることを確認する必要があります。そうしないと、一部のノードに到達できるクライアントがあり、クラスターノードが読み取りと書き込みを補正して正しいノードに移動しようとするため、多くのプロキシイベントが発生し、ノードがクラスターを離れたり参加したりするとデータに奇妙な問題が発生します。

詳細については:

于 2015-08-03T19:57:53.877 に答える