2015-01-17 26 views
10

Próbuję utworzyć zdalny serwer mongodb do pracy z moim projektem java.Nie można połączyć się ze zdalnym serwerem mongodb

Używam vagrant + ansible do tworzenia środowiska, ale po to reem nie mogę uzyskać połączenia.

Zawsze otrzymuję odmowę połączenia przez sieć. ten sam kod na localhost działa doskonale.

Używam Vagrant nadwozia: chef/centos-6.5

i moi ansibl zadania są następujące:

- 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 

Dodałem iptables wyjątki:

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

co jest aktywny:

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

mój kod Java definiowania MongoDbFactory

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

ale zawsze pojawia się następujący wyjątek, gdy próbuje się z nim połączyć.

Jeśli uruchomię mongodb z localhost i odpowiednio zmienię IP, wszystko działa poprawnie.

Dzięki

+0

Czy można telnetować na adres docelowy i port? 'telnet 27017' –

+0

nie, to nie działa: MacBook-Pro: ~ ja $ telnet 192.168.1.11:27017 192.168.1.11:27017: nazwa_węzła ani nazwa_serwera podana, lub nieznana. Ping działa mimo to – Gleeb

+0

To nie jest w porządku, nie używaj dwukropka między hostem a portem podczas używania telnetu. 'telnet 192.168.1.11 27017' –

Odpowiedz

26

Po pierwsze, w celu zapewnienia jej nie problem zapory, stop iptables na obu serwerach (nie zapomnij, aby ponownie włączyć później).

Na komputerze, z którym próbujesz się połączyć, ssh bezpośrednio do niego i upewnij się, że działa MongoDB, Połącz lokalnie i sprawdź, czy masz dostęp do bazy danych.

MongoDB nie jest skonfigurowany do akceptowania połączeń ze zdalnymi hostami domyślnie, można upewnić się, że te linie w pliku /etc/mongodb.conf:

bind_ip = 0.0.0.0 
port = 27017 

upewnij się, że ponowne uruchomienie MongoDB po dokonaniu jakichkolwiek zmian. Wypróbuj to i skomentuj, jeśli nadal masz problemy, a ja zaktualizuję odpowiedź, dodając kolejne sugestie.

EDIT: W wersji 2.6 Format pliku config zmienił się YAML, szczegóły here, plik powinien znajdować się w /etc/mongod.conf.

net: 
    bindIp: 0.0.0.0 
    port: 27017 
+3

Święta matka Boga, to było bind_ip. Dziękuję bardzo.! – Gleeb

+0

miło, Cieszę się, że pomógł. Należy upewnić się, ponownie włączyć iptables jeśli niepełnosprawne to :) – Scriptable

+0

Upewnij się, że MongoClient łączy na odpowiednim porcie '27017' URL deseniu jak' MongoDB: // localhost: 27017/my_database_name' 'Uruchom ponownie service' on Ubuntu 'service mongodb restart' – Abhijeet

Powiązane problemy