Ошибки PHP MongoDB при использовании автоматического перехода на другой ресурс - PullRequest
3 голосов
/ 11 мая 2011

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

Когда я подключаюсь или выдаю запросы, я получаю периодические ошибки, которые варьируются от одного из следующих:

  • Не удалось определить мастера.
  • Не удалось подключиться к [поставить хост здесь].
  • Исключения из-за разбитой трубы.
  • MongoCursorExceptions.

Кажется, что они случаются чаще, чем дольше работают серверы. Через некоторое время невозможно установить соединение, и я получаю следующую ошибку при попытке войти в оболочку mongo:

MongoDB shell version: 1.8.1
connecting to: test
Wed May 11 16:36:50 MessagingPort recv() errno:104 Connection reset by peer 127.0.0.1:27017
Wed May 11 16:36:50 SocketException: remote:  error: 9001 socket exception [1] 
Wed May 11 16:36:50 DBClientCursor::init call() failed
exception: DBClientBase::findOne: transport error: 127.0.0.1 query: { whatsmyuri: 1 }

(Кстати, при подробном ведении журнала (-vvvv), исключение сокета 9001, похоже, подходит для каждого запускаемого запроса.)

Когда я перезагружаю серверы Монго, все возвращается и начинает работать, но ненадолго.

Независимо от того, какую комбинацию вариантов подключения я использовал, ничего не получалось. Когда я изменил оба веб-сервера для подключения к основной реплике, все начало работать. Нет ошибок Нет автоматического переключения при отказе :(. Странно было то, что опция replicaSet все еще была установлена, что означает, что драйвер PHP все еще должен определить, был ли тот, к которому он подключен, ведущим, и если нет, подключиться к нему, если так, ничего не делать.

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

Кто-нибудь может пролить свет на это?

Моя настройка: - 2 веб-сервера - Apache / PHP на обоих - MongoDB Replica-Set охватывает все - среднее по одному - Первичный и Арбитр с другой - MongoDB 1.8.1 - PHP Driver 1.1.4 - PHP 5.3.3 - Apache 2.2.17 - RedHat 5,5 (Тиканга)

1 Ответ

0 голосов
/ 11 мая 2011

Это репост активной темы в списке рассылки пользователя MongoDB.

Может быть, лучше закрыть его и закончить обсуждение.

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