Mitigue problemas de desempenho com um conjunto de réplicas PSA autogerenciado
Nesta página
Visão geral
Em um conjunto de réplicas de três nós com uma arquitetura PSA (primary-secondary-arbiter) ou um cluster fragmentado com shards PSA de três nós, um nó com dados inativo ou atrasados pode levar a problemas de desempenho.
Se um nó com dados cair, o outro nó se tornará o primary. Escreve com w:1
continua a ter sucesso nesse estado , mas escreve com preocupação de gravação "majority"
não pode ter êxito e o ponto de confirmação começa a atrasar. Se o conjunto de réplicas PSA contiver um secundário atrasado e exigir dois nós para fazer commit de uma alteração por maioria, seu ponto de commit também ficará atrasado.
Com um ponto de confirmação atrasado, duas coisas podem afetar o desempenho do cluster:
O mecanismo de armazenamento mantém todas as alterações que ocorrem após o ponto de confirmação no disco para manter um histórico durable. A E/S extra desses escritos tende a aumentar ao longo do tempo. Isso pode impactar bastante o desempenho de gravação e aumentar a pressão do cache.
O MongoDB permite que o oplog ultrapasse seu limite de tamanho configurado para evitar a exclusão do
majority commit point
.
Para reduzir a pressão de cache e aumentar o tráfego de gravação, configure votes: 0
e priority: 0
para o nó que não está disponível ou está atrasado. Para operações de gravação emitidas com "maioria", somente os nós votantes são considerados para determinar o número de nós necessários para realizar um commit por maioria. Definir a configuração do nó como votes: 0
reduz o número de nós necessários para fazer commit de uma gravação com write concern "majority"
de dois para um e permite que essas gravações sejam bem-sucedidas.
Depois que o secundário for recuperado, você poderá usar o método rs.reconfigForPSASet()
para definir votes
de volta para 1
.
Observação
Em versões anteriores do MongoDB, enableMajorityReadConcern
e --enableMajorityReadConcern
foram configuráveis permitindo a você desabilitar a preocupação de leitura padrão "majority"
que teve um efeito semelhante.
Procedimento
Para reduzir a pressão do cache e aumentar o tráfego de gravação para uma implantação com uma arquitetura primary-secondary-arbiter (PSA) de três nós, defina { votes: 0, priority: 0 }
para o secundário que está indisponível ou atrasado:
cfg = rs.conf(); cfg["members"][<array_index>]["votes"] = 0; cfg["members"][<array_index>]["priority"] = 0; rs.reconfig(cfg);
Se você quiser alterar a configuração do secundário posteriormente, use o método rs.reconfigForPSASet()
.