Автосохранение nosql mongodb replicaset, потеря данных при проведении эксперимента - PullRequest
1 голос
/ 17 января 2011

Я постоянно вставлял данные в автоответчик mongodb. (не обновляется, только вставка)

Экспериментальная установка 2 осколка, каждый осколок имеет 2 узла.

в шарде1 -> узел1 (основной), узел2 в шарде2 -> узел3 (основной), узел4

в одном осколке я опустил вторичный узел (node2) -> все же данные были вставлены правильно Теперь я также отключил основной (node1) -> полный шард не работает

Удивительно, но вся установка монго не выполняла никаких записей.

есть еще один поворот в истории. Теперь я поднял узел 2, так как это единственный доступный узел, он стал основным и начал принимать данные.

Через 10 минут я также поднял узел 1.

Но когда я проверил данные, которые я вставил в узел 1 (когда узел 2 не работает), был потерян: (.

    s1             s2
   (n1,n2)       (n3,n4)  
   ---------     ---------
1. (up,up)       (up, up)  -> data was getting inserted
2. (up,down)     (up, up)  -> data was getting inserted properly (but got lost :(  )
3. (down, down)  (up, up)  -> no data inserts were happening
4. (down, up)    (up, up)  -> started taking data again
5. (up, up)      (up, up)  -> n1 picked data from n2, but couldn't give the data to n2

на последнем шаге, когда я поднял n1, он получил новые записи от n2, но то, что n1 получил на шаге 2 выше, было полностью потеряно: (.

Это ожидаемое поведение монго?

Кто-нибудь, пожалуйста, помогите мне, я могу провести больше экспериментов, если потребуется:).

Заранее спасибо, Вивекананда Тадала

1 Ответ

3 голосов
/ 17 января 2011

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

Репликация в MongoDB является однонаправленной: подчиненное устройство копирует данные с более современного подчиненного устройства или ведущего устройства.У вас не может быть двух узлов, копирующих данные друг от друга (пока).Возможно, вас заинтересует обеспечение репликации записи .

Вставка в чанки на сбитом осколке не будет работать, но вы можете вставить в чанки на осколках, которые находятся на другом осколке.,Вы можете использовать db.printShardingStatus(), чтобы увидеть, какие куски где.

...