Docs Menu
Docs Home
/ /
Creaciones de índices continuas

Crear una compilación de índice móvil en conjuntos de réplicas

Las compilaciones de índices móviles son una alternativa a Construcciones de índice predeterminadas.

Solamente usa una creación continua de índices si tu implementación cumple con uno de los siguientes casos:

  • Si su utilización promedio de CPU excede (N-1)/N-10%, donde N es la cantidad de subprocesos de CPU disponibles para mongod

  • Si la tasa de llenado de caché de WiredTiger excede regularmente el 90%

Advertencia

Evita realizar procesos de creación de índices en modo continuo y replicado al mismo tiempo, ya que podría generar problemas inesperados, como compilaciones fallidas y bucles de fallos.

Nota

Si su implementación no cumple con estos criterios, utilice la compilación de índice predeterminada.

Tip

Con Atlas, puede escalar temporalmente su clúster para cumplir con los requisitos de una compilación de índice tradicional. Sin embargo, Atlas cobra por escalar su clúster. Consulte Costos de configuración del clúster para obtener más información.

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

Si no puede detener todas las escrituras en la colección durante este procedimiento, no utilice el procedimiento de esta página. En su lugar, cree su índice único en la colección emitiendo db.collection.createIndex() en el primario para un conjunto de réplicas.

Asegúrese de que su registro de operaciones sea lo suficientemente grande como para permitir que la operación de indexación o reindexación se complete sin retrasarse demasiado. Consulte la documentación sobre el tamaño del registro de operaciones para obtener más información.

Las compilaciones de índice continuo reducen la resiliencia de su clúster y aumentan la duración de la compilación.

Para construir índices únicos

Para crear índices únicos mediante el siguiente procedimiento, debe detener todas las escrituras en la colección durante la creación del índice. De lo contrario, podría obtener datos incoherentes entre los miembros del conjunto 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 "Crear compilaciones de índices continuos en clústeres fragmentados".

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

En este ejemplo, el secundario que construirá 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:

  • Comente la replication.replSetName opción.

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

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

Por ejemplo, el archivo de configuración actualizado para un miembro del conjunto 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 utiliza opciones de línea de comandos, realice las siguientes actualizaciones de configuración:

Por ejemplo, si el miembro de su conjunto de réplicas normalmente se ejecuta en el puerto predeterminado 27017 y la opción, deberá especificar un puerto diferente, omitir --replSet la --replSet opción y establecer el disableLogicalSessionCacheRefresh parámetro como 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, conectemongosha la instancia y usecreateIndex()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 del conjunto 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 --replSet opción.

  • Remove parameter disableLogicalSessionCacheRefresh.

Por ejemplo:

mongod --port 27017 --replSet myRepl

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

Importante

Permita que la replicación alcance a este miembro antes de comenzar el siguiente paso.

Ejecute el siguiente comando en su nodo principal para mostrar el nodo secundario que creó el índice. En este ejemplo, el nodo secundario que creó 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 miembro alcance a los otros miembros del conjunto, repita el procedimiento un miembro a la vez para los miembros secundarios restantes:

  1. Ocultar y reiniciar 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. Ocultar y reiniciar un secundario.

  3. Construir el índice.

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

Volver

Creaciones de índices continuas

En esta página