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.
As informações nesta página se aplicam a sistemas hospedados nos seguintes ambientes:
Observação
Transações distribuídas que contêm operações de leitura devem usar a read preference primary
. Todas as operações em uma determinada transação devem ser roteadas para o mesmo membro.
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 | Processo de seleção |
---|
| 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
é a "mais próxima" (ou seja, o membro com o menor tempo médio de viagem de ida e volta da rede) e calculará a janela de latência adicionando o tempo médio de viagem de ida e volta dessa instância "mais próxima" mongos
e a localThresholdMS
. O driver fará o balanceamento de carga aleatoriamente entre as mongos
instâncias que se enquadram na janela de latência.
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.
mongos
suporta leituras distribuídas para modos de preferências de leitura nãoprimary
. 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 sejam deprimary
. A leitura adicional enviada para proteger a operação de leitura utiliza 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 | Processo de seleção |
---|
| 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. Se estiver usando leituras protegidas, mongos selecionará um segundo membro qualificado, se disponí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 estiver usando leituras protegidas, mongos selecionará um segundo membro qualificado, se disponível.
|
| Se a primária estiver disponível, o mongos selecionará a primária. Se a primária não estiver disponível ou se mongos estiver usando leituras com cobertura, a seleção do servidor seguirá o processo para a preferência de leitura secondary . Para leituras cobertas, Se o primário estiver disponível, o mongos selecionará um único secundário qualificado, se disponível. Se o primário não estiver disponível, mongos selecionará dois secundários qualificados, se disponíveis.
|
| 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 estiver usando leituras com cobertura, mongos seleciona outra secundária, se disponível. 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.
|