Menu Docs

Página inicial do DocsDesenvolver aplicaçõesManual do MongoDB

Configurar conjuntos de tags de conjunto de réplicas

Nesta página

  • Use conjuntos de tags na read preference
  • Write concerns personalizadas em Vários Datacenters

Um membro ou membros de um conjunto de réplicas podem ser configurados com tags:

{ "<tag1>": "<string1>", "<tag2>": "<string2>",... }

Para operações de leitura, você pode especificar um conjunto de tags nas read preference para ajudar a direcionar as operações de leitura para membros que tenham tags específicas.

Para operações de gravação, você pode usar as tags para criar uma write concernpersonalizada.

Se um membro ou membros do conjunto de réplicas estiverem associados a tags, você poderá especificar um conjunto de tags na read preference para direcionar esses membros. Um conjunto de tags é um conjunto de documentos, onde cada documento contém a(s) tag(s) e o(s) par(es) de valores. As especificações são testadas para uma correspondência ser encontrada. Uma vez encontrada, essa especificação é usada para encontrar todos os membros correspondentes elegíveis.

Observação

Não é possível especificar um conjunto de tags ao especificar o modo de read preference primary.

Por exemplo, um conjunto de réplicas tem a seguinte configuração de conjunto de réplicas (alguns dos campos foram omitidos por brevidade):

{
"_id" : "rs0",
"version" : 1,
"protocolVersion" : NumberLong(1),
"writeConcernMajorityJournalDefault" : true,
"members" : [
{ "_id" : 0, "host" : "mongodb0.example.net:27017", ..., "tags": { }, ... },
{ "_id" : 1, "host" : "mongodb1.example.net:27017", ..., "tags": { }, ... },
{ "_id" : 2, "host" : "mongodb2.example.net:27017", ..., "tags": { }, ... }
],
"settings" : {
...
}
}
  1. Adicionar tags aos membros.

    Conecte mongosh ao conjunto de réplicas e use rs.reconfig() para adicionar tags aos membros:

    conf = rs.conf();
    conf.members[0].tags = { "dc": "east", "usage": "production" };
    conf.members[1].tags = { "dc": "east", "usage": "reporting" };
    conf.members[2].tags = { "dc": "west", "usage": "production" };
    rs.reconfig(conf);
  2. Verificar a configuração do conjunto de réplicas.

    Execute o rs.conf() para verificar a configuração do conjunto de réplica (alguns dos campos foram omitidos por brevidade). O rs.conf() retorna um documento semelhante ao seguinte:

    {
    "_id" : "rs0",
    "version" : 2,
    "protocolVersion" : NumberLong(1),
    "writeConcernMajorityJournalDefault" : true,
    "members" : [
    {
    "_id" : 0,
    "host" : "mongodb0.example.net:27017",
    ...
    "tags" : {
    "dc": "east",
    "usage": "production"
    },
    ...
    },
    {
    "_id" : 1,
    "host" : "mongodb1.example.net:27017",
    ...
    "tags" : {
    "dc": "east",
    "usage": "reporting"
    },
    ...
    },
    {
    "_id" : 2,
    "host" : "mongodb2.example.net:27017",
    ...
    "tags" : {
    "dc": "west",
    "usage": "production"
    },
    ...
    }
    ],
    "settings" : {
    ...
    }
    }
  3. Especifique os conjuntos de tags na read preference.

    Para direcionar as operações de leitura para os secundários marcados com uma tag específica, no shell mongo conectado ao conjunto de réplicas, você pode usar o método readPref() para especificar o modo de read preference e o conjunto de tags. Por exemplo,

    • Para direcionar as operações de leitura para a tag secundária com tanto "dc": "east" quanto "usage": "production", inclua o seguinte conjunto de tags:

      db.collection.find({}).readPref( "secondary", [ { "dc": "east", "usage": "production" } ] )
    • Para direcionar uma operação de leitura para os segundários marcados com "dc": "east" e, se não for encontrado, para os segundários marcados com "usage": "production", inclua o seguinte conjunto de tags:

      db.collection.find({}).readPref( "secondary", [ { "dc": "east"}, { "usage": "production" } ] )

    Dica

    Veja também:

Se um membro ou membros do conjunto de réplicas estiverem associados a tags, você poderá configurar a definição settings.getLastErrorModes do conjunto de réplicas para criar uma preocupação de gravação personalizada.

Dado um conjunto de réplicas de cinco membros com membros em dois data centers:

  1. uma instalação VA marcada com dc_va

  2. uma instalação CA marcada com dc_ca

{
"_id" : "rs0",
"version" : 1,
"protocolVersion" : NumberLong(1),
"writeConcernMajorityJournalDefault" : true,
"members" : [
{ "_id" : 0, "host" : "mongodb0.example.net:27017", ..., "tags": { }, ... },
{ "_id" : 1, "host" : "mongodb1.example.net:27017", ..., "tags": { }, ... },
{ "_id" : 2, "host" : "mongodb2.example.net:27017", ..., "tags": { }, ... }
{ "_id" : 3, "host" : "mongodb3.example.net:27017", ..., "tags": { }, ... }
{ "_id" : 4, "host" : "mongodb4.example.net:27017", ..., "tags": { }, ... }
],
"settings" : {
...
}
}
  1. Adicione tags aos membros do conjunto de réplicas.

    Conecte o mongosh ao conjunto de réplicas e utilize o rs.reconfig() para adicionar tags aos membros:

    conf = rs.conf();
    conf.members[0].tags = { "dc_va": "rack1"};
    conf.members[1].tags = { "dc_va": "rack2"};
    conf.members[2].tags = { "dc_ca": "rack1"};
    conf.members[3].tags = { "dc_ca": "rack2"};
    conf.members[4].tags = { "dc_va": "rack1"};
    rs.reconfig(conf);
  2. Crie uma write concern personalizada.

    Na configuração do conjunto de réplicas, defina uma write concern personalizada na configuração settings.getLastErrorModes. Por exemplo, o texto a seguir define a preocupação de gravação personalizada MultipleDC, que exige que a gravação se propague para dois membros com valores de tag dc_va diferentes e um membro com qualquer valor de tag dc_ca.

    conf = rs.conf();
    conf.settings = { getLastErrorModes: { MultipleDC : { "dc_va": 2, "dc_ca": 1 } } };
    rs.reconfig(conf);

    Observação

    A write concern MultipleDC não será satisfeita se a gravação for propagada para dois membros com a mesma tag "dc_va" . Por exemplo, se a gravação tiver sido propagada apenas para members[0] e members[4], "dc_va": 2 não estará satisfeito, pois eles têm o mesmo valor de tag "rack1".

  3. Use a write concern personalizada.

    Para usar a write concern personalizada, passe o nome da write concern para a opçãow na write concern:

    db.collection.insertOne(
    { id: "xyz", status: "A" },
    { writeConcern: { w: "MultipleDC" } }
    )
← Sincronizar novamente um membro de um conjunto de réplicas