Reiniciar um cluster fragmentado autogerenciado
Nesta página
O tutorial é específico do MongoDB 7.0. Para versões anteriores do MongoDB, consulte a versão correspondente do Manual MongoDB.
Este procedimento demonstra a sequência de desligamento e inicialização para reiniciar um cluster fragmentado. Parar ou iniciar os componentes de um cluster fragmentado em uma ordem diferente pode causar erros de comunicação entre membros. Por exemplo, servidores defragmento podem parecer travar se não houver servidores de configuração disponíveis.
Importante
Esse procedimento só deve ser realizado durante um período de manutenção planejado. Durante esse período, os aplicativos devem interromper todas as leituras e gravações no cluster para evitar possíveis perdas de dados ou leitura de dados obsoletos.
Desabilitar o balancer
Desative o balancer para interromper a migração de chunk e não execute nenhuma operação de gravação de metadados até que o processo seja concluído. Se houver uma migração em andamento, o balancer concluirá a migração em andamento antes de encerrar.
Para desabilitar o balancer, conecte-se a uma das instâncias do mongos
do cluster e emita o seguinte comando: [1]
sh.stopBalancer()
Para verificar o estado do balancer, emita o comando sh.getBalancerState()
.
Para mais informações, consulte Desabilitar o Balancer.
[1] | A partir do MongoDB 6.0.3, a divisão automática de partes não é executada. Isso se deve a melhorias na política de balanceamento. Os comandos de divisão automática ainda existem, mas não executam uma operação. Nas versões do MongoDB anteriores a 6.0.3, o sh.stopBalancer() também desabilita a divisão automática para o cluster fragmentado. |
Parar cluster fragmentado
Pare os roteadores mongos
.
Execute db.shutdownServer()
a partir do banco de dados admin
em cada roteador mongos
:
use admin db.shutdownServer()
Pare cada conjunto de réplicas de shard.
Execute db.shutdownServer()
do banco de dados admin
em cada membro do conjunto de réplicas de shards para encerrar seu processo mongod
. Desligue todos os membros secundários antes de desligar a primária em cada conjunto de réplicas.
Pare os servidores de configuração.
Execute db.shutdownServer()
do banco de dados admin
em cada um dos servidores de configuração para encerrar o processo mongod
. Desligue todos os nós secundários antes de desligar o primary.
Iniciar cluster fragmentado
Iniciar servidores de configuração.
Ao iniciar cada mongod
, especifique as configurações do mongod
utilizando um arquivo de configuração ou a linha de comando. Para mais informações sobre parâmetros de inicialização, consulte a página de referência do mongod
.
Arquivo de configuração
Se estiver usando um arquivo de configuração, inicie o mongod
com a opção --config
definida como o caminho do arquivo de configuração.
mongod --config <path-to-config-file>
Linha de comando
Se utilizar as opções da linha de comando, inicie o mongod
com o --configsvr
, --replSet
, --bind_ip
e outras opções conforme apropriado para seu sistema. Por exemplo:
mongod --configsvr --replSet <replica set name> --dbpath <path> --bind_ip localhost,<hostname(s)|ip address(es)>
Após iniciar todos os servidores de configuração, conecte ao mongod
primário e execute o rs.status()
para confirmar a integridade e disponibilidade de cada membro do CSRS.
Inicie cada conjunto de réplicas de shard.
Ao iniciar cada mongod
, especifique as configurações do mongod
utilizando um arquivo de configuração ou a linha de comando.
Arquivo de configuração
Se estiver usando um arquivo de configuração, inicie o mongod
com a opção --config
definida como o caminho do arquivo de configuração.
mongod --config <path-to-config-file>
Linha de comando
Se estiver usando a opção de linha de comando, inicie o mongod
com as opções --replSet
, --shardsvr
e --bind_ip
e outras opções, conforme apropriado para seu sistema. Por exemplo:
mongod --shardsvr --replSet <replSetname> --dbpath <path> --bind_ip localhost,<hostname(s)|ip address(es)>
Após iniciar todos os membros de cada shard, conecte a cada mongod
primário e execute rs.status()
para confirmar a integridade e disponibilidade de cada membro.
Inicie mongos
roteadores.
Inicie roteadores do mongos
utilizando um arquivo de configuração ou um parâmetro da linha de comando para especificar os servidores de configuração.
Arquivo de configuração
Se utilizar um arquivo de configuração, inicie o mongos
especificando a opção --config
e o caminho para o arquivo de configuração.
mongos --config <path-to-config>
Para obter mais informações sobre o arquivo de configuração, consulte opções de configuração.
Linha de comando
Se utilizar parâmetros da linha de comando, inicie o mongos
e especifique o --configdb
, --bind_ip
e outras opções conforme apropriado para seu sistema. Por exemplo:
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.
mongos --configdb <configReplSetName>/cfg1.example.net:27019,cfg2.example.net:27019 --bind_ip localhost,<hostname(s)|ip address(es)>
Inclua quaisquer outras opções, conforme apropriado para seu sistema.
Reative o balancer
Reative o balancer para retomar as migrações em partes.
Conecte a uma das instâncias do mongos
do cluster e execute o comando sh.startBalancer()
: [2]
sh.startBalancer()
Para verificar o estado do balancer, emita o comando sh.getBalancerState()
.
Para mais informações, consulte Habilitar o Balancer.
[2] | A partir do MongoDB 6.0.3, a divisão automática de chunks não é executada. Isso se deve a melhorias na política de balanceamento. Os comandos de divisão automática ainda existem, mas não executam uma operação. Nas versões do MongoDB anteriores a 6.0.3, sh.startBalancer() também permite a divisão automática para o cluster fragmentado. |
Validar acessibilidade do cluster
Conecte uma shell do mongo
a um dos processos do mongos
do cluster. Utilize o sh.status()
para verificar o status geral do cluster.
Para confirmar que todos os shards estão acessíveis e comunicados, insira os dados de teste em uma coleção fragmentada temporária. Confirme se os dados estão sendo divididos e migrados entre cada shard em seu cluster. Você pode conectar uma shell mongo
a cada shard primário e usar db.collection.find()
para validar se os dados foram fragmentados como esperado.
Importante
Para evitar possíveis perdas de dados ou leitura de dados obsoletos, não inicie leituras e gravações de aplicativos no cluster até depois de confirmar que o cluster está íntegro e acessível.