Puede agregar nodos a una partición existente en un Clúster fragmentado. Es posible que desee agregar un miembro a un fragmento por las mismas razones que a cualquier conjunto de réplicas. Por ejemplo, aumentar el número de miembros proporciona candidatos adicionales para reemplazar un clúster principal en caso de conmutación por error. Además, los miembros adicionales aumentan la redundancia de datos y la disponibilidad del conjunto de réplicas.
Para obtener más información, consulte Arquitecturas de implementación de conjuntos de réplicas.
Acerca de esta tarea
Antes de MongoDB 5.0, un secundario recién añadido seguía contando como miembro con derecho a voto, aunque no podía realizar lecturas ni convertirse en principal hasta que sus datos fueran consistentes. Si está ejecutando una versión de MongoDB anterior a 5.0 y añade un secundario con su votes y priority ajustes mayores que cero, esto puede llevar a una situación en la que la mayoría de los nodos con derecho a voto estén en linea pero no se pueda elegir un primario. Para evitar tales situaciones, considere agregar el nuevo usuario secundario inicialmente con priority :0 y votes :0. Luego, ejecuta rs.status() para asegurar que el nodo haya pasado al estado de SECONDARY. Por último, usa rs.reconfig() para actualizar su prioridad y votos.
Antes de comenzar
Para agregar un nodo a un set de réplicas de particiones, necesitas:
Un set de réplicas de clúster activo.
Un nuevo host servidor para el nuevo nodo. El nuevo servidor host debe ser capaz de admitir tu conjunto de datos particionados y ser accesible por el conjunto de réplicas activo a través de la red.
A partir de MongoDB 8.0, se puede utilizar el rol directShardOperations para realizar operaciones de mantenimiento que requieren ejecutar comandos directamente contra un fragmento.
Advertencia
Ejecutar comandos usando el rol directShardOperations puede hacer que su clúster deje de funcionar correctamente y puede causar corrupción de datos. Utiliza el rol directShardOperations únicamente con fines de mantenimiento o bajo la orientación del soporte de MongoDB. Deja de usar el rol directShardOperations cuando termines de realizar operaciones de mantenimiento.
Pasos
Preparar el directorio de datos
Prepare el directorio de datos del nuevo nodo usando una de las siguientes estrategias:
Haz que el nuevo nodo sincronice automáticamente los datos de un nodo existente. Este proceso lleva tiempo, pero no requiere intervención de un administrador.
Asegúrese de que el directorio de datos del nuevo miembro no contenga datos. El nuevo miembro copiará los datos de un miembro existente.
Si el nuevo miembro está en un estado de recuperación, debe salir y convertirse en secundario antes de que MongoDB pueda copiar todos los datos como parte del proceso de replicación.
Copie manualmente el directorio de datos de un nodo existente. El nuevo nodo se convierte en un secundario y alcanzará el estado actual del set de réplicas. Copiar los datos puede acortar el tiempo que tarda el nuevo nodo en sincronizar con los demás nodos del set de réplicas.
Asegúrese de poder copiar el directorio de datos al nuevo miembro e iniciar la replicación dentro del plazo permitido por el registro de operaciones. De lo contrario, la nueva instancia deberá realizar una sincronización inicial, que resincroniza completamente los datos, como se describe en Resincronizar un miembro de un conjunto de réplicas autoadministradas.
Para comprobar el estado actual de los miembros del conjunto de réplicas con respecto al registro de operaciones,
rs.printReplicationInfo()utilice.
Para obtener información de fondo sobre los patrones de implementación de la replicación, consulte el documento Arquitecturas de implementación para sets de réplicas.
Inicia la nueva instancia mongod
Especifica el directorio de datos y el nombre del set de réplicas. El siguiente ejemplo especifica el directorio de datos /srv/mongodb/db0 y el set de réplicas rs0:
mongod --dbpath /srv/mongodb/db0 --replSet rs0 --bind_ip localhost,<ip address of the mongod host>
Advertencia
Antes de vincular la instancia a una dirección IP de acceso público, se debe asegurar el clúster contra accesos no autorizados. Para obtener una lista completa de recomendaciones de seguridad, se debe consultar Checklist de seguridad para implementaciones autogestionadas. Como mínimo, se debe considerar habilitar la autenticación y reforzar la infraestructura de red.
Para obtener más información sobre las opciones de configuración, consulte la página del manual mongod.
Tip
Puede especificar el directorio de datos, el nombre del conjunto de réplicas y el enlace de IP en el mongod.conf archivo de configuración e iniciar con el siguiente mongod comando:
mongod --config /etc/mongod.conf
Conéctate al primario del set de réplicas
Solo puedes agregar miembros mientras estés conectado a la instancia principal. Para conectarte a la instancia principal, usa mongosh. Reemplaza los valores host y port por los valores relevantes para tu implementación:
mongosh --host mongodb0.example.com --port 28015
Si no sabe cuál es el miembro principal, conéctese a cualquier miembro del conjunto de réplicas y emita el db.hello() comando.
Utiliza rs.add() para agregar el nuevo nodo al set de réplicas
Pase el member configuration document al método. Por ejemplo, para añadir un nodo en el host mongodb3.example.net, emite el siguiente comando:
rs.add( { host: "mongodb3.example.net:27017", priority: 0, votes: 0 } )
Asegúrate de que el nuevo nodo haya llegado al SECONDARY estado
Para comprobar el estado de los miembros del conjunto de réplicas, ejecuta rs.status():
rs.status()
Próximos pasos
Una vez que el nodo recién agregado haya pasado al estado SECONDARY, utiliza rs.reconfig() para actualizar la priority y votes del nuevo nodo, si es necesario.
Advertencia
El método de shell
rs.reconfig()puede forzar el traspaso del primario actual, lo que provoca una elección. Cuando el primario renuncia, elmongodcierra todas las conexiones de los clientes. Aunque esto generalmente toma entre 10 y 20 segundos, intente hacer estos cambios durante los periodos de mantenimiento programados.Evitar reconfigurar sets de réplicas que contengan miembros de diferentes versiones de MongoDB, ya que las reglas de validación pueden diferir entre versiones de MongoDB.
Ejemplo
Si rs.conf() devuelve el documento de configuración de mongodb3.example.net:27017 como el quinto elemento en el members arreglo, para actualizar su prioridad y votos a 1, utiliza la siguiente secuencia de operaciones:
var cfg = rs.conf(); cfg.members[4].priority = 1 cfg.members[4].votes = 1 rs.reconfig(cfg)