Os drivers do MongoDB usam um algoritmo de seleção de servidor para escolher qual membro do conjunto de réplicas usar ou, quando conectados a várias instâncias mongos , qual instância mongos usar.
A seleção do servidor ocorre uma vez por operação.
Observação
As transações que contêm operações de leitura devem usar a preferência de leitura primary. Todas as operações em uma determinada transação devem ser roteadas para o mesmo nó.
A seleção do servidor ocorre uma vez por operação e é regida pelas configurações de preferência de leitura e localThresholdMS para determinar a elegibilidade do membro para leituras. A preferência de leitura é reavaliada para cada operação.
Modo de preferência de leitura | |
|---|
| O driver seleciona o principal.
|
| O driver monta uma lista de membros secundários elegíveis. maxStalenessSeconds e conjuntos de tags especificados na preferência de leitura podem restringir ainda mais a elegibilidade dos membros. Se a lista de membros elegíveis não estiver vazia, o driver determinará qual membro elegível é o "mais próximo" (ou seja, o membro com o menor tempo médio de ida e volta da rede) e calculará uma janela de latência adicionando o tempo médio de ida e volta desse servidor "mais próximo" e o localThresholdMS. O driver utiliza esta janela de latência para analisar a lista de membros elegíveis para os membros que se enquadram nesta janela. A partir desta lista de membros qualificados que se enquadram na janela de latência, o driver escolhe aleatoriamente um membro qualificado.
|
| O driver monta uma lista de membros qualificados (primários e secundários). maxStalenessSeconds e conjuntos de tags especificados na preferência de leitura podem limitar ainda mais a elegibilidade dos membros. Se a lista de membros elegíveis não estiver vazia, o driver determinará qual membro elegível é o "mais próximo" (ou seja, o membro com o menor tempo médio de ida e volta da rede) e calculará uma janela de latência adicionando o tempo médio de ida e volta desse servidor "mais próximo" e o localThresholdMS . O driver utiliza esta janela de latência para analisar a lista de membros elegíveis para os membros que se enquadram nesta janela. A partir desta lista de membros qualificados que se enquadram na janela de latência, o driver escolhe aleatoriamente um membro qualificado.
|
| Se o primário estiver disponível, o driver selecionará o primário. Se o primário não estiver disponível, a seleção do servidor seguirá o processo para que a preferência de leitura secondary selecione um membro secundário qualificado.
|
| Após o processo de seleção do servidor para a preferência de leitura secondary, se uma lista de membros secundários elegíveis não estiver vazia, o driver escolherá um membro secundário qualificado. Caso contrário, se a lista estiver vazia, o driver seleciona o principal.
|
Se houver mais de uma instância mongos na lista de sementes de conexão, o driver determinará qual mongos é o "mais próximo" (ou seja, o nó com o menor tempo médio de ida e volta da rede) e calculará a janela de latência adicionando o tempo médio de ida e volta desta instância mongos "mais próxima" e do localThresholdMS. A carga do driver se equilibra aleatoriamente entre as mongos instâncias que se enquadram na janela de latência.
Observação
localThresholdMS direciona a seleção do servidor para alvos locais de menor latência. A configuração não pode remover a topologia de rede entre regiões que um único endpoint privado cria, nem garantir que todas as conexões permaneçam na região local. Nesta configuração, um cliente ainda pode se conectar por meio de um mongos em outra região.
Para clusters fragmentados que têm shards de conjunto de réplicas, o mongos aplica a preferência de leitura ao ler a partir dos shards. A seleção do servidor é regida pela preferência de leitura e pelas configurações replication.localPingThresholdMs. A preferência de leitura é reavaliada para cada operação.
Importante
A partir do MongoDB 8.0, as leituras distribuídas estão obsoletas. As queries que especificam a read preference nearest não usam mais leituras protegidas por padrão. Se você especificar explicitamente uma leitura com hedge, o MongoDB executará uma leitura com hedge e registrará um aviso.
mongos suporta leituras com cobertura para modos de preferência de leitura que não sejamprimary . Ou seja, mongos pode enviar uma leitura adicional para outro membro, se disponível, para proteger a operação de leitura se estiver usando preferências de leitura que não sejamprimary . A leitura adicional enviada para proteger a operação de leitura usa o valor maxTimeMS de maxTimeMSForHedgedReads.
As leituras distribuídas são suportadas para as seguintes operações:
Para usar leituras com hedge:
Modo de preferência de leitura | |
|---|
| O mongos seleciona o principal.
|
| O mongos monta uma lista de membros secundários elegíveis. maxStalenessSeconds e conjuntos de tags especificados na preferência de leitura podem restringir ainda mais a elegibilidade dos membros. Se a lista de membros elegíveis não estiver vazia, o determina qual membro elegível é o " mais próximo " (ou seja, o membro com a menor média de tempo de ida e volta mongos replication.localPingThresholdMs da rede) e --localThreshold calcula uma janela de latência adicionando o tempo médio de ida e volta desse servidor " " mais próximo e o (ou (opção de linha de comando). O mongos usa essa janela de latência para reduzir a lista de membros elegíveis aos membros que se enquadram nessa janela. A partir desta lista de membros elegíveis que se enquadram na janela de latência, o mongos escolhe aleatoriamente um membro elegível.
|
| O mongos reúne uma lista de membros elegíveis (primários e secundários). maxStalenessSeconds e conjuntos de tags especificados na preferência de leitura podem limitar ainda mais a elegibilidade dos membros. Se a lista de membros elegíveis não estiver vazia, o mongos determina qual membro elegível é o "mais próximo" (ou seja, o membro com o menor tempo médio de ida e volta da rede) e calcula uma janela de latência adicionando o tempo médio de ida e volta desse servidor "mais próximo" e a opção de linha de comando replication.localPingThresholdMs (ou --localThreshold ) . O mongos usa essa janela de latência para reduzir a lista de membros elegíveis aos membros que se enquadram nessa janela. A partir desta lista de membros elegíveis que se enquadram na janela de latência, o mongos escolhe aleatoriamente um membro elegível.
|
| Se a primária estiver disponível, o mongos selecionará a primária. Se o primário não estiver disponível, a seleção do servidor seguirá o processo para a preferência de leitura secondary.
|
| Após o processo de seleção do servidor para a preferência de leitura secondary, se uma lista de membros secundários elegíveis não estiver vazia, o mongos escolherá um secundário qualificado. Se a lista de membros secundários elegíveis estiver vazia ou se mongos estiver usando leituras com cobertura e apenas um secundário elegível estiver disponível, mongos selecionará o primário.
|