Crie uma compilação de índice contínuo em conjuntos de réplicas
Sobre esta tarefa
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.
Considerações
Unique Indexes
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.
Tamanho do log
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.
Pré-requisitos
- 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.
Procedimento
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.
1. Oculte e reinicie um secundário.
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);
2. Pare um secundário e reinicie como autônomo.
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
comotrue
na seçãosetParameter
.
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:
Remova
--replSet
.Configure o parâmetro
disableLogicalSessionCacheRefresh
paratrue
na opção--setParameter
.
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. |
3. Construa o Índice.
Conecte-se diretamente à instânciamongod
em 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 } )
4. Reinicie o programa mongod
como membro do conjunto de réplicas.
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:
Reverta para o número da porta original.
Descomente o
replication.replSetName
.Remova o parâmetro
disableLogicalSessionCacheRefresh
da seçãosetParameter
.
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>
Importante
Permita que a replicação alcance este membro antes de iniciar a próxima etapa.
5. Mostrar o secundário.
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);
6. Repita o procedimento para os secundários restantes.
Quando o membro alcançar os outros membros do conjunto, repita o procedimento um membro por vez para os membros secundários restantes:
7. Construa o índice no primário.
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:
Use o método
rs.stepDown()
emmongosh
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.Reinicie o programa mongod como um membro do conjunto de réplicas.