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 de três membros existente com uma arquitetura PSA para se tornar um nó votante e portador de dados com um
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") } }