Не удалось подключиться к удаленному серверу mongodb
Я пытаюсь создать удаленный сервер mongodb для работы с моим проектом java.
Я использую vagrant + ansible для создания среды, но fr soem reson я не могу получить соединение.
Я всегда получаю отказ в подключении через сеть. тот же код на локальном хосте отлично работает.
Я использую бродячий бокс: 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 соответственно, все работает нормально.
Спасибо
Ответы
Ответ 1
Во-первых, для того, чтобы исключить проблему с брандмауэром, остановите IPTABLES на обоих серверах (не забудьте снова включить их позже).
На машине, к которой вы пытаетесь подключиться, ssh прямо к ней и убедитесь, что MongoDB запущен, подключитесь локально и убедитесь, что вы можете получить доступ к базе данных.
MongoDb не настроен на прием соединений с удаленных хостов по умолчанию, вы могли бы убедиться, что у вас есть эти строки в вашем файле /etc/mongodb.conf
:
bind_ip = 0.0.0.0
port = 27017
Обязательно перезагрузите MongoDB после внесения любых изменений. Попробуйте это и прокомментируйте, если у вас все еще есть проблемы, и я добавлю дополнительные ответы.
EDIT:. Начиная с версии 2.6 формат файла конфигурации изменился на YAML, подробнее здесь, файл должен располагаться в /etc/mongod.conf
.
net:
bindIp: 0.0.0.0
port: 27017