Отказ набора реплик драйвера Java MongoDB

У меня есть набор реплик MonogDB с двумя участниками и арбитром. Проблема в том, что когда основной узел выходит из строя, а монго выбирает новый основной узел, у меня происходит некоторая потеря данных. Я считаю, что это то, что я могу контролировать на уровне драйвера Java. Пожалуйста, помогите мне найти правильные настройки, чтобы у меня не было потери данных при аварийном переключении.


person PHPDEV    schedule 24.04.2014    source источник


Ответы (2)


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

person evanchooly    schedule 24.04.2014

Если вы хотите убедиться, что ваши операции записи подтверждаются только при получении первичным и хотя бы одним вторичным, используйте это. Это предотвратит потерю данных в случае, если ваш основной сервер выйдет из строя до синхронизации с вторичными серверами (конечно, это повлияет на производительность).

WriteResult result = collection.insert(..., WriteConcern. REPLICAS_SAFE);

Дополнительные сведения о проблеме записи см. в документах MongoDB.

Дополнительное примечание

Поскольку у вас есть только два члена в вашем наборе, все операции записи завершатся неудачно, так как после потери одного узла нет большинства. Чтобы этого не произошло, вам необходимо повысить статус вашего арбитра до полноправного члена.

person Sebastian    schedule 24.04.2014
comment
У меня только 2 члена, поэтому, если один пойдет, будет только 1 член (основной), так что это вызовет ошибку, потому что только основной будет доступен - person PHPDEV; 24.04.2014
comment
Правильный. Чтобы избежать потери данных и иметь функционирующий набор реплик после потери одного узла, вам необходимо обновить арбитр до полноценного члена набора реплик. - person Sebastian; 24.04.2014