Mestre e escravo do MongoDB - Windows ou Linux [fechado]

1

Recentemente, mudei meu banco de dados do MS Sql Server para o MongoDB (2.0) no Windows Server 2008. Ele contém dois bancos de dados com as seguintes estatísticas. (os dois bancos de dados recebem cerca de 100 leituras / gravações por segundo). Essas gravações são executadas por um aplicativo .Net em execução no mesmo servidor de banco de dados.

> 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
}

Descobri que o MongoDB pode armazenar todos os meus dados com a velocidade necessária de leitura / gravação. Agora preciso de assistência de especialistas para reforçar a confiabilidade da configuração do meu servidor único (aplicativo DB +);

Mas, durante um período de 1 mês, experimentei seguir os problemas do MongoDB-On-Windows;

  • Desligamento inesperado resultante de coleções corrompidas
  • O MongoDB não libera espaço em disco para objetos excluídos (atualmente é de cerca de 28 GB e está crescendo)
  • Número aumentado de falhas de página
  • Não há controle sobre os dados na RAM (não é possível pré-carregar os dados necessários na RAM e removê-los depois de alguns minutos)
  • Erros freqüentes no banco de dados, como: não é possível ler dados da conexão de transporte ...

Qual seria a melhor configuração de resgate para mim em Reliability / Backup / Performance;

  1. Mova o MongoDB para o Linux (desde que meu aplicativo .Net usando esse banco de dados residirá no Windows Server dentro da mesma LAN)? OU
  2. Configurar uma réplica de 2 servidores configurada com o Master no Windows e no Slave no Linux? OU
  3. O que você sugere ...?

Editar-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
}
    
por theGeekster 28.01.2013 / 10:32

1 resposta

0

Eu recomendaria não usar o Windows para hospedar um servidor MongoDB. Veja alguns motivos:

  1. Você já viu um comportamento inesperado, como desligamentos inesperados, problemas de espaço em disco, problemas de RAM e assim por diante.
  2. A comunidade de suporte está "esperando" o MongoDB padrão no Linux, o que torna tudo mais fácil, especialmente quando você está atrás do suporte da comunidade.
  3. Alguém postou recentemente sobre o servidor MySQL no Windows que foi quebrado por uma atualização incompatível, não é totalmente além do reino da possibilidade imaginar que a mesma coisa possa ocorrer, já que a maioria das atualizações serão testadas em coisas como SQL Server, mas provavelmente não contra Mongo.

Eu ficaria ainda mais cauteloso ao executar o Mongo no Linux com um Slave em um sistema operacional diferente. Eu até estaria preocupado em executar um slave em uma distribuição Linux diferente, até certo ponto (principalmente por causa das variações glibc, e assim por diante). Eu não posso começar a imaginar as circunstâncias em que eu veria um aglomerado como este uma coisa boa.

Então aqui está o plano:

Migre seus servidores MongoDB para que eles estejam no linux. Sério.

Aumente o número de servidores MongoDB: Um conjunto de réplicas de 2 servidores é fino , exceto que ter números ímpares de servidores (especialmente primos ímpares) significa que a seleção majoritária é muito mais fácil, se você tiver 2 servidores, e nenhum deles pode ver um ao outro, então você tem um cenário de cérebro dividido de difícil resolução.

Você pode ter 2 servidores principais e um nó que somente faz arbitragem ..

Se você tem 3, 5, 7, servidores, então você tem pelo menos um nó que pode ser o árbitro , e toma uma decisão sobre qual conjunto é o conjunto ativo. É por isso que um conjunto de 3 membros é o mínimo recomendado por 10Gen.

    
por 28.01.2013 / 11:47