Configurar conjuntos de tags de conjunto de réplicas
Nesta página
Um membro ou membros do 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.
Use conjuntos de tags na read preference
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" : { ... } }
Adicionar tags aos membros.
Conecte
mongosh
ao conjunto de réplicas e users.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); 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). Ors.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" : { ... } } 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étodoreadPref()
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" } ] )
Write concerns personalizadas em Vários Datacenters
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:
uma instalação
VA
marcada comdc_va
uma instalação
CA
marcada comdc_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" : { ... } }
Adicione tags aos membros do conjunto de réplicas.
Conecte o
mongosh
ao conjunto de réplicas e utilize ors.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); 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 personalizadaMultipleDC
, que exige que a gravação se propague para dois membros com valores de tagdc_va
diferentes e um membro com qualquer valor de tagdc_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 paramembers[0]
emembers[4]
,"dc_va": 2
não estará satisfeito, pois eles têm o mesmo valor de tag"rack1"
.Use a write concern personalizada.
Para usar a write concern personalizada, passe o nome da write concern para a opção
w
na write concern:db.collection.insertOne( { id: "xyz", status: "A" }, { writeConcern: { w: "MultipleDC" } } )