2016-11-02 3 views
3

Так я столкнулся следующие проблемы в последнее время:потери данных из-за неожиданный отказ от MongoDB реплики установить

У меня есть 5-член набора реплик набора (приоритет)

  • 1 х первичный (2)
  • 2 х вторичный (0,5)
  • 1 х скрытое резервное копирование (0)
  • 1 х арбитр (0)

Одна из вторичных реплик с приоритетом 0,5 (назовем его B) столкнулась с какой-то сетевой проблемой и имела прерывистую связь с остальной частью набора реплик. Однако, несмотря на наличие staler данных и более низкий приоритет, чем существующий основной (давайте назовем его ) она взяла на себя главную роль:

[ReplicationExecutor] VoteRequester: не получил голоса от ххх, потому что: данные кандидата является staler чем шахты, соответственно: {термин: 29, voteGranted: ложь, причина: "данные о кандидате является staler, чем у меня", хорошо: 1,0}

[ReplicationExecutor] выборы удались, предполагая, что основную роль в перспективе 29

[ReplicationExecutor ] переход к ОСНОВАНИЮ

И , несмотря на отсутствие каких-либо проблем с подключением с остальной частью набора реплик:

[ReplicationExecutor] уйдя из первичного, так как новый термин начал: 29

So Вопрос 1: как это было возможно при обстоятельствах?

Двигаясь дальше, (теперь второстепенный) начал откат данных:

[rsBackgroundSync] Начиная откат из-за OplogStartMissing: наш последний раз оп неправдоподобным: (срок: 28, метка времени: ххх) , Источника ГТД: (срок: 29, отметка времени: ххх) хешей: (ххх/ххх)

[rsBackgroundSync] начала отката

[rsBackgroundSync] откатить 0

[ReplicationExecutor] Переход к ROLLBACK

Это привело к тому, что данные были записаны для удаления. Итак, Вопрос 2: Как пропадает OplogStart?

И последнее, но не менее важное: Вопрос 3, как это можно предотвратить?

Заранее благодарю вас!

ответ

3

Вы используете версию 3.2.x и protocolVersion = 1 (вы можете проверить ее с помощью rs.conf() -command)? Потому что есть «ошибка» при голосовании. Вы можете предотвратить эту ошибку (выберите один или оба):

  • изменение protocolVersion к 0. CFG = rs.conf(); cfg.protocolVersion = 0; rs.reconfig (cfg);

  • изменить все приоритеты в то же значение

EDIT: Данные билеты, что объяснить .. больше или меньше .. Ticket 1 Ticket 2

+0

'' 3.2.4' и protocolVersion: 1 '! –

+0

Эта проблема не так ли? https://jira.mongodb.org/browse/SERVER-18453. Я вижу, что это отвечает на вопросы 2 и 3 ... но как насчет вопроса 1? –