Adicione um nó a um shard
Você pode adicionar membros a um fragmento existente em umcluster fragmentado 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 evento 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 implantação de conjuntos 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 fragmentado ativo fragmentado.
Um novo servidor host para o novo nó. O novo servidor host deve ser compatível com seu conjunto de dados fragmentados e poder ser acessado pelo conjunto de réplicas ativas através da rede.
A partir do MongoDB 8.0, você pode usar a função directShardOperations
para realizar operações de manutenção que exigem que você execute comandos diretamente em um shard.
Aviso
Executar comandos utilizando a função directShardOperations
pode fazer com que seu cluster pare de funcionar corretamente e pode causar corrupção de dados. Use a função directShardOperations
apenas para fins de manutenção ou sob a orientação do suporte do MongoDB . Quando terminar de executar as operações de manutenção, pare de usar a função directShardOperations
.
Passos
Preparar o Diretório de dados
Prepare o diretório de dados do novo membro utilizando uma das seguintes estratégias:
Fazer o novo nó sincronizar automaticamente os dados de um nó 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 autogerenciado.
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).
Iniciar a nova mongod
instância
Especifique o diretório de dados e o nome do conjunto de réplica . O exemplo a seguir especifica o diretório 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 o acesso não autorizado. Para obter uma lista completa de recomendações de segurança, consulte Lista de verificação de segurança para implantações autogerenciadas. 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 primário, conecte-se a qualquer membro do conjunto de réplica e emita o comando db.hello()
.
Use para adicionar o novo membro ao conjunto de rs.add()
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 SECONDARY
estado
Para verificar o estado dos membros do conjunto de réplicas, execute rs.status()
:
rs.status()
Próximos passos
Após o membro recém-adicionado fazer a transição para o estado SECONDARY
, use rs.reconfig()
para atualizar priority
e 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)