replSetReconfig
Definição
replSetReconfig
The
replSetReconfig
administrative command modifies the configuration of an existing replica set. You can use this command to add and remove members, and to alter the options set on existing members. You must run this command on theadmin
database of the Principal replica set member.Dica
Em
mongosh
, esse comando também pode ser executado por meio do método auxiliarrs.reconfig()
.Os métodos auxiliares são práticos para os usuários
mongosh
, mas podem não retornar o mesmo nível de informações que os comandos do banco de dados. Nos casos em que a praticidade não for necessária ou os campos de retorno adicionais forem necessários, use o comando de banco de dados.
Compatibilidade
Esse comando está disponível em implantações hospedadas nos seguintes ambientes:
MongoDB Atlas: o serviço totalmente gerenciado para implantações do MongoDB na nuvem
Importante
Esse comando não é suportado nos clusters M,0 M, M,2 5M10+ e Flex. Para obter mais informações, consulte Comandos não suportados.
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
Sintaxe
O comando tem a seguinte sintaxe:
db.adminCommand( { replSetReconfig: <new_config_document>, force: <boolean>, maxTimeMS: <int> } )
Campos de comando
The command takes the following optional field:
Campo | Descrição |
---|---|
Defaults to Force reconfiguration can result in unexpected or
undesired behavior, including rollback of | |
Optional. Specifies a cumulative time limit in milliseconds
for processing the |
You may also run replSetReconfig
with the shell's
rs.reconfig()
method.
Comportamento
Preocupação global com gravação
A partir do MongoDB 5.0, você deve definir explicitamente a preocupação de gravação padrão global antes de tentar reconfigurar um conjunto de réplicas com uma configuração que altere a preocupação de gravação padrão implícita. Para definir a preocupação de escrita padrão global, utilize o comando setDefaultRWConcern
.
term
Campo de configuração de réplica
O campo term
é definido pelo membro primário do conjunto de réplicas. O primário ignora o campo term
se definido explicitamente na operação replSetReconfig
.
A reconfiguração pode adicionar ou remover no máximo um membro votante de cada vez
replSetReconfig
por padrão permite adicionar ou remover não mais do que 1
voting
membros de cada vez. Por exemplo, uma nova configuração pode fazer, no máximo, uma das seguintes alterações no cluster membership
:
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
votes
para um membro do conjunto de réplica existente.
Para adicionar ou remover vários membros votantes, emita uma série de operações replSetReconfig
para adicionar ou remover um membro de cada vez.
A emissão de uma reconfiguração forçada 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 das operações de gravação confirmadas pelo "majority"
.
A reconfiguração espera até que uma maioria dos membros instale a configuração da réplica
replSetReconfig
aguarda até que a maioria dos membros votantes do conjunto de réplicas instale a nova configuração de réplica antes de retornar sucesso. Um membro votante é qualquer membro do conjunto de réplicas em que members[n].votes
é 1
, 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
term
superiores, 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.
A configuração "atual" refere-se à configuração de réplica em uso pelo primário no momento em
replSetReconfig
é 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.
Delayed
membros ou membros que sãolagging behind
os 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.
A configuração "nova" refere-se à configuração de réplica especificada para
replSetReconfig
.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 das operações de gravação confirmadas pelo "majority"
.
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.
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
.
When a new voting node is added to a replica set,
replSetReconfig
will internally add a newlyAdded
field to the node's configuration. Nodes with the newlyAdded
field
do not count towards the current number of voting nodes. When initial
sync completes and the node reaches SECONDARY
state, the
newlyAdded
field is automatically removed.
Observação
As configurações que tentam adicionar um campo chamado
newlyAdded
apresentarão erros mesmo se executadas com{ force: true }
.Se um nó existente tiver um campo
newlyAdded
, utilizarrs.reconfig()
para alterar a configuração não removerá o camponewlyAdded
. O camponewlyAdded
será anexado à configuração fornecida pelo usuário.replSetGetConfig
removerá todos os camposnewlyAdded
de saída. Se quiser ver quaisquer camposnewlyAdded
, você pode fazer a query da collectionlocal.system.replset
diretamente.
Controle de acesso
To run the command on deployments that enforce access
control, the user must have
replSetConfigure
privilege action on the cluster
resource. The clusterManager
built-in role, available in
the admin
database, provides the required privileges for this
command.
Comportamento de bloqueio
replSetReconfig
obtém um bloqueio especial mutuamente exclusivo para evitar que mais de uma operação replSetReconfig
ocorra ao mesmo 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
A majority of the set's members must be operational for the changes to propagate properly.
replSetReconfig
can trigger the current
primary to step down in some situations. Primary step-down triggers
an eleição, eleição to select a new
Principal:
When the new primary steps up, it increments the
term
field to distinguish configuration changes made on the new primary from changes made on the previous primary.When the primary steps down, it no longer closes all client connections; however, writes that were in progress are killed. For details, see Comportamento.
O tempo médio antes de um cluster eleger um novo primário normalmente não deve exceder 12 segundos, assumindo replica
configuration settings
padrã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.
Eliminar conexões de saída após remover um membro
Using replSetReconfig
to remove a replica set member does
not automatically drop open outgoing connections from other replica
set members to the removed member.
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.
Aviso
A partir do MongDB 5.0, os nós DNS de horizonte dividido que são configurados apenas com um endereço IP falham na validação de inicialização e relatam um erro. Consulte disableSplitHorizonIPCheck
.
Prioridade e votos dos membros
Informações adicionais
Campos de configuração do conjunto de réplicas,
Configuração autogerenciada do conjunto de réplicas, rs.reconfig()
, and
rs.conf()
.