Se puede configurar uno o más miembros del conjunto de réplicas con
tags:
{ "<tag1>": "<string1>", "<tag2>": "<string2>",... }
Para las operaciones de lectura, puede especificar un conjunto de etiquetas en las preferencias de lectura para ayudar a dirigir las operaciones de lectura a los miembros que tienen etiquetas específicas.
Para las operaciones de escritura, puede utilizar las etiquetas para crear una preocupación de escritura personalizada.
Usar conjuntos de etiquetas en la preferencia de lectura
Si uno o más miembros del conjunto de réplicas están asociados con, puede tags especificar un conjunto de etiquetas en la preferencia de lectura para identificar a esos miembros. Un conjunto de etiquetas es una matriz de documentos, donde 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 miembros coincidentes que cumplen los requisitos.
Nota
No se puede especificar un conjunto de etiquetas al especificar el modo de preferencia de primary lectura.
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" : { ... } }
Añadir etiquetas a los miembros.
Conectar al conjunto
mongoshde réplicas y use para agregar etiquetas a los miembros:rs.reconfig()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.
Ejecute para verificar la configuración del conjunto de
rs.conf()rs.conf()réplicas (se han omitido algunos campos para abreviar). 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 o más etiquetas específicas, en el
mongoshell conectado al conjunto de réplicas, puede usar el método parareadPref()especificar el modo de preferencia de lectura y el conjunto de etiquetas. Por ejemplo:Para dirigir las operaciones de lectura al secundario etiquetado con
"dc": "east""usage": "production"y, incluya el siguiente conjunto de etiquetas:db.collection.find({}).readPref( "secondary", [ { "dc": "east", "usage": "production" } ] ) Para dirigir una operación de lectura a los secundarios etiquetados con
"dc": "east"y, si no se encuentran, a los secundarios etiquetados 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 uno o más miembros del conjunto de réplicas están asociados tags con, puede configurar la opción del conjunto de réplicas settings.getLastErrorModes para crear una inquietud de escritura personalizada.
Dado un conjunto de réplicas de cinco miembros con miembros 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" : { ... } }
Agregue etiquetas a los miembros del conjunto 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); Cree un problema de escritura personalizado.
En la configuración del conjunto de réplicas, defina una preocupación de escritura personalizada en la
settings.getLastErrorModesconfiguración. Por ejemplo, a continuación se define la preocupación de escrituraMultipleDCpersonalizada, que requiere que la escritura se propague a dos miembros con diferentesdc_vavalores de etiqueta y a un miembro con cualquierdc_cavalor de etiqueta.conf = rs.conf(); conf.settings = { getLastErrorModes: { MultipleDC : { "dc_va": 2, "dc_ca": 1 } } }; rs.reconfig(conf); Nota
La solicitud de escritura
MultipleDCno se satisface si la escritura se propaga a dos miembros con la misma etiqueta"dc_va". Por ejemplo, si la escritura solo se ha propagado amembers[0]ymembers[4],"dc_va": 2no se satisface, 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", j: true } } )