Estou ensinando a mim mesmo o MongoDB HA, passando por vários cenários de conjuntos de réplicas, configurando prioridades, árbitros, conjuntos de réplicas ocultos etc. Atualmente, estou usando vários mongods em um único servidor Windows, executando em portas separadas, obviamente.
Existem cenários específicos que eu não conseguiria simular com coisas como rs.stepDown()
e rs.freeze()
? Ou parando os serviços?
Certamente, você pode testar problemas de configuração e implantação de réplica padrão em um único servidor, mas alguns cenários são mais fáceis de configurar com vários ambientes (mesmo que sejam VMs ou contêineres no mesmo servidor host). Os comandos
rs.freeze()
e ajudam a controlar os resultados das eleições;rs.stepDown()
para o teste de HA, espero que você desligue aleatoriamente ou faça o firewallmongod
de processos para confirmar que o resultado é o que você antecipou.Depende de quão completamente você está tentando testar. As VMs definitivamente fornecem mais flexibilidade - por exemplo, se você deseja testar possíveis efeitos de distorção do relógio ou limitações de recursos.
Para simular mais implantações do mundo real, você também deve considerar a simulação de rede usando uma ferramenta como mongodb-bridge . Existem problemas de rede comuns, como latência (especialmente para implantações distribuídas geograficamente), bem como problemas mais insidiosos, como roteamento assimétrico ou conectividade.
Se você está considerando HA do ponto de vista do aplicativo, você deve testar usando um aplicativo/driver com uma preocupação de gravação apropriada . Por exemplo, você pode querer garantir que um aplicativo que usa uma preocupação de gravação
w:majority
ainda possa obter gravações confirmadas no caso de falha do nó. Com um conjunto de réplica Primário/Secundário/Secundário, qualquer nó único pode falhar e ainda haverá dois nós portadores de dados para satisfazerw:majority
; se você tiver um conjunto de réplicas Primário/Secundário/Árbitro, a falha de um único nó portador de dados ainda permitirá que um primário seja eleito, masw:majority
a preocupação com a gravação não pode ser satisfeita.Se você quiser algumas ideias sobre cenários de replicação para testar, um ponto de partida interessante pode ser o conjunto de testes JavaScript usado na base de código do MongoDB: https://github.com/mongodb/mongo/tree/master/jstests/replsets .