Página inicial do Docs → Desenvolver aplicações → Manual do MongoDB
Adicione um nó a um shard
Você pode adicionar membros a um shard existente em um cluster fragmentado. Talvez você queira adicionar um membro a um fragmento pelos mesmos motivos que gostaria de adicionar um membro a qualquer conjunto de réplicas. Por exemplo, aumentar o número de membros fornece candidatos adicionais para substituir um primário no caso de um failover. Membros adicionais também aumentam a redundância de dados e a disponibilidade do conjunto de réplicas.
Para obter mais informações, consulte Arquiteturas de sistema de conjunto de réplicas.
Sobre esta tarefa
Antes do MongoDB 5.0, um secundário recém-adicionado ainda conta como membro votante, embora não possa servir leituras nem se tornar primário até que seus dados sejam consistentes. Se você estiver executando uma versão do MongoDB anterior à 5.0 e adicionar um secundário com suas configurações votes
e priority
maiores que zero, isso pode levar a um caso em que a maioria dos membros votantes está online, mas nenhum primário pode ser eleito. Para evitar tais situações, considere adicionar o novo secundário inicialmente com priority :0
e votes :0
. Em seguida, execute rs.status()
para garantir que o membro tenha feito a transição para o estado SECONDARY
. Por fim, use rs.reconfig()
para atualizar a prioridade e os votos.
Antes de começar
Para adicionar um membro a um conjunto de réplicas de shard, você precisa de:
Um conjunto de réplicas de cluster ativo fragmentado.
Um novo servidor host para o novo membro. O novo servidor host deve ser capaz de suportar seu conjunto de dados fragmentados e ser acessível pelo conjunto de réplicas ativas através da rede.
Passos
Preparar o Diretório de dados
Prepare o diretório de dados do novo membro utilizando uma das seguintes estratégias:
Faça com que o novo membro sincronize automaticamente os dados de um membro existente. Este processo leva tempo, mas não requer intervenção do administrador.
Certifique-se que o diretório de dados do novo membro não contém dados. O novo membro copiará os dados de um membro existente.
Se o novo membro estiver em um estado de recuperação , ele deverá sair e se tornar secundário antes que o MongoDB possa copiar todos os dados como parte do processo de replicação.
Copie manualmente o diretório de dados de um membro existente. O novo membro se torna um membro secundário e chegará ao estado atual do conjunto de réplicas. Copiar os dados pode reduzir o tempo necessário para o novo membro sincronizar com os outros membros do conjunto de réplicas.
Certifique-se de que você pode copiar o diretório de dados para o novo membro e iniciar a replicação dentro da janela permitida pelo oplog. Caso contrário, a nova instância terá que executar uma sincronização inicial, que ressincroniza completamente os dados, conforme descrito em Ressincronizar um membro de um conjunto de réplicas.
Para verificar o estado atual dos membros do conjunto de réplicas em relação ao oplog, use
rs.printReplicationInfo()
.
Para obter informações sobre os padrões de implementação de replicação, consulte o documento Replica Set Deployment Architectures (Arquiteturas de implementação de conjuntos de réplicas).
Inicie a nova instância mongod
Especifique o diretório de dados e o nome do conjunto de réplica. O exemplo a seguir especifica o directoria de dados /srv/mongodb/db0
e o conjunto de réplicas rs0
:
mongod --dbpath /srv/mongodb/db0 --replSet rs0 --bind_ip localhost,<ip address of the mongod host>
Aviso
Antes de vincular sua instância a um endereço IP acessível publicamente, você deve proteger seu cluster contra acessos não autorizados. Para obter uma lista completa das recomendações de segurança, consulte Lista de verificação de segurança. No mínimo, considere habilitar a autenticação e fortalecer a infraestrutura de rede.
Para obter mais informações sobre opções de configuração, consulte a página de manualmongod
.
Dica
Você pode especificar o diretório de dados, nome do conjunto de réplica e a ligação de IP no mongod.conf
arquivo de configuração, e iniciar o mongod
com o seguinte comando:
mongod --config /etc/mongod.conf
Conecte-se ao primário do conjunto de réplicas
Você só pode adicionar membros enquanto estiver conectado ao primário. Para se conectar ao primário, use mongosh
. Substitua os valores host
e port
por valores relevantes para sua implantação:
mongosh --host mongodb0.example.com --port 28015
Se você não souber qual membro é o principal, conecte a qualquer membro do conjunto de réplica e emita o comando db.hello()
.
Use rs.add()
para adicionar o novo membro ao conjunto de réplicas
Passe o member configuration document
para o método. Por exemplo, para adicionar um membro no host mongodb3.example.net
, emita o seguinte comando:
rs.add( { host: "mongodb3.example.net:27017", priority: 0, votes: 0 } )
Certifique-se de que o novo membro tenha atingido o estado SECONDARY
Para verificar o estado dos membros do conjunto de réplicas, execute rs.status()
:
rs.status()
Próximos passos
Depois que o membro recém-adicionado fizer a transição para o estado SECONDARY
, use rs.reconfig()
para atualizar o priority
e o votes
do membro recém-adicionado, se necessário.
Aviso
O método
rs.reconfig()
shell pode forçar o primário atual a se retirar, o que causa uma eleição. Quando as etapas primárias são desativadas, omongod
fecha todas as conexões do cliente. Embora isso normalmente leve de 10 a 20 segundos, tente fazer essas alterações durante os períodos de manutenção programados.Evite reconfigurar conjuntos de réplicas que contenham membros de diferentes versões do MongoDB, pois as regras de validação podem diferir entre as versões do MongoDB.
Exemplo
Se rs.conf()
retornar o documento de configuração para mongodb3.example.net:27017
como o quinto elemento na array members
, para atualizar sua prioridade e votos para 1
, use a seguinte sequência de operações:
var cfg = rs.conf(); cfg.members[4].priority = 1 cfg.members[4].votes = 1 rs.reconfig(cfg)