Назад | Перейти на главную страницу

Нет маршрута для размещения исключения elasticsearch

При включении elasticsearch я получаю следующую ошибку конфигурации:

[2015-04-21 20:49:45,635][INFO ][discovery.zen            ] [Blackwulf] failed to send join request to master [[Conquistador][HzGNMjroRCuoHsoTyI3zag][elastic02][inet[/10.70.121.114:9300]]], reason [RemoteTransportException[[Conquistador][inet[/10.70.121.114:9300]][internal:discovery/zen/join]]; nested: NotSerializableTransportException[[org.elasticsearch.transport.ConnectTransportException] [Blackwulf][inet[/10.70.112.23:9300]] connect_timeout[30s]; No route to host; ]; ]

Несмотря на то, что хост доступен через telnet:

[root@elastic05 ~]# telnet 10.70.121.114 9300
Trying 10.70.121.114...
Connected to 10.70.121.114.
Escape character is '^]'.
^]
telnet> quit
Connection closed.
[root@elastic05 ~]# telnet 10.70.121.114 9200
Trying 10.70.121.114...
Connected to 10.70.121.114.
Escape character is '^]'.
^]
telnet> quit
Connection closed.

Я также получаю, что даже локальный хост не может найти маршрут при загрузке:

[2015-04-21 20:24:18,291][INFO ][node                     ] [Ezekiel Stane] version[1.4.1], pid[1347], build[89d3241/2014-11-26T15:49:29Z]
[2015-04-21 20:24:18,292][INFO ][node                     ] [Ezekiel Stane] initializing ...
[2015-04-21 20:24:18,306][INFO ][plugins                  ] [Ezekiel Stane] loaded [cloud-aws], sites []
[2015-04-21 20:24:21,558][INFO ][node                     ] [Ezekiel Stane] initialized
[2015-04-21 20:24:21,558][INFO ][node                     ] [Ezekiel Stane] starting ...
[2015-04-21 20:24:21,684][INFO ][transport                ] [Ezekiel Stane] bound_address {inet[/0.0.0.0:9300]}, publish_address {inet[/10.70.112.23:9300]}
[2015-04-21 20:24:21,696][INFO ][discovery                ] [Ezekiel Stane] elasticsearch/f5p3lsxyTfukHZ2E8_G4vQ
[2015-04-21 20:24:21,737][WARN ][transport.netty          ] [Ezekiel Stane] exception caught on transport layer [[id: 0x3d524f37]], closing connection
java.net.NoRouteToHostException: No route to host
        at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
        at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:739)
        at org.elasticsearch.common.netty.channel.socket.nio.NioClientBoss.connect(NioClientBoss.java:152)
        at org.elasticsearch.common.netty.channel.socket.nio.NioClientBoss.processSelectedKeys(NioClientBoss.java:105)
        at org.elasticsearch.common.netty.channel.socket.nio.NioClientBoss.process(NioClientBoss.java:79)
        at org.elasticsearch.common.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:318)
        at org.elasticsearch.common.netty.channel.socket.nio.NioClientBoss.run(NioClientBoss.java:42)
        at org.elasticsearch.common.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108)
        at org.elasticsearch.common.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:42)

У меня есть хосты, перечисленные в elasticsearch.yml для подключения через одноадресную, а не многоадресную рассылку (которую я отключил).

Дайте название своему кластеру, и проблема будет решена.

редактировать config/elasticsearch.yml в вашем каталоге elasticsearch.

Раскомментировать cluster.name: elasticsearch и измените его на что-то вроде cluster.name: your_hostname

Затем попробуйте снова запустить elasticsearch.

No route to host в наши дни часто может означать, что вы получаете сообщение ICMP, запрещенное администрацией, т.е. вам отказывает брандмауэр.

Из того, что я видел, они особенно распространены в системах Red Hat, но я надеюсь, что вы увидите их и в других местах.

Это упрощает процесс отличия от отказа в подключении (что просто означает, что ничего не слушает или что соединение было сброшено - возможно, брандмауэром).

Вы можете проверить это с помощью tcpdump -p -nn icmp или подобное, и при подключении ищите сообщения ICMP, запрещенные администрацией.

Какова его ценность, причина, по которой вы получаете очень тупой No route to host вместо чего-то более понятного двоякое:

  • Сообщение ICMP Administratively Prohibited является частью (IIRC) недоступного кодового пространства в ICMP;
  • Коды ошибок зафиксированы в API Berkeley Sockets, у которого нет других полезных ошибок (например, errno), с которыми можно было бы сопоставить их.

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