У меня самое сложное время, чтобы понять это. У меня есть 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 (Тиканга)