Definição
rs.reconfig( configuration, { options } )Reconfigura um conjunto de réplica existente, substituindo a configuração do conjunto de réplica existente. Para executar o método, você deve conectar-se ao primário do replica set.
Importante
Método mongosh
Esta página documenta um método.
mongoshEsta não é a documentação para comandos de banco de dados ou drivers específicos de idioma, como Node.js.Para o comando do banco de dados, consulte o comando
replSetReconfig.Para drivers de API do MongoDB, consulte a documentação do driver do MongoDB específica da linguagem.
O método tem a seguinte
rs.reconfig()sintaxe:rs.reconfig( <configuration>, { "force" : <boolean>, "maxTimeMS" : <int> } ) ParâmetroTipoDescriçãodocumento
Um documento que especifica a configuração de um conjunto de réplicas.
booleano
Opcional
Especifique
truepara forçar os membros do conjunto de réplica disponíveis a aceitar a nova configuração. O padrão éfalse.A reconfiguração forçada pode resultar em comportamento inesperado, incluindo a reversão de
"majority"gravações confirmadas.inteiro
Opcional
Especifica um limite de tempo cumulativo em milissegundos para processar a operação. Por
rs.reconfig()rs.reconfig()padrão, o espera indefinidamente que a configuração da réplica propague para a maioria dos membros do conjunto de réplica.Para reconfigurar um conjunto de réplica existente, primeiro recupere a configuração atual
rs.conf()com, modifique o documento de configuração conforme necessário e, em seguida, passe o documento modificadors.reconfig()para.O parâmetro
forcepermite que um comando de reconfiguração seja emitido para um nó não primário.
Compatibilidade
Esse método está disponível em implantações hospedadas nos seguintes ambientes:
MongoDB Enterprise: a versão autogerenciada e baseada em assinatura do MongoDB
MongoDB Community: uma versão com código disponível, de uso gratuito e autogerenciada do MongoDB
Comportamento
Preocupação global com gravação
Você deve definir explicitamente o preocupação de gravação padrão global antes de tentar reconfigurar um conjunto de réplicas com uma configuração que altere o preocupação de gravação padrão implícito. Para definir a preocupação de gravação padrão global, use o setDefaultRWConcern comando.
term Campo de configuração de réplica
O campo é term definido pelo membro primário do conjunto de réplicas. O rs.reconfig() primário ignora o campo se term definido explicitamente na operação.
A reconfiguração pode adicionar ou remover no máximo um membro votante de cada vez
rs.reconfig() por padrão permite adicionar ou remover não mais do que 1 voting membro de cada vez. Por exemplo, uma nova configuração pode fazer, no máximo,uma das seguintes alterações no membership cluster:
Adicionando um novo membro do conjunto de réplica de votação.
Removendo um membro do conjunto de réplica de votação existente.
Modificando o
votespara um membro do conjunto de réplica existente.
Para adicionar ou remover vários membros votantes, emita uma série de operações do para adicionar ou remover um membro de cada rs.reconfig() vez.
A emissão de uma reconfiguração de força instala imediatamente a nova configuração, mesmo que ela adicione ou remova vários membros votantes. A reconfiguração forçada pode causar um comportamento inesperado, como a reversão de "majority" operações de gravação confirmadas.
A reconfiguração espera até que uma maioria dos membros instale a configuração da réplica
rs.reconfig() espera até que a maioria dos membros votantes do conjunto de réplicas instale a nova configuração de réplica antes de retornar com êxito. Um membro votante é qualquer membro do conjunto members[n].votes de 1 réplicas em que é, incluindo árbitros.
Os membros do conjunto de réplicas propagam sua configuração de réplica por meio de pulsações. Sempre que um membro descobre uma configuração com umversion e termsuperiores, ele instala a nova configuração. O processo de reconfiguração tem duas fases distintas de espera:
- 1) Aguarde que a configuração atual seja comprometida antes de instalar a nova configuração.
O "atual" refere-se à configuração da réplica em uso pelo primário no momento em que é
rs.reconfig()emitido.Uma configuração é confirmada quando:
A maioria dos membros do conjunto de réplica de votação instalou a configuração atual e
Todas as gravações que foram
"majority"confirmadas na configuração anterior também foram replicadas para uma maioria na configuração atual.
Normalmente, a configuração atual já foi instalada na maioria dos membros do conjunto de réplica de votação. No entanto, a maioria das gravações confirmadas na configuração anterior pode não ser confirmada na configuração atual.
Delayedmembros ou membros que sãolagging behindos principais podem aumentar o tempo gasto nessa fase.Se a operação tiver sido emitida com um limite de maxTimeMS e a operação exceder o limite enquanto espera, a operação retornará um erro e descartará a nova configuração. O limite é cumulativo e não é redefinido após prosseguir para a próxima fase.
- 2) Aguarde a maioria dos membros votantes na nova configuração instalar a nova configuração.
O "novo" A configuração refere-se à configuração de réplica especificada
rs.reconfig()para.O primário instala e começa a usar a nova configuração de réplica antes de propagar a configuração para os membros restantes do conjunto de réplicas. A operação aguarda apenas que a maioria dos membros votantes instale a nova configuração e não requer a espera para que a nova configuração seja confirmada.
Se a operação foi emitida com um limite maxTimeMS e a operação exceder o limite durante a espera, a operação retornará um erro , mas continuará usando e propagando a nova configuração.
A emissão de uma reconfiguração forçada instala imediatamente a nova configuração,independentemente do status de compromisso da configuração anterior. A reconfiguração forçada pode causar um comportamento inesperado, como a reversão de "majority" operações de gravação confirmadas.
Para verificar o status de compromisso da configuração atual da réplica, emita replSetGetConfig com o parâmetro commitmentStatus no conjunto de réplicas principal.
Controle de acesso
Para executar o método em sistemas que impõem controle de acesso, o usuário deve ter a ação de privilégio replSetConfigure no recurso de cluster. A função integrada clusterManager, disponível no banco de dados admin, fornece os privilégios necessários para esse comando.
Comportamento de bloqueio
rs.reconfig() obtém um bloqueio exclusivo para evitar que mais de uma operação de ocorra ao mesmo rs.reconfig() tempo.
Conjunto de réplicas de versão mista
Aviso
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.
Disponibilidade
O método shell pode acionar o primário atual rs.reconfig() diminua em algumas situações. A redução primária aciona uma eleição para selecionar uma nova primária:
Quando o primário é interrompido, ele interrompe todas as gravações em andamento. Confira os detalhes em Comportamento.
O tempo médio antes de um cluster eleger um novo primário normalmente não deve exceder 12 segundos, assumindo replica configuration settingspadrão . Isso inclui o tempo necessário para marcar a primária como indisponível e convocar e concluir uma eleição. Você pode ajustar este período de tempo modificando a opção de configuração de replicação do settings.electionTimeoutMillis. Fatores como a latência da rede podem prolongar o tempo necessário para que as eleições de conjuntos de réplicas sejam concluídas, o que, por sua vez, afeta o tempo em que o cluster pode operar sem um primário. Esses fatores dependem da arquitetura específica de seus clusters.
Durante o processo de eleição, o cluster não pode aceitar operações de gravação até que eleja o novo primário.
A lógica de conexão do seu aplicativo deve incluir tolerância para failovers automáticos e as eleições subsequentes. Os drivers do MongoDB podem detectar a perda do primário e repetir automaticamente determinadas operações de gravação uma única vez, fornecendo tratamento adicional integrado de failovers e eleições automáticas:
Drivers compatíveis permitem gravações repetíveis por padrão
Para reduzir ainda mais o impacto potencial em um cluster de produção, reconfigure somente durante os períodos de manutenção programados.
{ force: true }
Aviso
O MongoDB não sincroniza uma reconfiguração forçada de conjunto de réplicas entre os conjuntos de réplicas em um cluster. O uso de { force: true } pode levar a uma reversão das gravações comprometidas pela maioria e a um cluster fragmentado inconsistente. Tenha cuidado ao usar essa opção.
Prioridade e votos dos membros
Eliminar conexões de saída após remover um membro
O uso de para rs.reconfig() remover um membro do conjunto de réplicas não elimina automaticamente as conexões de saída abertas de outros membros do conjunto de réplicas para o membro removido.
Por padrão, os membros do conjunto de réplicas aguardam 5 minutos antes de descartar conexões com o membro removido. Em conjuntos de réplicas fragmentadas, você pode modificar esse tempo limite usando o parâmetroShardingTaskExecutorPoolHostTimeoutMS server.
Para descartar imediatamente todas as conexões de saída do conjunto de réplicas para o nó removido, execute o comando administrativo dropConnections em cada nó restante no conjunto de réplicas:
db.adminCommand( { "dropConnections" : 1, "hostAndPort" : [ "<hostname>:<port>" ] } )
Substitua <hostname> e <port> pelos do membro removido.
Reconfiguração automática para novos membros do conjunto de réplicas de votação
A partir do MongoDB 5.0, um secundário recém-adicionado não conta como um membro votante e não pode ser eleito até que tenha atingido o estado SECONDARY.
Quando um novo nó de votação é adicionado a um conjunto de réplicas, replSetReconfig adicionará internamente um campo newlyAdded à configuração do nó. Os nós com o campo newlyAdded não contam para o número atual de nós de votação. Quando a sincronização inicial for concluída e o nó atingir o estado SECONDARY, o campo newlyAdded será automaticamente removido.
Observação
As configurações que tentam adicionar um campo chamado
newlyAddedapresentarão erros mesmo se executadas com{ force: true }.Se um nó existente tiver um
newlyAddedcampo, o uso de para alterar a configuração não removerárs.reconfig()onewlyAddedcampo. OnewlyAddedcampo será anexado à configuração fornecida pelo usuário.replSetGetConfigremoverá todos os camposnewlyAddedde saída. Se quiser ver quaisquer camposnewlyAdded, você pode fazer a query da collectionlocal.system.replsetdiretamente.
Exemplos
Um conjunto de réplica denominado rs0 tem a seguinte configuração:
{ "_id" : "rs0", "version" : 1, "protocolVersion" : Long(1), "members" : [ { "_id" : 0, "host" : "mongodb0.example.net:27017", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 1, "tags" : { }, "secondaryDelaySecs" : Long(0), "votes" : 1 }, { "_id" : 1, "host" : "mongodb1.example.net:27017", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 1, "tags" : { }, "secondaryDelaySecs" : Long(0), "votes" : 1 }, { "_id" : 2, "host" : "mongodb2.example.net:27017", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 1, "tags" : { }, "secondaryDelaySecs" : Long(0), "votes" : 1 } ], "settings" : { "chainingAllowed" : true, "heartbeatIntervalMillis" : 2000, "heartbeatTimeoutSecs" : 10, "electionTimeoutMillis" : 10000, "catchUpTimeoutMillis" : 2000, "getLastErrorModes" : { }, "getLastErrorDefaults" : { "w" : 1, "wtimeout" : 0 }, "replicaSetId" : ObjectId("58858acc1f5609ed986b641b") } }
Alterar priority de membro do conjunto de réplicas
A seguinte sequência de operações atualiza o do segundo membro. As operações members[n].priority mongosh são emitidas por meio de uma sessão conectada à primary.
cfg = rs.conf(); cfg.members[1].priority = 2; rs.reconfig(cfg);
A primeira declaração usa o método
rs.conf()para recuperar um documento que contém a configuração atual para o conjunto de réplicas e define o documento como a variável localcfg.A segunda instrução define um valor
members[n].prioritypara o segundo documento na arraymembers. Para obter configurações adicionais, consulte as configurações do conjunto de réplicas.Para acessar o documento de configuração do membro no array, a instrução usa o índice de array e não o campo
members[n]._iddo membro do conjunto de réplicas.A última declaração chama o método com o
rs.reconfig()modificadocfgpara inicializar esta nova configuração. Após a reconfiguração bem-sucedida, a configuração do conjunto de réplicas será semelhante à seguinte:
{ "_id" : "rs0", "version" : 2, "protocolVersion" : Long(1), "members" : [ { "_id" : 0, "host" : "mongodb0.example.net:27017", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 1, "tags" : { }, "secondaryDelaySecs" : Long(0), "votes" : 1 }, { "_id" : 1, "host" : "mongodb1.example.net:27017", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 2, "tags" : { }, "secondaryDelaySecs" : Long(0), "votes" : 1 }, { "_id" : 2, "host" : "mongodb2.example.net:27017", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 1, "tags" : { }, "secondaryDelaySecs" : Long(0), "votes" : 1 } ], "settings" : { "chainingAllowed" : true, "heartbeatIntervalMillis" : 2000, "heartbeatTimeoutSecs" : 10, "electionTimeoutMillis" : 10000, "catchUpTimeoutMillis" : 2000, "getLastErrorModes" : { }, "getLastErrorDefaults" : { "w" : 1, "wtimeout" : 0 }, "replicaSetId" : ObjectId("58858acc1f5609ed986b641b") } }
Alterar configurações do conjunto de réplicas
Você também pode modificar o documento de settings do conjunto de réplicas do cluster. O documento settings contém opções de configuração que se aplicam a todo o conjunto de réplicas.
A seguinte sequência de operações atualiza o do settings.heartbeatTimeoutSecs agrupamento 15 para. As operações são emitidas por meio de uma sessão que está conectada ao mongosh primário.
cfg = rs.conf(); cfg.settings.heartbeatTimeoutSecs = 15; rs.reconfig(cfg);