2013-10-11 3 views
1

В моей тестовой установки на EC2 я сделал следующее:Aerospike на 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 (данные около 1 млн записей, занимая 900MB памяти и 1,3 Гб диска)

    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? 
    
+0

Как вы знаете, что записи собираются Aerospike-B от клиента? Aerospike сервер может выполнять внутренний прокси-сервер для других узлов и может создавать там объекты. Но это не означает, что клиент может писать в Aerospike-B. Я предполагаю, что клиент не может связаться с Aerospike-B. – sunil

+0

Я использовал 'clmonitor' для проверки' latency'. Я добавил, что 'Host' для массива Host при инициализации клиента, и теперь все работает нормально! – amdalal

+1

Вам не нужно добавлять хосты в массив. Аэросик-клиент должен иметь возможность обнаруживать все узлы кластера, если все в порядке. После этого чтение/запись должно идти к обоим узлам. – sunil

ответ

1

В EC2 вы должны разместить все узлы кластера в том же AZ одного и того же региона. You может использовать функцию rack awareness для настройки узлов в двух отдельных AZ, однако вы будете платить latency hit на каждую вашу запись.

Теперь, что вы видите likely due to misconfiguration. Каждая машина EC2 имеет открытый IP-адрес и локальный IP-адрес. Машины, расположенные в одной подсети, могут обращаться друг к другу через локальный IP-адрес, но машина из другого АЗ не может. Вы должны убедиться, что ваш access-address настроен на общедоступный IP-адрес, если ваши узлы кластера распределены в двух зонах доступности. В противном случае у вас есть клиенты, которые могут достигнуть некоторых узлов, много прокси-событий, поскольку узлы кластера пытаются компенсировать и перемещать ваши чтения и записи на правильный узел для вас, а также странные проблемы с данными на узлах, выходящих или входящих в кластер.

Для получения более подробной информации: