2017-09-15 1 views
0

J'utilise apache-nifi, et il semble que je ne puisse pas me lier à une adresse lors du démarrage du serveur web, sauf si dans le fichier de configuration j'utilise le nom DNS public. L'utilisation de l'adresse IP à laquelle le nom DNS résout ne fonctionne pas. De même, l'utilisation d'un alias d'hôte affecté au /etc/hosts ne fonctionne pas. Dans chacun de ces cas, je vois dans le journal nifi une exception lancée par jetty, disant qu'il ne peut pas attribuer l'adresse demandée.nifi ne peut pas affecter l'adresse demandée

Il n'y a rien à écouter sur le port, comme vérifié avec netstat et par le fait que lorsque j'utilise le nom DNS, il n'y a pas de liaison d'erreur à l'adresse. Est-ce intentionnellement ou est-ce que je fais quelque chose de mal?

Voici les détails de ma config. (Je suis en train d'exécuter un cluster nifi, et le zookeeper intégré ne parvient pas à se lier sur l'adresse IP ou l'alias de l'hôte, mais fonctionne sur le nom DNS.Comme l'échec se produit si j'utilise un seul nœud nifi avec clustering off, je suis affiche simplement la configuration du serveur nifi.)

Le serveur nifi s'exécute sur une machine virtuelle dans un service de cloud avec un DNS public. Disons que le nom DNS public est "dns-abc", et il se résout à l'adresse 1.2.3.4.

Si je spécifie dans nifi.properties nifi.web.http.host=1.2.3.4, la liaison échoue. Si je spécifie nifi.web.http.host=dns-abc, il réussit. Alors j'ai créé une entrée dans /etc/hosts comme suit:

1.2.3.4 nifi-1 

et je nifi.web.http.host=nifi-1 spécifié dans nifi.properties, et encore une fois la liaison a échoué.

EDIT: Voici la trace de la pile

2017-09-18 01:02:30,610 WARN [main] org.apache.nifi.web.server.JettyServer Failed to start web server... shutting down. 
java.net.BindException: Cannot assign requested address 
     at sun.nio.ch.Net.bind0(Native Method) 
     at sun.nio.ch.Net.bind(Net.java:433) 
     at sun.nio.ch.Net.bind(Net.java:425) 
     at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223) 
     at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74) 
     at org.eclipse.jetty.server.ServerConnector.open(ServerConnector.java:298) 
     at org.eclipse.jetty.server.AbstractNetworkConnector.doStart(AbstractNetworkConnector.java:80) 
     at org.eclipse.jetty.server.ServerConnector.doStart(ServerConnector.java:236) 
     at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) 
     at org.eclipse.jetty.server.Server.doStart(Server.java:431) 
     at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68) 
     at org.apache.nifi.web.server.JettyServer.start(JettyServer.java:705) 
     at org.apache.nifi.NiFi.<init>(NiFi.java:160) 
     at org.apache.nifi.NiFi.main(NiFi.java:267) 
+0

pourriez-vous fournir l'erreur complète? – daggett

+0

J'ai modifié le message Question et ajouté la trace de la pile. – MidnightJava

+0

peut-être à l'intérieur de votre VM 'dns-abc' résolu à l'adresse IP différente? – daggett

Répondre

0

La machine virtuelle en cours d'exécution dans le nuage résout le nom DNS public pour lui-même à son adresse IP locale, et les serveurs en dehors de la machine virtuelle résoudre le même nom à IP publique de la machine virtuelle adresse. Comme la configuration doit spécifier une adresse IP locale à laquelle le serveur doit se lier et que les autres hôtes du cluster utiliseront le même nom de nœud configuré que l'adresse hôte à laquelle ils doivent se connecter à distance, cela fonctionne uniquement avec une résolution DNS similaire à ce.

J'ai modifié /etc/hosts sur chaque système pour résoudre son propre nom en tant qu'adresse IP locale et les autres hôtes du cluster en tant qu'adresse IP publique. Ensuite, j'ai été en mesure d'utiliser les noms d'hôtes de /etc/hosts pour tous les fichiers de configuration zookeeper et nifi. C'est ce que je recherchais, car les adresses IP changent lorsque la VM est redémarrée, et je n'ai besoin de les changer que dans un seul endroit sur chaque VM.