Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / /

rs.reconfigForPSASet()

Nesta página

  • Sintaxe
  • Comportamento
  • Exemplo
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

Para obter detalhes sobre o comportamento desse método, consulte Comportamento.

O método rs.reconfigForPSASet() tem a seguinte sintaxe:

rs.reconfigForPSASet(
memberIndex: <num>,
config: <configuration>,
{
"force" : <boolean>,
"maxTimeMS" : <int>
}
)
Parâmetro
Tipo
Descrição
memberIndex
inteiro
O índice do secundário que está sendo adicionado ou modificado.
config
documento
Um documento que especifica a nova configuração de um conjunto de réplicas.
force
booleano

Opcional

Aviso

A execução do método rs.reconfigForPSASet() com force: true não é recomendada e pode fazer com que as gravações confirmadas sejam revertidas.

Especifique true para 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 ou indesejado, incluindo a reversão de "majority" gravações confirmadas.

maxTimeMS
inteiro

Opcional

Especifica um limite de tempo cumulativo em milissegundos para o processamento de cada reconfiguração durante a operação rs.reconfigForPSASet(). Por padrão, o rs.reconfigForPSASet() espera indefinidamente que as configurações da réplica propaguem para a maioria dos membros do conjunto de réplica.

O método rs.reconfigForPSASet() reconfigura o conjunto de réplicas em duas etapas:

  1. O método reconfigura seu conjunto de réplicas para adicionar ou modificar um secundário com { votes: 1, priority: 0 } .

  2. 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 comando rs.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.

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);
  1. 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 local cfg.

  2. A segunda declaração adiciona o novo secundário à array members. Nessa configuração, o novo secundário é adicionado em memberIndex 1. O memberIndex é o mesmo que o índice da array. Para obter configurações adicionais, consulte as configurações do conjunto de réplicas.

  3. A última declaração chama o método rs.reconfigForPSASet() com o memberIndex 1 e o cfg modificado. O memberIndex é a posição da array do novo nó na array members. 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")
    }
    }

Dica

Veja também:

Voltar

rs.reconfig()

Próximo

rs.remove()