Назад | Перейти на главную страницу

MongoDB Master и Slave - Windows или Linux

Я недавно переместил свою базу данных MS Sql Server в MongoDB (2.0) на Windows Server 2008. Он содержит 2 базы данных со следующей статистикой. (обе базы данных получают около 100 операций чтения / записи в секунду). Эти записи выполняются приложением .Net, работающим на том же сервере БД.

> db.stats()
{
        "db" : "FirstDB",
        "collections" : 112,
        "objects" : 94020788,
        "avgObjSize" : 62.86065307174409,
        "dataSize" : 5910208136,
        "storageSize" : 14340792320,
        "numExtents" : 1277,
        "indexes" : 110,
        "indexSize" : 4279800784,
        "fileSize" : 27837595648,
        "nsSizeMB" : 16,
        "ok" : 1
}

> db.stats()
{
        "db" : "SecondDB",
        "collections" : 10,
        "objects" : 2926198,
        "avgObjSize" : 158.5025346883567,
        "dataSize" : 463809800,
        "storageSize" : 720027648,
        "numExtents" : 49,
        "indexes" : 8,
        "indexSize" : 115248896,
        "fileSize" : 2080374784,
        "nsSizeMB" : 16,
        "ok" : 1
}

Я обнаружил, что MongoDB может хранить все мои данные с необходимой скоростью чтения / записи. Теперь мне нужна помощь экспертов для обеспечения надежности моей установки с одним сервером (DB + приложение);

Но в течение 1 месяца у меня возникли следующие проблемы с MongoDB-On-Windows;

Какая была бы для меня лучшая установка для восстановления надежности / резервного копирования / производительности;

  1. Переместить MongoDB в Linux (при условии, что мое приложение .Net, использующее эту БД, будет находиться на Windows Server в той же локальной сети)? ИЛИ
  2. Установить набор реплик с 2 серверами с главным устройством в Windows и подчиненным устройством в Linux? ИЛИ
  3. Что вы предлагаете ...?

Редактировать-1:

> db.serverStatus()
{
        "host" : "OWNEROR-GTPD0H9",
        "version" : "2.2.2",
        "process" : "mongod",
        "pid" : 5972,
        "uptime" : 2246315,
        "uptimeMillis" : NumberLong("2246314871"),
        "uptimeEstimate" : 1418073,
        "localTime" : ISODate("2013-02-01T18:20:48.371Z"),
        "locks" : {
                "." : {
                        "timeLockedMicros" : {
                                "R" : NumberLong(1009609910),
                                "W" : NumberLong("41166641284")
                        },
                        "timeAcquiringMicros" : {
                                "R" : NumberLong("233444382285"),
                                "W" : NumberLong("26675293061")
                        }
                },
                "admin" : {
                        "timeLockedMicros" : {
                                "r" : NumberLong("20598738435"),
                                "w" : NumberLong(0)
                        },
                        "timeAcquiringMicros" : {
                                "r" : NumberLong("681905051780"),
                                "w" : NumberLong(0)
                        }
                },
                "local" : {
                        "timeLockedMicros" : {
                                "r" : NumberLong(7054206),
                                "w" : NumberLong(0)
                        },
                        "timeAcquiringMicros" : {
                                "r" : NumberLong(323140436),
                                "w" : NumberLong(0)
                        }
                },
                "FirstDB" : {
                        "timeLockedMicros" : {
                                "r" : NumberLong("40372661580"),
                                "w" : NumberLong("54059509747")
                        },
                        "timeAcquiringMicros" : {
                                "r" : NumberLong("769458843030"),
                                "w" : NumberLong("357708107433")
                        }
                },
                "SecondDB" : {
                        "timeLockedMicros" : {
                                "r" : NumberLong("25053503869"),
                                "w" : NumberLong("395081595504")
                        },
                        "timeAcquiringMicros" : {
                                "r" : NumberLong("69429086729"),
                                "w" : NumberLong("9163194312205")
                        }
                }
        },
        "globalLock" : {
                "totalTime" : NumberLong("2246314871000"),
                "lockTime" : NumberLong("41166641284"),
                "currentQueue" : {
                        "total" : 54,
                        "readers" : 52,
                        "writers" : 2
                },
                "activeClients" : {
                        "total" : 2,
                        "readers" : 0,
                        "writers" : 2
                }
        },
        "mem" : {
                "bits" : 64,
                "resident" : 69,
                "virtual" : 34059,
                "supported" : true,
                "mapped" : 16793,
                "mappedWithJournal" : 33586
        },
        "connections" : {
                "current" : 114,
                "available" : 19886
        },
        "extra_info" : {
                "note" : "fields vary by platform",
                "page_faults" : 631285910,
                "usagePageFileMB" : 6848,
                "totalPageFileMB" : 49132,
                "availPageFileMB" : 34274,
                "ramMB" : 24567
        },
        "indexCounters" : {
                "note" : "not supported on this platform"
        },
        "backgroundFlushing" : {
                "flushes" : 37430,
                "total_ms" : 86130745,
                "average_ms" : 2301.115281859471,
                "last_ms" : 3853,
                "last_finished" : ISODate("2013-02-01T18:19:49.233Z")
        },
        "cursors" : {
                "totalOpen" : 227,
                "clientCursors_size" : 227,
                "timedOut" : 125,
                "totalNoTimeout" : 226
        },
        "network" : {
                "bytesIn" : 46807928165,
                "bytesOut" : 24400717839,
                "numRequests" : 462799358
        },
        "opcounters" : {
                "insert" : 92590009,
                "query" : 92755757,
                "update" : 183285338,
                "delete" : 7489,
                "getmore" : 1004,
                "command" : 94208472
        },
        "asserts" : {
                "regular" : 0,
                "warning" : 0,
                "msg" : 0,
                "user" : 97431,
                "rollovers" : 0
        },
        "writeBacksQueued" : false,
        "dur" : {
                "commits" : 17,
                "journaledMB" : 0.139264,
                "writeToDataFilesMB" : 0.033338,
                "compression" : 2.2571516556184057,
                "commitsInWriteLock" : 0,
                "earlyCommits" : 0,
                "timeMs" : {
                        "dt" : 3291,
                        "prepLogBuffer" : 0,
                        "writeToJournal" : 8,
                        "writeToDataFiles" : 1,
                        "remapPrivateView" : 38
                }
        },
        "recordStats" : {
                "accessesNotInMemory" : 3942359,
                "pageFaultExceptionsThrown" : 15956,
                "FirstDB" : {
                        "accessesNotInMemory" : 163718,
                        "pageFaultExceptionsThrown" : 6931
                },
                "SecondDB" : {
                        "accessesNotInMemory" : 3778641,
                        "pageFaultExceptionsThrown" : 9025
                },
                "admin" : {
                        "accessesNotInMemory" : 0,
                        "pageFaultExceptionsThrown" : 0
                },
                "local" : {
                        "accessesNotInMemory" : 0,
                        "pageFaultExceptionsThrown" : 0
                }
        },
        "ok" : 1
}

Я бы рекомендовал не использовать Windows для размещения сервера MongoDB. Вот несколько причин, почему:

  1. Вы уже видели неожиданное поведение, такое как неожиданные отключения, проблемы с дисковым пространством, проблемы с ОЗУ и так далее.
  2. Сообщество поддержки «ожидает» стандартного MongoDB для Linux, это все упрощает, особенно когда вам нужна поддержка сообщества.
  3. Кто-то недавно опубликовал сообщение о сервере MySQL в Windows, который был сломан из-за несовместимого обновления, это не совсем выходит за рамки возможности представить, что может произойти то же самое, поскольку большинство обновлений будут проверяться на таких вещах, как SQL Server, но, вероятно, не на Mongo .

Я был бы еще более осторожен при запуске Mongo в Linux с Slave в другой ОС. Я бы даже побеспокоился о том, чтобы запустить подчиненное устройство в другом дистрибутиве Linux, в некоторой степени (в основном из-за вариаций glibc и т. Д.). Я не могу представить себе обстоятельства, при которых я увидел бы такой кластер как нечто хорошее.

Итак, план такой:

Перенесите свои серверы MongoDB на Linux. Шутки в сторону.

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

У вас может быть 2 основных сервера и один узел, который только делает арбитраж..

Если у вас 3, 5, 7 серверов, то у вас есть хотя бы один узел, который может быть арбитр, и принять решение о том, какой набор является активным. Вот почему Минимальный рекомендуемый набор из 3-х элементов пользователя 10Gen.