MongoDB работает, но не может подключиться с помощью оболочки - PullRequest
36 голосов
/ 31 октября 2011

CentOS 5.x Linux с MongoDB 2.0.1 (пробовал main и legacy-static)

MongoDB работает:

root     31664  1.5  1.4  81848 11148 ?        Sl   18:40   0:00 ./mongod -f mongo.conf -vvvvv --fork

Использование простой оболочки для подключения к серверу завершается неудачно:

[root@xxxx bin]# ./mongo
MongoDB shell version: 2.0.1
connecting to: test
Mon Oct 31 18:41:32 Error: couldn't connect to server 127.0.0.1 shell/mongo.js:84
exception: connect failed

Веб-интерфейс на порту 28017 загружается нормально, как и при использовании оболочки MongoDB с удаленного хоста Linux. Может также telnet к localhost: 27017, что означает, что никакие порты не заблокированы. На этой машине также не работает SELinux. Я также попытался явно указать localhost:2017/db безрезультатно.

$ ./mongo remote-ip:27017
MongoDB shell version: 2.0.1
connecting to: remote-ip:27017/test
> show dbs
local   0.03125GB
>

Журналы полностью мамы по теме:

.....
Mon Oct 31 18:40:34 [initandlisten] fd limit hard:1024 soft:1024 max conn: 819
Mon Oct 31 18:40:34 [initandlisten] waiting for connections on port 27017
Mon Oct 31 18:40:34 BackgroundJob starting: snapshot
Mon Oct 31 18:40:34 BackgroundJob starting: ClientCursorMonitor
Mon Oct 31 18:40:34 BackgroundJob starting: PeriodicTask::Runner
Mon Oct 31 18:40:34 [websvr] fd limit hard:1024 soft:1024 max conn: 819
Mon Oct 31 18:40:34 [websvr] admin web console waiting for connections on port 28017

Определение клиента оболочки mongo показывает только один проблемный вызов:

[pid 31708] connect(4, {sa_family=AF_INET, sin_port=htons(27017), sin_addr=inet_addr("127.0.0.1")}, 16) = -1 EBADF (Bad file descriptor)

Файловая система чистая, без ограничений ulimit (работает как root для тестирования). Из строки сразу видно, что mongo клиент пытается подключиться через TCP (AF_INET), но, поскольку он локальный и MongoDB создает файловый сокет, есть ли способ сказать клиенту подключиться через него? Или, еще лучше, почему клиент выбрасывает EBADF?

РЕДАКТИРОВАТЬ: мой основной монго конф:

dbpath=/root/mongodb-linux-i686-2.0.1/data
logpath=/root/mongodb-linux-i686-2.0.1/logs/mongo.log
slowms=15
rest=1

Ответы [ 17 ]

1 голос
/ 12 декабря 2012

Возникла та же проблема с ошибкой, описанной Гарреттом выше. 1. Сервер MongoDB с включенным ведением журнала работает, как видно из команды ps 2. Клиент Mongo или драйвер Mongoose не могут подключиться к базе данных.

Решение: 1. Удаление файла Mongo.lock, кажется, возвращает жизнь к нормальному состоянию на сервере CentOS. 2. Мы довольно новы в запуске MongoDB на производстве и уже несколько раз в неделю сталкиваемся с одной и той же проблемой. 3. Мы настроили расписание cron для регулярной очистки файла блокировки и информирования администратора об инциденте.

Поиск исправления ошибки для этой проблемы или любой другой, более постоянный способ ее устранения.

0 голосов
/ 14 июня 2019

Если версия вашего сервера mongoDB (удаленного сервера) превышает 4.0.3, то вы столкнетесь с этой проблемой. Следовательно, вы должны заменить вашу текущую оболочку mongo-client ниже mongo:

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/4.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list
sudo apt-get update
sudo apt-get install -y mongodb-org

Тогда ваш клиент mongo сможет подключить ваш удалить mongodb

0 голосов
/ 27 ноября 2013

После запуска mongod

$mongod --dbpath <db name>

для получения оболочки

$mongo --shell
0 голосов
/ 26 марта 2013

в Ubuntu:

Ср. 27 января 10:21:32 Ошибка: не удалось подключиться к серверу 127.0.0.1 shell / mongo.js: 84 исключение: ошибка подключения

Решение

проверьте, работает ли mongodb, с помощью следующей команды:

ps -ef | grep mongo

Если монго не работает, вы получите:

 vimal     1806  1698  0 10:11 pts/0    00:00:00 grep --color=auto mongo

Вы видите, что демона Монго там нет.

Затем запустите его через файл конфигурации (с root priev):

root@vimal:/data# mongod --config /etc/mongodb.conf &
[1] 2131
root@vimal:/data# all output going to: /var/log/mongodb/mongodb.log

Вы можете увидеть другие детали:

root@vimal:~# more /etc/mongodb.conf

Откройте новый терминал, чтобы увидеть результат mongod --config /etc/mongodb.conf & затем введите монго. Должно быть запущено или grep

root@vimal:/data# ps -ef | grep mongo

root      3153     1  2 11:39 ?        00:00:23 mongod --config /etc/mongodb.conf
root      3772  3489  0 11:55 pts/1    00:00:00 grep --color=auto mongo 

1024 * сейчас *

root@vimal:/data# mongo

MongoDB shell version: 2.0.4
connecting to: test

вы получаете оболочку mongoDB

Это не конец истории. Я опубликую способ исправления, чтобы он запускался автоматически каждый раз, большинство машин разработки выключается каждый день, и виртуальная машина должна автоматически запускаться при следующей загрузке.

0 голосов
/ 21 декабря 2011

Не столько ответ, сколько скорее К вашему сведению: я только что попал в этот вопрос и нашел этот вопрос в результате поиска. Вот подробности моего опыта:

Ошибка оболочки

markdsievers@ip-xx-xx-xx-xx:~$ mongo
MongoDB shell version: 2.0.1
connecting to: test
Wed Dec 21 03:36:13 Socket recv() errno:104 Connection reset by peer 127.0.0.1:27017
Wed Dec 21 03:36:13 SocketException: remote: 127.0.0.1:27017 error: 9001 socket exception [1] server [127.0.0.1:27017] 
Wed Dec 21 03:36:13 DBClientCursor::init call() failed
Wed Dec 21 03:36:13 Error: Error during mongo startup. :: caused by :: DBClientBase::findN: transport error: 127.0.0.1 query: { whatsmyuri: 1 } shell/mongo.js:84
exception: connect failed

Монго логи показывают

Wed Dec 21 03:35:04 [initandlisten] connection accepted from 127.0.0.1:50273 #6612
Wed Dec 21 03:35:04 [initandlisten] connection refused because too many open connections: 819

Возможно, это указывает на то, что другой ответ (JaKi) испытывал то же самое, когда некоторые соединения были очищены и доступ к оболочке (другим клиентам) снова стал возможным

0 голосов
/ 28 ноября 2012

Я не вижу, чтобы у меня был принят ответ, поэтому я просто добавлю свои 2 цента.

У меня точно такая же проблема только сейчас.Через некоторое время я понял, что заблокировал localhost в своих правилах iptables.Итак, проверьте ваш брандмауэр.

0 голосов
/ 22 июня 2012

Я нашел это очень полезно.

Если вы получаете следующее сообщение

start: Rejected send message, 1 matched rules; type="method_call", sender=":1.84" (uid=1000 pid=3215 comm="start mongodb ") interface="com.ubuntu.Upstart0_6.Job" member="Start" error name="(unset)" requested_reply="0" destination="com.ubuntu.Upstart" (uid=0 pid=1 comm="/sbin/init")
shriprasad@shriprasad-HP-430-Notebook-PC:/var/lib/mongodb$ mongo

Вы должны пытаться запустить службу mongodb как пользователь, отличный от root. Вы должны быть пользователем root. Таким образом, войдите в систему как пользователь root и затем выполните следующую команду:

sudo bash

с последующим

service mongodb start
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...