2015-01-17 17 views
10

Ich versuche, einen Remote-Mongodb-Server mit meinem Java-Projekt zu arbeiten.Fehler beim Herstellen einer Verbindung mit remote mongodb-Server

Ich benutze vagrant + ansible, um die Umgebung zu erstellen, aber fr soem reson kann ich keine Verbindung bekommen.

Ich bekomme immer Verbindung verweigert über das Netzwerk. Der gleiche Code auf localhost funktioniert einwandfrei.

ich vagrant Box bin mit: chef/centos-6.5

und meine ansible Aufgaben sind wie folgt:

- name: Download EPEL Repo 
    get_url: url=http://dl.fedoraproject.org/pub/epel/6/x86_64/epel- release-6-8.noarch.rpm dest=/tmp/epel-release-6-8.noarch.rpm 
- name: Install EPEL Repo 
    command: rpm -ivh /tmp/epel-release-6-8.noarch.rpm creates=/etc/yum.repos.d/epel.repo 
- name: Install libselinux-python 
    yum: name=libselinux-python 
- name: Create the repository for 10Gen 
    copy: src=10gen.repo.j2 dest=/etc/yum.repos.d/10gen.repo 
- name: Create the EPEL Repository. 
    copy: src=epel.repo.j2 dest=/etc/yum.repos.d/epel.repo 
- name: Create the GPG key for EPEL 
    copy: src=RPM-GPG-KEY-EPEL-6 dest=/etc/pki/rpm-gpg 
- name: Create the mongod user 
    user: name=mongod comment="MongoD" 
- name: Create the data directory for the namenode metadata 
    file: path={{ mongodb_datadir_prefix }} owner=mongod group=mongod state=directory 
- name: Install the mongodb package 
    yum: name={{ item }} state=installed 
    with_items: 
    - libselinux-python 
    - mongo-10gen 
    - mongo-10gen-server 
    - bc 
    - python-pip 
- name: Install the latest pymongo package 
    pip: name=pymongo state=latest use_mirrors=no 

ich die iptables Ausnahmen hinzugefügt haben:

sudo iptables -A INPUT -p tcp --dport 27017 -j ACCEPT 

das ist aktiv:

[[email protected] ~]# iptables -L -v 
Chain INPUT (policy ACCEPT 209 packets, 13148 bytes) 
pkts bytes target  prot opt in  out  source    destination 
1070 68777 ACCEPT  tcp -- any any  anywhere    anywhere   tcp dpt:27017 

mein Java-Code zu definieren MongoDbFactory

public @Bean 
MongoDbFactory mongoDbFactory() throws Exception { 
    MongoClient mongo = new MongoClient("<ip-of-machine>", 27017); 
    return new SimpleMongoDbFactory(mongo, "test"); 
} 

Aber ich die folgende Ausnahme immer erhalten, wenn es zu verbinden versucht.

Wenn ich mongodb von localhost ausführen und die IP entsprechend ändern, funktioniert alles gut. Zum einen

Dank

+0

Können Sie Telnet auf die Zieladresse und den Port? 'telnet 27017' –

+0

nein, das funktioniert nicht: MacBook-Pro: ~ me $ telnet 192.168.1.11:27017 192.168.1.11:27017: nodename noch servname zur verfügung gestellt, oder nicht bekannt. Ping funktioniert aber – Gleeb

+0

Das ist nicht richtig, verwenden Sie keinen Doppelpunkt zwischen Host und Port, wenn Sie Telnet verwenden. 'telnet 192.168.1.11 27017' –

Antwort

26

, um sicherzustellen, es ist nicht ein Firewall-Problem, stoppen IPTABLES auf beiden Servern (vergessen Sie nicht, danach wieder zu aktivieren).

Auf dem Computer, mit dem Sie eine Verbindung herstellen möchten, ssh direkt daran und sicherstellen, dass MongoDB ausgeführt wird, lokal verbinden und prüfen, ob Sie auf eine Datenbank zugreifen können.

MongoDB ist nicht zu akzeptieren Verbindungen von entfernten Rechnern standardmäßig so konfiguriert, können Sie diese Zeilen in Ihrer /etc/mongodb.conf Datei sicherzustellen haben:

bind_ip = 0.0.0.0 
port = 27017 

Stellen Sie sicher, MongoDB neu starten, nachdem Sie Änderungen vornehmen. Versuchen Sie dies und kommentieren Sie, wenn Ihre Probleme weiterhin bestehen, und ich werde die Antwort mit weiteren Vorschlägen aktualisieren.

EDIT: Ab Version 2.6 der Konfigurationsdatei-Format hat sich zu YAML geändert Details here, sollte die Datei auf /etc/mongod.conf befinden.

net: 
    bindIp: 0.0.0.0 
    port: 27017 
+3

Heilige Mutter Gottes, es war die Bind_ip. Ich danke dir sehr.! – Gleeb

+0

nett, froh zu helfen. Bitte stellen Sie sicher, iptables wieder aktivieren, wenn Sie es deaktiviert :) – Scriptable

+0

Stellen Sie sicher, dass Ihre MongoClient auf den richtigen Anschluss verbindet '27017' URL-Muster wie' mongodb sein: // localhost: 27017/my_database_name' 'Starten Sie den Service "auf Ubuntu' Dienst mongodb Neustart " – Abhijeet