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.
Usa conjuntos de etiquetas en la preferencia de lectura
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" : { ... } }
Agrega etiquetas a los nodos.
Conecte al
mongoshrs.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); 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). Elrs.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" : { ... } } 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
mongoshell conectado al conjunto de réplicas, puedes utilizar el métodoreadPref()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" } ] )
Problemas de escritura personalizados en múltiples centros de datos
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:
una instalación
VAetiquetadadc_vauna instalación
CAetiquetadadc_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" : { ... } }
Agregar etiquetas a los miembros del set de réplicas.
Conecte al
mongoshrs.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); 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) personalizadoMultipleDCque requiere que la escritura se propague a dos miembros con valores de etiquetadc_vadiferentes y a un miembro con cualquier valor de etiquetadc_ca.conf = rs.conf(); conf.settings = { getLastErrorModes: { MultipleDC : { "dc_va": 2, "dc_ca": 1 } } }; rs.reconfig(conf); Nota
El
MultipleDCnivel 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 amembers[0]ymembers[4],"dc_va": 2no se cumple ya que tienen el mismo valor de etiqueta"rack1".Utilice la preocupación de escritura personalizada.
Para utilizar la preocupación de escritura personalizada, pase el nombre de la
wpreocupación de escritura a la opción en la preocupación de escritura:db.collection.insertOne( { id: "xyz", status: "A" }, { writeConcern: { w: "MultipleDC" } } )