rs.reconfigForPSASet()
Definição
rs.reconfigForPSASet( memberIndex, config, { options } )
Novidades na versão 5.0.
Execute com segurança algumas alterações de reconfiguração em um conjunto de réplicas primário-secundário-árbitro (PSA) ou em um conjunto de réplicas que está mudando para uma arquitetura PSA. Você só deve usar esse método em um dos seguintes casos:
Você deseja reconfigurar um secundário em um conjunto de réplicas existente de três nós com uma arquitetura PSA para se tornar um nó de votação portador de dados com
priority
diferente de zero.Você deseja adicionar um novo nó de votação que também é portador de dados e tem prioridade diferente de zero a um conjunto de réplicas existente com dois nós que contém um nó de votação e portador de dados, bem como um árbitro.
Aviso
Se o secundário que você estiver adicionando estiver atrasado e o conjunto de réplicas resultante for uma configuração PSA, a primeira alteração na configuração alterará o número de nós que precisam confirmar uma alteração com
"majority"
.Nesse caso, seu ponto de confirmação ficará atrasado até que o secundário o alcance.
Para obter detalhes sobre o comportamento desse método, consulte Comportamento.
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
Sintaxe
O método rs.reconfigForPSASet()
tem a seguinte sintaxe:
rs.reconfigForPSASet( memberIndex: <num>, config: <configuration>, { "force" : <boolean>, "maxTimeMS" : <int> } )
Parâmetro | Tipo | Descrição |
---|---|---|
| inteiro | O índice do secundário que está sendo adicionado ou modificado. |
| documento | Um documento que especifica a nova configuração de um conjunto de réplicas. |
| booleano | Opcional AVISO: executar o método Especifique A reconfiguração forçada pode resultar em comportamento inesperado ou indesejado, incluindo a reversão de |
| inteiro | Opcional Especifica um limite de tempo cumulativo em milissegundos para processar cada reconfiguração durante a |
Comportamento
O método rs.reconfigForPSASet()
reconfigura o conjunto de réplicas em duas etapas:
O método reconfigura seu conjunto de réplicas para adicionar ou modificar um secundário com
{ votes: 1, priority: 0 }
.Uma vez que o secundário adicionado ou modificado tenha alcançado todas as gravações confirmadas, o método reconfigura o secundário para ter o
priority
especificado no comandors.reconfigForPSASet()
({ votes: 1, priority: <num> }
).
A abordagem de duas etapas evita a possibilidade de reverter gravações confirmadas no caso de um failover para o novo secundário antes que o novo secundário tenha todas as gravações confirmadas da configuração anterior.
Exemplo
Um conjunto de réplica denominado rs0
tem a seguinte configuração:
{ "_id" : "rs0", "version" : 1, "term": 1, "members" : [ { "_id" : 0, "host" : "mongodb0.example.net:27017", "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 1, "tags" : {}, "secondaryDelaySecs" : Long("0"), "votes" : 1 }, { "_id" : 2, "host" : "mongodb1.example.net:27017", "arbiterOnly" : true, "buildIndexes" : true, "hidden" : false, "priority" : 0, "tags" : {}, "secondaryDelaySecs" : Long("0"), "votes" : 1 } ], "protocolVersion" : Long("1"), "writeConcernMajorityJournalDefault": true, "settings" : { "chainingAllowed" : true, "heartbeatIntervalMillis" : 2000, "heartbeatTimeoutSecs" : 10, "electionTimeoutMillis" : 10000, "catchUpTimeoutMillis" : 2000, "getLastErrorModes" : {}, "getLastErrorDefaults" : { "w" : 1, "wtimeout" : 0 }, "replicaSetId" : ObjectId("60e6f83923193faa336889d2") } }
A sequência de operações a seguir adiciona um novo secundário ao conjunto de réplicas. As operações são emitidas no shell mongosh
enquanto conectado ao primário.
cfg = rs.conf(); cfg["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" : true, "buildIndexes" : true, "hidden" : false, "priority" : 0, "tags" : {}, "secondaryDelaySecs" : Long("0"), "votes" : 1 } ] rs.reconfigForPSASet(1, cfg);
A primeira declaração usa o método
rs.conf()
para recuperar um documento que contém a configuração atual do conjunto de réplicas e armazena o documento na variável localcfg
.A segunda declaração adiciona o novo secundário à array
members
. Nessa configuração, o novo secundário é adicionado emmemberIndex
1
. OmemberIndex
é o mesmo que o índice da array. Para obter configurações adicionais, consulte as configurações do conjunto de réplicas.A última declaração chama o método
rs.reconfigForPSASet()
com omemberIndex
1
e ocfg
modificado. OmemberIndex
é a posição da array do novo nó na arraymembers
. Após a reconfiguração ser realizada, a configuração do conjunto de réplicas será semelhante à seguinte:{ "_id" : "rs0", "version" : 1, "term": 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" : true, "buildIndexes" : true, "hidden" : false, "priority" : 0, "tags" : {}, "secondaryDelaySecs" : Long("0"), "votes" : 1 } ], "protocolVersion" : Long("1"), "writeConcernMajorityJournalDefault": true, "settings" : { "chainingAllowed" : true, "heartbeatIntervalMillis" : 2000, "heartbeatTimeoutSecs" : 10, "electionTimeoutMillis" : 10000, "catchUpTimeoutMillis" : 2000, "getLastErrorModes" : {}, "getLastErrorDefaults" : { "w" : 1, "wtimeout" : 0 }, "replicaSetId" : ObjectId("60e6f83923193faa336889d2") } }