Como alterar o mestre em um cluster do MongoDB sem reiniciar o processo?

4

Lendo a documentação do MongoDB sobre como configurar uma configuração mestre-escravo de um cluster (nosso cluster terá mais de 12 nós, então infelizmente não podemos ter uma configuração de conjunto de réplicas), como eu posso promover um escravo dominar sem ter que parar nenhum processo?

Existe algum comando que possamos usar, como o comando slave do Redis, que nos permite promover um escravo ao master sem a necessidade de reiniciar o processo?

Isso é o que encontramos na documentação do MongoDB ( link ):

To permanently failover from a unavailable or damaged master (A in the following example) to a slave (B):

Shut down A. Stop mongod on B. Back up and move all data files that begin with local on B from the dbpath. Warning Removing local.* is irrevocable and cannot be undone. Perform this step with extreme caution. Restart mongod on B with the --master option. Note This is a one time operation, and is not reversible. A cannot become a slave of B until it completes a full resync.

Este é realmente o único caminho?

    
por Kico Lobo 24.07.2013 / 20:40

2 respostas

3

Um adendo aos administradores responde para esclarecer sua dúvida nos comentários:

Não, atualmente (a partir de 2.4) não há como ir além de 12 nós em um conjunto de réplicas. Você pode procurar usar o Mongo Connector para ter vários conjuntos, como uma possível solução. O conector permite que você repita os ops de um conjunto em outro conjunto, essencialmente seguindo o oplog (que é como funciona a replicação em geral). No entanto, isso significaria que a resolução de quaisquer problemas de sincronização entre clusters não seria automática e seria essencialmente sua responsabilidade.

Para referência, a questão relevante para votar / assistir para aumentar o limite de 12 nós é SERVER-3110 - está atualmente escalado para 2.5.x (a ramificação de desenvolvimento instável atual), mas como acontece com todas essas coisas até que esteja comprometido e em uma versão estável, você não pode dizer com certeza quando isso será feito.

    
por 26.07.2013 / 01:57
4

Sim, este é realmente o método para mudar um papel. Existe uma razão pela qual o Master / Slave é obsoleto em favor de conjuntos de réplicas. Na documentação Mestre / Escravo , eles fornecem um método para emular o comportamento mestre / escravo usando conjuntos de réplicas e dois nós. Se você definir as coisas dessa maneira, poderá obter um modo de troca a quente através de um comando simples no console do Mongo.

{ _id : 'replSet', members : [ { _id : 0, host : "mongomaster", priority : 0},
                               { _id : 1, host : "mongoslave", priority : 1 } ]
}

Isso forneceria uma troca de funções. Você está dizendo ao conjunto de réplicas para trocar quais servidores estão agindo como Primários e quais Secundários.

    
por 24.07.2013 / 20:53