Definição
rs.reconfigForPSASet( memberIndex, config, { options } )Novidade 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 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
The rs.reconfigForPSASet() method has the following syntax:
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 WARNING: Running the Especifique A reconfiguração forçada pode resultar em comportamento inesperado ou indesejado, incluindo a reversão de |
| inteiro | Opcional Specifies a cumulative time limit in milliseconds for processing each reconfiguration during the |
Comportamento
The rs.reconfigForPSASet() method reconfigures your replica set in two steps:
O método reconfigura seu conjunto de réplicas para adicionar ou modificar um secundário com
{ votes: 1, priority: 0 }.Once the added or modified secondary has caught up with all committed writes, the method reconfigures the secondary to have the
priorityspecified in thers.reconfigForPSASet()command ({ 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") } }
The following sequence of operations add a new secondary to the replica set. The operations are issued in the mongosh shell while connected to the primary.
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 emmemberIndex1. OmemberIndexé o mesmo que o índice da array. Para obter configurações adicionais, consulte as configurações do conjunto de réplicas.The last statement calls the
rs.reconfigForPSASet()method with thememberIndex1and the modifiedcfg. ThememberIndexis the array position of the new member in themembersarray. Upon successful reconfiguration, the replica set configuration resembles the following:{ "_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") } }