Menu Docs

Crie uma compilação de índice contínuo em conjuntos de réplicas

As compilações de índice contínuo são uma alternativa às compilações de índice padrão.

Use somente uma compilação de índice contínuo se sua implantação corresponder a um dos seguintes casos:

  • Se a utilização média da CPU exceder (N-1)/N-10%, em que N é o número de threads de CPU disponíveis para mongod

  • Se a taxa de preenchimento do cache do WiredTiger exceder regularmente 90&

Observação

Se seu sistema não atender a esses critérios, use a construção de índice padrão.

Para criar índices únicos usando o procedimento a seguir, você deve parar todas as gravações na collection 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 Criar uma 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 mongod . 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 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ó no 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.