В моей тестовой установки на EC2 я сделал следующее:Aerospike на EC2
- Один сервер Aerospike работает в ZoneA (скажем, Aerospike-A).
- Другой узел того же кластера работает в ZoneB (скажем, Aerospike-B).
- Приложение, использующее вышеуказанный кластер, работает в ZoneA.
Я инициализация AerospikeClinet так:
hosts= new Host[]; hosts[0] = new Host(PUBLIC_IP_OF_AEROSPIKE-A, 3000); AerospikeClient client = new AerospikeClient(policy, hosts);
С выше настройками я получаю ниже поведения:
- Пишет происходят как на Aerospike-A и Aerospike-B.
читает только происходит на Aerospike-A (данные около 1 млн записей, занимая 900MB памяти и 1,3 Гб диска)
Question: Why are reads not going to both the nodes?
- Если я Aerospike-B вниз, все работает отлично. Нет простоя.
Если я возьму 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?
Как вы знаете, что записи собираются Aerospike-B от клиента? Aerospike сервер может выполнять внутренний прокси-сервер для других узлов и может создавать там объекты. Но это не означает, что клиент может писать в Aerospike-B. Я предполагаю, что клиент не может связаться с Aerospike-B. – sunil
Я использовал 'clmonitor' для проверки' latency'. Я добавил, что 'Host' для массива Host при инициализации клиента, и теперь все работает нормально! – amdalal
Вам не нужно добавлять хосты в массив. Аэросик-клиент должен иметь возможность обнаруживать все узлы кластера, если все в порядке. После этого чтение/запись должно идти к обоим узлам. – sunil