Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /
preferencia de lectura
/ / /

Configurar conjuntos de etiquetas de set de réplicas

Se puede configurar uno o más miembros del conjunto de réplicas con tags:

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

Para operaciones de lectura, puedes especificar un conjunto de etiquetas en las preferencias de lectura para que las operaciones de lectura se dirijan a miembros que tienen etiquetas específicas.

Para las operaciones de escritura, puedes usar las etiquetas para crear un nivel de confirmación de escritura (write concern) personalizado.

Si uno o varios nodos del conjunto de réplicas están asociados con tags, puedes especificar un conjunto de etiquetas en la preferencia de lectura para orientar a estos nodos. Un conjunto de etiquetas es un arreglo de documentos en el que cada documento contiene los pares de etiqueta y valor. Las especificaciones se prueban en orden hasta encontrar una coincidencia. Una vez encontrada, esa especificación se utiliza para encontrar todos los nodos coincidentes elegibles.

Nota

No se puede especificar un conjunto de etiquetas al especificar el modo de preferencia de lectura primary.

Por ejemplo, un conjunto de réplicas tiene la siguiente configuración de conjunto de réplicas (algunos de los campos se han omitido para mayor brevedad):

{
"_id" : "rs0",
"version" : 1,
"protocolVersion" : Long(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. Agrega etiquetas a los nodos.

    Conecte al mongosh rs.reconfig() conjunto de réplicas y use para agregar etiquetas a los miembros:

    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 la configuración del conjunto de réplicas.

    Ejecutar rs.conf() para verificar la configuración del set de réplicas (algunos de los campos se han omitido para mayor brevedad). El rs.conf() devuelve un documento similar al siguiente:

    {
    "_id" : "rs0",
    "version" : 2,
    "protocolVersion" : Long(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 conjuntos de etiquetas en la preferencia de lectura.

    Para dirigir las operaciones de lectura a los secundarios etiquetados con una etiqueta determinada, en el mongo shell conectado al conjunto de réplicas, puedes utilizar el método readPref() para especificar el modo de preferencia de lectura y el conjunto de etiquetas. Por ejemplo,

    • Para dirigir las operaciones de lectura a la copia secundaria etiquetada con ambos "dc": "east" y "usage": "production", incluya el siguiente conjunto de etiquetas:

      db.collection.find({}).readPref( "secondary", [ { "dc": "east", "usage": "production" } ] )
    • Para dirigir una operación de lectura a las secundarias etiquetadas con "dc": "east", y si no se encuentra, a las secundarias etiquetadas con "usage": "production", incluya el siguiente conjunto de etiquetas:

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

    Tip

Si un miembro del set de réplicas o varios miembros están asociados con tags, puedes configurar el ajuste settings.getLastErrorModes del set de réplicas para crear un nivel de confirmación de escritura (write concern) personalizado.

Dado un set de réplicas de cinco nodos con nodos en dos centros de datos:

  1. una instalación VA etiquetada dc_va

  2. una instalación CA etiquetada dc_ca

{
"_id" : "rs0",
"version" : 1,
"protocolVersion" : Long(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. Agregar etiquetas a los miembros del set de réplicas.

    Conecte al mongosh rs.reconfig() conjunto de réplicas y use para agregar etiquetas a los miembros:

    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. Crea un nivel de confirmación de escritura (write concern) personalizado.

    En la configuración del set de réplicas, definí un nivel de confirmación de escritura (write concern) personalizado en la configuración settings.getLastErrorModes. Por ejemplo, lo siguiente define el nivel de confirmación de escritura (write concern) personalizado MultipleDC que requiere que la escritura se propague a dos miembros con valores de etiqueta dc_va diferentes y a un miembro con cualquier valor de etiqueta dc_ca.

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

    Nota

    El MultipleDC nivel de confirmación de escritura (write concern) no se satisface si la escritura se propaga a dos nodos con la misma etiqueta "dc_va". Por ejemplo, si el guardado se ha propagado solo a members[0] y members[4], "dc_va": 2 no se cumple ya que tienen el mismo valor de etiqueta "rack1".

  3. Utilice la preocupación de escritura personalizada.

    Para utilizar la preocupación de escritura personalizada, pase el nombre de la w preocupación de escritura a la opción en la preocupación de escritura:

    db.collection.insertOne(
    { id: "xyz", status: "A" },
    { writeConcern: { w: "MultipleDC" } }
    )

Volver

Conjuntos de etiquetas

En esta página