Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ /

Construção contínua de índices em conjuntos réplicas

Nesta página

  • Considerações
  • Pré-requisitos
  • Procedimento

As compilações de índice podem afetar o desempenho do conjunto de réplicas. Por padrão, o MongoDB cria índices simultaneamente em todos os membros do conjunto de réplicas com dados portadores. Para cargas de trabalho que não toleram a diminuição do desempenho devido à compilação de índices, considere usar o procedimento a seguir para criar índices de forma contínua.

As construções de índices contínuas retiram no máximo um membro do conjunto de réplicas de cada vez, começando pelos membros secundários, e constroem o índice nesse membro como standalone. As construções de índices contínuas exigem pelo menos uma eleição de conjunto de réplicas.

Observação

Para obter informações sobre como criar índices no Atlas, consulte a página degerenciamento de índice do na documentação do Atlas .

Para criar índices únicos usando o procedimento a seguir, você deve parar todas as gravações da coleção durante o procedimento.

Se não for possível parar todos os escritos na coleção durante este procedimento, não use o procedimento nesta página. Em vez disso, crie seu índice único na coleção emitindo db.collection.createIndex() no principal para um conjunto de réplicas.

Certifique-se de que seu oplog seja grande o suficiente para permitir que a operação de indexação ou reindexação seja concluída sem ficar muito para trás para recuperar o atraso. Consulte a documentação de dimensionamento do oplog para obter informações adicionais.

Para construir índices únicos

Para criar índices únicos usando o procedimento a seguir, você deve interromper todas as gravações na coleção durante a criação do índice. Caso contrário, você pode acabar com dados inconsistentes nos membros do conjunto de réplica.

Aviso

Se não for possível parar todos os escritos na coleção, não use o procedimento a seguir para criar índices únicos.

Importante

O procedimento a seguir para criar índices de forma contínua se aplica a sistemas de conjunto de réplicas, e não a clusters fragmentados. Para o procedimento para clusters fragmentados, consulte Rolling Index Builds on Sharded Clusters.

Execute os seguintes comandos no seu nó primário para ocultar o secundário que criará o novo índice.

Neste exemplo, o secundário que construirá o novo índice é o terceiro nó em cfg.members.

var cfg = rs.conf();
// Record originalPriority so that you can reset it later.
var originalPriority = cfg.members[2].priority;
cfg.members[2].priority = 0;
cfg.members[2].hidden = 1;
rs.reconfig(cfg);

Interrompa o processo mongod associado a uma secundária. Reinicie depois de fazer as seguintes atualizações de configuração:

Se você estiver usando um arquivo de configuração, faça as seguintes atualizações de configuração:

  • Comente a opção replication.replSetName.

  • Mude net.port para uma porta diferente. [1] Anote a configuração original da porta como comentário.

  • Defina o parâmetro disableLogicalSessionCacheRefresh como true na seção setParameter.

Por exemplo, o arquivo de configuração atualizado para um membro do conjunto de réplicas incluirá conteúdo como o exemplo a seguir:

net:
bindIp: localhost,<hostname(s)|ip address(es)>
port: 27217
# port: 27017
#replication:
# replSetName: myRepl
setParameter:
disableLogicalSessionCacheRefresh: true

Outras configurações (por exemplo storage.dbPath, etc.) permanecem inalteradas.

E reinicie:

mongod --config <path/To/ConfigFile>

Se estiver usando opções de linha de comando, faça as seguintes atualizações de configuração:

Por exemplo, se o membro do conjunto de réplicas normalmente for executado com a porta padrão de 27017 e a opção --replSet, você deve especificar uma porta diferente, omitir a opção --replSet e definir o parâmetro disableLogicalSessionCacheRefresh como verdadeiro:

mongod --port 27217 --setParameter disableLogicalSessionCacheRefresh=true

Outras configurações (por exemplo --dbpath, etc.) permanecem inalteradas.

[1](1, 2) Ao executar o mongod em uma porta diferente, você garante que os outros membros do conjunto de réplicas e todos os clientes não entrem em contato com o membro enquanto você estiver construindo o índice.

Conecte-se diretamente à instânciamongodem execução como standalone na nova porta e crie o novo índice para essa instância.

Por exemplo, conecte mongosh à instância e use createIndex() para criar um índice ascendente no campo username da coleção records:

db.records.createIndex( { username: 1 } )

Quando a criação do índice for concluída, encerre a instância . Para retornar o nó à configuração original, desfaça as alterações de configuração que você fez quando iniciou o nó como autônomo. Em seguida, reinicie o nó como membro do conjunto de mongod réplicas.

Importante

Certifique-se de remover o parâmetro disableLogicalSessionCacheRefresh .

Por exemplo, para reiniciar seu membro do conjunto de réplicas:

Se você estiver usando um arquivo de configuração:

Por exemplo:

net:
bindIp: localhost,<hostname(s)|ip address(es)>
port: 27017
replication:
replSetName: myRepl

Outras configurações (por exemplo storage.dbPath, etc.) permanecem inalteradas.

E reinicie:

mongod --config <path/To/ConfigFile>

Se você estiver usando opções de linha de comando,

  • Reverta para o número da porta original.

  • Inclua a opção --replSet .

  • Remove parameter disableLogicalSessionCacheRefresh.

Por exemplo:

mongod --port 27017 --replSet myRepl

Outras configurações (por exemplo --dbpath, etc.) permanecem inalteradas.

Importante

Permita que a replicação alcance este membro antes de iniciar a próxima etapa.

Execute o seguinte comando no seu primary para exibir o nó secundário que criou o índice. Neste exemplo, o nó secundário que criou o índice é o terceiro nó em cfg.members.

var cfg = rs.conf();
cfg.members[2].priority = originalPriority;
cfg.members[2].hidden = false;
rs.reconfig(cfg);

Quando o membro alcançar os outros membros do conjunto, repita o procedimento um membro por vez para os membros secundários restantes:

  1. Oculte e reinicie um secundário.

  2. Construa o índice.

  3. Reinicie o programa mongod como um membro do conjunto de réplicas.

Quando todos os secundários tiverem o novo índice, retire o primário, reinicie-o como standalone usando o procedimento descrito acima e crie o índice no primário anterior:

  1. Use o método rs.stepDown() em mongosh para reduzir o primário. Após a redução bem-sucedida, o primário atual se torna secundário e os nós do conjunto de réplicas elegem um novo primário.

  2. Oculte e reinicie um secundário.

  3. Construa o índice.

  4. Reinicie o programa mongod como um membro do conjunto de réplicas.

Voltar

Builds