MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como inicializar o conjunto de replicação mongodb sem chamar rs.initiate()?

Resposta curta / tl;dr


Não.

Resposta um pouco mais longa


Não, porque faz sentido usar o shell.

Resposta


Quando você configura um conjunto de réplicas, geralmente tem mais de um membro. Até que o conjunto de réplicas seja inicializado, nenhum dos membros mantém a configuração necessária. O nó no qual você inicializa o conjunto de réplicas torna-se primário, armazenando a configuração. Agora você adiciona membros usando o rs.add comando ou usando rs.reconfig . O que acontece então é que o primário entra em contato com o membro adicionado, a configuração é sincronizada e algumas outras coisas. É uma prática recomendada que os membros comuns do conjunto de réplicas sejam iguais para que um nó falhe, não há desvantagem de que outro nó se torne primário e, portanto, o novo primário possa permanecer primário até que seja desativado por algum motivo ou outro.

Então, se você iniciar um membro do conjunto de réplicas, de onde ele deve obter sua configuração? Decida por si mesmo o que tem que fazer? Isso não funcionaria bem em um cluster. Como ele deve descobrir os outros membros e suas configurações? Lembre-se de que os membros do conjunto de réplicas podem estar em data centers diferentes. E se houvesse um --IamPrimaryDoAsISay opção, o que aconteceria se houvesse outro primário atualmente no cluster? E como lidar com uma situação em que mais de um membro foi iniciado com essa opção? Um passo para baixo do outro servidor? Pode ser apenas porque você substituiu um cooler? Ou a instância recém-iniciada não deveria fazer nada quando já havia um primário? Que sentido teria a opção então em primeiro lugar?

E todas essas complicações apenas para evitar um único comando do shell?

Nota:Se você quiser um único servidor, basta iniciar uma instância autônoma (um mongod sem o --replSet opção).se você quiser explorar as possibilidades de um conjunto de réplicas, precisará de mais de um membro.