2015-04-12 2 views
3

Я настраиваю кластер узлов elasticsearch на AWS. Кластер содержит 3 узла. Узлы находятся за ELB (балансировщик эластичной нагрузки). У ELB есть DNS-имя: «a.b.c.com».Эластичные поисковые узлы за балансировщиком нагрузки

Я могу успешно работать такие вещи, как:

curl -XGET 'http://a.b.c.com:9200/_cat/nodes' 

Это доказывает, что права доступа и маршруты работают должным образом.

Когда я пытаюсь подключить мой сервер приложений Java, чтобы он не Elasticsearch со следующей ошибкой:

org.elasticsearch.transport.ReceiveTimeoutTransportException: [][inet[a.b.c.com/172.31.27.110:9300]][cluster:monitor/nodes/info] request_id [57] timed out after [10000ms] 
     at org.elasticsearch.transport.TransportService$TimeoutHandler.run(TransportService.java:366) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
     at java.lang.Thread.run(Thread.java:745) 

Это происходит независимо от увеличения ли я client.transport.ping_timeout.

Java-код, который я использую для подключения выглядит следующим образом:

Settings settings = ImmutableSettings.settingsBuilder().put("cluster.name", clusterName).put("client.transport.ping_timeout", 10000).build(); 
    client = new TransportClient(settings); 
    TransportClient transportClient = (TransportClient)client; 
    transportClient.addTransportAddress(new InetSocketTransportAddress(instance, esPort)); 

экземпляр = "a.b.c.com" Esport = 9300 (я пытался 9200, а)

Thx заранее за помощь.

+0

Я столкнулся с той же проблемой. любые решения? –

+0

Я не помню, как я это решил, но теперь он работает :-(У вас есть одно и то же исключение? –

+0

Теперь, когда я думаю об этом, код, который я использую, точно такой же, как и выше. это, убедившись, что у меня есть правила для порта 9300. Поскольку завиток выше просто доказывает, что 9200 работает, а не 9300. –

ответ

1

здесь ответ на любой плохой самоанализ в будущем:

Вы получили свой узел ES работает на 9300, и вашу группу безопасности открыть на этот экземпляр, чтобы разрешить соединения с вашего сервера приложений.

Но у ELB есть свои группы безопасности. Поэтому вам нужно сделать это:

Установите SG на ELB, чтобы разрешить соединения с вашего сервера приложений. Установите SG на экземпляр ES, чтобы разрешить соединения с вашего ELB.

, а также установите SG на своих ES-экземплярах, чтобы разрешить трафик на 9300 от самих себя - как только они обнаруживают друг друга, они должны иметь возможность разговаривать сами с собой!

0

Является ли ELB настроенным для разрешения TCP? Java-клиенты используют TCP и по умолчанию ELB настроен только для HTTP. Вы можете изменить то же самое, следуя http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/elb-listener-config.html

+0

Да ELB правильно настроен с правилами TCP, а не HTTP. –

Смежные вопросы