2015-01-17 5 views
10

Я пытаюсь создать удаленный сервер mongodb для работы с моим проектом java.Не удалось подключиться к удаленному серверу mongodb

Я использую vagrant + ansible для создания среды, но fr soem reson я не могу получить соединение.

Я всегда получаю отказ в сети. тот же код на localhost отлично работает.

Я использую бродячую поле: chef/centos-6.5

и мои анзибль задачи заключаются в следующем:

- 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 

я добавил IPtables исключения:

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

, который является активный:

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

мой Java код, определяющий MongoDbFactory

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

Но я всегда получаю следующее исключение при попытке подключиться к нему.

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}}] 

Если я запустил mongodb из localhost и изменил ip соответственно, все будет хорошо.

Благодаря

+0

Можете ли вы установить telnet на целевой адрес и порт? 'telnet 27017' –

+0

нет, это не работает: MacBook-Pro: ~ me $ telnet 192.168.1.11:27017 192.168.1.11:27017: nodename или servname предоставлено или неизвестно. Ping работает, хотя – Gleeb

+0

Неправильно, не используйте двоеточие между хостом и портом при использовании telnet. 'telnet 192.168.1.11 27017' –

ответ

26

Во-первых, для того чтобы обеспечить его не проблема брандмауэра, остановка Iptables на обоих серверах (не забудьте снова включить после этого).

На машине, к которой вы пытаетесь подключиться, ssh непосредственно к ней и обеспечить работу MongoDB, подключиться локально и проверить доступ к базе данных.

MongoDb не настроен на прием подключений с удаленных хостов по умолчанию, вы могли бы обеспечить вам эти строки в файле /etc/mongodb.conf:

bind_ip = 0.0.0.0 
port = 27017 

Убедитесь перезапуском MongoDB после внесения каких-либо изменений. Попробуйте это и прокомментируйте, если у вас все еще есть проблемы, и я обновлю ответ с дополнительными предложениями.

EDIT: В версии 2.6 формат файла конфигурации изменился на YAML, детали here, файл должен быть расположен в /etc/mongod.conf.

net: 
    bindIp: 0.0.0.0 
    port: 27017 
+3

Святая мать бога это было bind_ip. Огромное спасибо.! – Gleeb

+0

милый, рад помочь. Пожалуйста, убедитесь, что вы включите IPTables, если вы отключили его :) – Scriptable

+0

Убедитесь, что ваш MongoClient подключается на правильный порт '27017' URL структуропостроения как' MongoDB: // локальный: 27017/my_database_name' 'Перезагрузка service' on Ubuntu 'service mongodb restart' – Abhijeet

Смежные вопросы