Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /
Compilaciones

Rolling creaciones de índices en sets de réplicas

La creación de índices puede afectar el rendimiento del set de réplicas. Por defecto, MongoDB crea índices simultáneamente en todos los miembros con datos del set de réplicas. Para cargas de trabajo que no pueden tolerar una disminución en el rendimiento debido a la creación de índices, considere utilizar el siguiente procedimiento para construir índices de manera continua.

Las creaciones de índices progresivas retiran como máximo un nodo del set de réplicas a la vez, comenzando por los nodos secundarios, y compilan el índice en ese nodo como una instancia autónoma. Las creaciones de índices progresivas requieren al menos una elección de set de réplicas.

Nota

Para obtener información sobre cómo crear índices en Atlas, consulta la página de gestión de índices en la documentación de Atlas.

Para crear índices únicos utilizando el siguiente procedimiento, debes detener todas las escrituras en la colección durante este procedimiento.

Si no puedes detener todos los guardados en la colección durante este procedimiento, no utilices el procedimiento en esta página. En su lugar, compile su índice único en la colección emitiendo db.collection.createIndex() en el primario para un conjunto de réplicas.

Asegúrate de que tu oplog sea lo suficientemente grande para permitir que la operación de indexación o reindexación se complete sin retrasarse demasiado para ponerse al día. Consulta la documentación de dimensionamiento del oplog para obtener información adicional.

Para construir índices únicos

Para crear índices únicos usando el siguiente procedimiento, debe detener todas las escrituras en la colección durante la creación de índices. De lo contrario, puede terminar con datos inconsistentes entre los miembros del set de réplicas.

Advertencia

Si no puede detener todas las escrituras en la colección, no utilice el siguiente procedimiento para crear índices únicos.

Importante

El siguiente procedimiento para crear índices de forma continua se aplica a implementaciones de conjuntos de réplicas, no a clústeres fragmentados. Para conocer el procedimiento para clústeres fragmentados, consulte "Creación de índices de forma continua en clústeres fragmentados".

Ejecute los siguientes comandos en su nodo primario para ocultar el secundario que compilará el nuevo índice.

En este ejemplo, el secundario que compilará el nuevo índice es el tercer nodo en 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);

Detenga el proceso asociado a un secundario. Reinícielo después de realizar las siguientes actualizaciones de mongod configuración:

Si está utilizando un archivo de configuración, realice las siguientes actualizaciones de configuración:

  • Comenta la opción replication.replSetName.

  • Cambie el a net.port un puerto diferente. [1] Anote la configuración del puerto original como comentario.

  • Establece el parámetro disableLogicalSessionCacheRefresh en true en la sección setParameter.

Por ejemplo, el archivo de configuración actualizado para un set de réplicas incluirá contenido como el siguiente ejemplo:

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

Otras configuraciones (por ejemplo, storage.dbPath, etc.) permanecen iguales.

Y reinicia:

mongod --config <path/To/ConfigFile>

Si usas opciones de línea de comando, realiza las siguientes actualizaciones de configuración:

Por ejemplo, si tu set de réplicas normalmente se ejecuta en el puerto por defecto de 27017 y la opción --replSet, deberías especificar un puerto diferente, omitir la opción --replSet y configurar el parámetro disableLogicalSessionCacheRefresh en verdadero:

mongod --port 27217 --setParameter disableLogicalSessionCacheRefresh=true

Otras configuraciones (por ejemplo, --dbpath, etc.) permanecen iguales.

[1](1, 2) Al ejecutar en un puerto diferente, se asegura de que los demás miembros del conjunto de réplicas y todos los clientes no se comuniquen con el miembro mientras usted crea el mongod índice.

Conéctese directamente a la mongod instancia que se ejecuta como independiente en el nuevo puerto y cree el nuevo índice para esta instancia.

Por ejemplo, conecta mongosh a la instancia y usa el createIndex() para crear un índice ascendente en el campo username de la colección records:

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

Cuando se complete la creación de índices, apaga la instancia de mongod. Para devolver el nodo a su configuración original, deshaz los cambios de configuración que realizaste cuando iniciaste el nodo como autónomo. Luego, reinicia el nodo como miembro del set de réplicas.

Importante

Asegúrese de eliminar el parámetro disableLogicalSessionCacheRefresh.

Por ejemplo, para reiniciar el miembro de tu set de réplicas:

Si estás usando un archivo de configuración:

Por ejemplo:

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

Otras configuraciones (por ejemplo, storage.dbPath, etc.) permanecen iguales.

Y reinicia:

mongod --config <path/To/ConfigFile>

Si está utilizando opciones de línea de comandos,

  • Regresar al número de puerto original

  • Incluya la opción --replSet.

  • Remove parameter disableLogicalSessionCacheRefresh.

Por ejemplo:

mongod --port 27017 --replSet myRepl

Otras configuraciones (por ejemplo, --dbpath, etc.) permanecen iguales.

Importante

Permitir que la replicación se ponga al día en este nodo antes de comenzar el siguiente paso.

Ejecute el siguiente comando en su primario para desocultar el secundario que compiló el índice. En este ejemplo, el nodo secundario que construyó el índice es el tercer nodo en cfg.members.

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

Una vez que el nodo se ponga al día con los demás nodos del conjunto, repite el procedimiento un nodo a la vez para los nodos secundarios restantes:

  1. Oculta y reinicia un secundario.

  2. Construir el índice.

  3. Reinicie el programa mongod como miembro del conjunto de réplicas.

Cuando todos los secundarios tengan el nuevo índice, baje el nivel del primario, reinícielo como independiente utilizando el procedimiento descrito anteriormente y construya el índice en el primario anterior:

  1. Utilice el rs.stepDown() método en para reducir el principal. Tras una reducción exitosa, el principal actual se convierte en secundario y los miembros del conjunto de réplicas eligen un nuevo mongosh principal.

  2. Oculta y reinicia un secundario.

  3. Construir el índice.

  4. Reinicie el programa mongod como miembro del conjunto de réplicas.

Volver

Compilaciones

En esta página