2015-01-17 27 views
10

Sto provando a creare un server mongodb remoto con cui lavorare con il mio progetto java.Impossibile connettersi al server mongodb remoto

Sto usando vagrante + ansible per creare l'ambiente, ma so che non riesco a ottenere una connessione.

Ricevo sempre la connessione rifiutata attraverso la rete. lo stesso codice su localhost funziona perfettamente.

Sto usando scatola vagabondo: chef/centos-6.5

ed i miei compiti ansible sono i seguenti:

- 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 

ho aggiunto le iptables eccezioni:

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

che è attivo:

[[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 

mio codice Java che definisce MongoDbFactory

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

ma ottengo sempre la seguente eccezione quando si tenta di connettersi ad esso.

com.mongodb.MongoTimeoutException: Timed out after 10000 ms while waiting for a server that matches AnyServerSelector{}. Client view of cluster state is {type=Unknown, servers=[{address=192.168.1.11:27017, type=Unknown, state=Connecting, exception={com.mongodb.MongoException$Network: Exception opening the socket}, caused by {java.net.ConnectException: Connection refused}}] 

se corro MongoDB da localhost e cambiare l'IP di conseguenza, tutto funziona bene.

Grazie

+0

Si può telnet per l'indirizzo di destinazione e la porta? 'telnet 27017' –

+0

no, questo non funziona: MacBook-Pro: ~ me $ telnet 192.168.1.11:27017 192.168.1.11:27017: nomenodo e nomeserver forniti o non noti. Ping funziona anche se – Gleeb

+0

Non è giusto, non utilizzare i due punti tra host e porta quando si utilizza Telnet. 'telnet 192.168.1.11 27017' –

risposta

26

In primo luogo, per garantire il suo non è un problema di firewall, si fermano IPTABLES su entrambi i server (non dimenticate di riattivare in seguito).

Sulla macchina alla quale si sta tentando di connettersi, ssh direttamente su di essa e assicurarsi che MongoDB sia in esecuzione, connettersi localmente e controllare che sia possibile accedere a un DB.

MongoDb non è configurato per l'accesso ad host remoti per impostazione predefinita, potrebbe assicurarsi di avere queste righe nel file /etc/mongodb.conf:

bind_ip = 0.0.0.0 
port = 27017 

assicurarsi di riavviare MongoDB dopo aver apportato le modifiche. Prova questo e commenta se hai ancora problemi e aggiornerò la risposta con altri suggerimenti.

EDIT: A partire dalla versione 2.6 del formato di file di configurazione è cambiato a YAML, dettagli here, il file deve essere posizionato a /etc/mongod.conf.

net: 
    bindIp: 0.0.0.0 
    port: 27017 
+3

Santa madre di dio era il bind_ip. Grazie mille.! – Gleeb

+0

simpatico, felice di aiutare. Assicurarsi di riattivare iptables se disattivato it :) – Scriptable

+0

Assicurarsi che il MongoClient si connette sulla porta corretta '27017' modello URL essere come' mongodb: // localhost: 27017/my_database_name' 'Riavviare il servizio' su Ubuntu 'servizio mongodb restart' – Abhijeet

Problemi correlati