{"id":63905,"date":"2023-03-16T08:46:26","date_gmt":"2023-03-16T07:46:26","guid":{"rendered":"https:\/\/kinsta.com\/es\/?p=63905&#038;preview=true&#038;preview_id=63905"},"modified":"2025-01-17T14:21:04","modified_gmt":"2025-01-17T13:21:04","slug":"conjunto-de-replicas-mongodb","status":"publish","type":"post","link":"https:\/\/kinsta.com\/es\/blog\/conjunto-de-replicas-mongodb\/","title":{"rendered":"Construye un Robusto Conjunto de R\u00e9plicas MongoDB en Tiempo R\u00e9cord (4 M\u00e9todos)"},"content":{"rendered":"<p>MongoDB es una base de datos <a href=\"https:\/\/kinsta.com\/es\/blog\/mongodb-vs-mysql\/\">NoSQL<\/a> que utiliza documentos tipo JSON con esquemas din\u00e1micos. Cuando se trabaja con bases de datos, siempre es bueno tener un plan de contingencia por si falla uno de tus servidores de bases de datos. Adem\u00e1s, puedes reducir las posibilidades de que eso ocurra aprovechando una <a href=\"https:\/\/kinsta.com\/es\/mykinsta\/\">ingeniosa herramienta de gesti\u00f3n<\/a> para tu sitio de WordPress.<\/p>\n<p>Por eso es \u00fatil tener muchas copias de tus datos. Tambi\u00e9n reduce las latencias de lectura. Al mismo tiempo, puede mejorar la escalabilidad y disponibilidad de la base de datos. Aqu\u00ed es donde entra en juego la replicaci\u00f3n. Se define como la pr\u00e1ctica de <a href=\"https:\/\/kinsta.com\/es\/blog\/hacer-backup-base-de-datos-mysql-con-phpmyadmin\/\">sincronizar<\/a> datos entre varias <a href=\"https:\/\/kinsta.com\/es\/blog\/bases-de-datos-de-codigo-abierto\/\">bases de datos<\/a>.<\/p>\n<p>En este art\u00edculo, nos sumergiremos en los diversos aspectos destacados de la replicaci\u00f3n de MongoDB, como sus caracter\u00edsticas y su mecanismo, por nombrar algunos.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>\u00bfQu\u00e9 es la Replicaci\u00f3n en MongoDB?<\/h2>\n<p>En MongoDB, los conjuntos de r\u00e9plica realizan la replicaci\u00f3n. Se trata de un grupo de servidores que mantienen el mismo conjunto de datos mediante replicaci\u00f3n. Incluso puedes utilizar la replicaci\u00f3n de MongoDB como parte del equilibrio de carga. Aqu\u00ed, puedes distribuir las operaciones de escritura y lectura entre todas las instancias, en funci\u00f3n del caso de uso.<\/p>\n\n<h2>\u00bfQu\u00e9 Es un Conjunto de R\u00e9plicas MongoDB?<\/h2>\n<p>Cada instancia de <a href=\"https:\/\/kinsta.com\/es\/blog\/que-es-mongodb\/\">MongoDB<\/a> que forma parte de un conjunto de r\u00e9plicas determinado es un miembro. Cada conjunto de r\u00e9plica debe tener un nodo primario y al menos un nodo secundario.<\/p>\n<p>El nodo primario es el punto de acceso principal para las transacciones con el conjunto de r\u00e9plicas. Tambi\u00e9n es el \u00fanico miembro que puede aceptar operaciones de escritura. La replicaci\u00f3n copia primero el oplog (registro de operaciones) del primario. Despu\u00e9s, repite los cambios registrados en los respectivos conjuntos de datos de los secundarios. Por lo tanto, cada conjunto de r\u00e9plica s\u00f3lo puede tener un nodo primario a la vez. Varios primarios que reciban operaciones de escritura pueden provocar conflictos de datos.<\/p>\n<p>Normalmente, las aplicaciones s\u00f3lo consultan al nodo primario para las operaciones de escritura y lectura. Puedes dise\u00f1ar tu configuraci\u00f3n para leer de uno o varios de los nodos secundarios. La transferencia as\u00edncrona de datos puede hacer que las lecturas de los nodos secundarios sirvan datos antiguos. Por tanto, esta disposici\u00f3n no es ideal para todos los casos de uso.<\/p>\n<h3>Caracter\u00edsticas del conjunto de r\u00e9plicas<\/h3>\n<p>El mecanismo autom\u00e1tico de conmutaci\u00f3n por error diferencia a los conjuntos de r\u00e9plica de MongoDB de su competencia. En ausencia de un primario, una elecci\u00f3n automatizada entre los nodos secundarios elige un nuevo primario.<\/p>\n<h3>Conjunto de R\u00e9plica MongoDB vs Cl\u00faster MongoDB<\/h3>\n<p>Un conjunto de r\u00e9plica MongoDB crear\u00e1 varias copias del mismo conjunto de datos en los nodos del conjunto de r\u00e9plica. El objetivo principal de un conjunto de r\u00e9plica es:<\/p>\n<ul>\n<li>Ofrecer una soluci\u00f3n de copia de seguridad integrada<\/li>\n<li>Aumentar la disponibilidad de los datos<\/li>\n<\/ul>\n<p>Un cl\u00faster MongoDB es un juego totalmente diferente. Distribuye los datos entre muchos nodos mediante una clave de fragmentaci\u00f3n. Este proceso fragmentar\u00e1 los datos en muchos trozos llamados fragmentos. A continuaci\u00f3n, copia cada fragmento en un nodo diferente. Un cl\u00faster pretende soportar grandes conjuntos de datos y operaciones de alto rendimiento. Lo consigue escalando horizontalmente la carga de trabajo.<\/p>\n<p>\u00c9sta es la diferencia entre un conjunto de r\u00e9plicas y un cl\u00faster, en t\u00e9rminos sencillos:<\/p>\n<ul>\n<li>Un cl\u00faster distribuye la carga de trabajo. Tambi\u00e9n almacena fragmentos de datos (shards) en muchos servidores.<\/li>\n<li>Un conjunto de r\u00e9plicas duplica el conjunto de datos por completo.<\/li>\n<\/ul>\n<p>MongoDB te permite combinar estas funcionalidades creando un cl\u00faster fragmentado. Aqu\u00ed, puedes replicar cada fragmento en un servidor secundario. Esto permite que un fragmento ofrezca una alta redundancia y disponibilidad de datos.<\/p>\n<p>Mantener y configurar un conjunto de r\u00e9plicas puede ser t\u00e9cnicamente agotador y llevar mucho tiempo. \u00bfY encontrar el servicio de alojamiento adecuado? Eso es otro quebradero de cabeza. Con tantas opciones disponibles, es f\u00e1cil perder horas investigando, en lugar de dedicarlas a construir tu negocio.<\/p>\n<p>Perm\u00edteme informarte brevemente sobre una herramienta que hace todo esto y mucho m\u00e1s, para que puedas volver a machacarlo con tu servicio\/producto.<\/p>\n<p>La soluci\u00f3n de <a href=\"https:\/\/sevalla.com\/application-hosting\/\">Alojamiento de Aplicaciones<\/a> de Kinsta, en la que conf\u00edan m\u00e1s de 55.000 desarrolladores, puedes ponerla en marcha con s\u00f3lo 3 sencillos pasos. Si te parece demasiado bueno para ser verdad, aqu\u00ed tienes m\u00e1s ventajas de utilizar Kinsta:<\/p>\n<ul>\n<li><strong>Disfruta de un mejor rendimiento con las conexiones internas de<\/strong> <strong>Kinsta<\/strong>: Olv\u00eddate de tus problemas con las bases de datos compartidas. P\u00e1sate a bases de datos dedicados con conexiones internas que no tienen l\u00edmites de n\u00famero de consultas ni de filas. Kinsta es m\u00e1s r\u00e1pido, m\u00e1s seguro y no te facturar\u00e1 el ancho de banda\/tr\u00e1fico interno.<\/li>\n<li><strong>Un caracter\u00edsticas de funciones adaptadas a los desarrolladores<\/strong>: Escala tu aplicaci\u00f3n en la s\u00f3lida plataforma compatible con Gmail, YouTube y Google Search. Ten la seguridad de que aqu\u00ed est\u00e1s en las manos m\u00e1s seguras.<\/li>\n<li><strong>Disfruta de velocidades inigualables con el centro de datos que elijas<\/strong>: Elige la regi\u00f3n que mejor se adapte a ti y a tus clientes. Con m\u00e1s de 25 centros de datos para elegir, los 300 PoP de Kinsta garantizan la m\u00e1xima velocidad y una presencia global para tu sitio web.<\/li>\n<\/ul>\n<p>\u00a1Prueba <a href=\"https:\/\/kinsta.com\/es\/suscripcion\/?product_type=app-db\">gratis la soluci\u00f3n de alojamiento de aplicaciones de Kinsta hoy mismo<\/a>!<\/p>\n<h2>\u00bfC\u00f3mo Funciona la Replicaci\u00f3n en MongoDB?<\/h2>\n<p>En MongoDB, env\u00edas operaciones de escritura al servidor (nodo) primario. El primario asigna las operaciones a trav\u00e9s de los servidores secundarios, replicando los datos.<\/p>\n<figure id=\"attachment_148331\" aria-describedby=\"caption-attachment-148331\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/MongoDB-Replica-Set-Election.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-148331\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/MongoDB-Replica-Set-Election.png\" alt=\"This is a flow-chart of how replication works in MongoDB, for 3 nodes (1 primary, 2 secondaries)\" width=\"1024\" height=\"763\"><\/a><figcaption id=\"caption-attachment-148331\" class=\"wp-caption-text\">Ilustraci\u00f3n del proceso de replicaci\u00f3n de MongoDB (Fuente de la imagen: <a href=\"https:\/\/www.mongodb.com\/basics\/replication\" target=\"_blank\" rel=\"noopener noreferrer\">MongoDB<\/a>)<\/figcaption><\/figure>\n<h3>Tres tipos de nodos MongoDB<\/h3>\n<p>De los tres tipos de nodos MongoDB, dos ya han aparecido antes: los nodos primarios y los secundarios. El tercer tipo de nodo MongoDB que resulta \u00fatil durante la replicaci\u00f3n es un \u00e1rbitro. El nodo \u00e1rbitro no tiene una copia del conjunto de datos y no puede convertirse en primario. Dicho esto, el \u00e1rbitro s\u00ed participa en las elecciones del primario.<\/p>\n<p>Ya hemos mencionado lo que ocurre cuando el nodo primario se cae, pero \u00bfqu\u00e9 pasa si los nodos secundarios muerden el polvo? En ese caso, el nodo primario se convierte en secundario y la base de datos queda inaccesible.<\/p>\n<h3>Elecci\u00f3n de miembros<\/h3>\n<p>Las elecciones pueden producirse en los siguientes escenarios:<\/p>\n<ul>\n<li>Inicializaci\u00f3n de un conjunto de r\u00e9plicas<\/li>\n<li>P\u00e9rdida de conectividad con el nodo primario (que puede detectarse mediante latidos)<\/li>\n<li>Mantenimiento de un conjunto de r\u00e9plicas mediante los m\u00e9todos <code>rs.reconfig<\/code> o <code>stepDown<\/code><\/li>\n<li>Adici\u00f3n de un nuevo nodo a un conjunto de r\u00e9plica existente<\/li>\n<\/ul>\n<p>Un conjunto de r\u00e9plica puede tener hasta 50 miembros, pero s\u00f3lo 7 o menos pueden votar en cualquier elecci\u00f3n.<\/p>\n<p>El tiempo medio antes de que un conjunto elija un nuevo primario no debe superar los 12 segundos. El algoritmo de elecci\u00f3n intentar\u00e1 que est\u00e9 disponible el secundario con mayor prioridad. Al mismo tiempo, los miembros con un valor de prioridad 0 no pueden convertirse en primarios y no participan en la elecci\u00f3n.<\/p>\n<figure id=\"attachment_148334\" aria-describedby=\"caption-attachment-148334\" style=\"width: 900px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/Secondary-Node-Becomes-a-Primary-in-MongoDB-2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-148334\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/Secondary-Node-Becomes-a-Primary-in-MongoDB-2.png\" alt=\"This is a diagram depicting a secondary node becoming a primary in MongoDB after the election.\" width=\"900\" height=\"509\"><\/a><figcaption id=\"caption-attachment-148334\" class=\"wp-caption-text\">Nodo secundario que se convierte en primario (Fuente de la imagen: <a href=\"https:\/\/medium.com\/condorlabs-engineering\/mongodb-replication-what-you-need-to-know-42a62a98b320\" target=\"_blank\" rel=\"noopener noreferrer\">Medium<\/a>)<\/figcaption><\/figure>\n<h3>La preocupaci\u00f3n por la escritura<\/h3>\n<p>Por durabilidad, las operaciones de escritura tienen un marco para copiar los datos en un n\u00famero determinado de nodos. Con esto puedes incluso ofrecer informaci\u00f3n al cliente. Este marco tambi\u00e9n se conoce como \u00abpreocupaci\u00f3n de escritura\u00bb. Tiene miembros portadores de datos que deben reconocer una preocupaci\u00f3n de escritura antes de que la operaci\u00f3n vuelva como correcta. Generalmente, los conjuntos de r\u00e9plicas tienen un valor de 1 como preocupaci\u00f3n de escritura. Por tanto, s\u00f3lo el primario debe confirmar la escritura antes de devolver la confirmaci\u00f3n de escritura.<\/p>\n<p>Puedes incluso aumentar el n\u00famero de miembros necesarios para reconocer la operaci\u00f3n de escritura. No hay l\u00edmite para el n\u00famero de miembros que puedes tener. Pero, si el n\u00famero es elevado, tendr\u00e1s que hacer frente a una latencia elevada. Esto se debe a que el cliente tiene que esperar el acuse de recibo de todos los miembros. Adem\u00e1s, puedes establecer la preocupaci\u00f3n de escritura de la \u00abmayor\u00eda\u00bb, que calcula m\u00e1s de la mitad de los miembros tras recibir su acuse de recibo.<\/p>\n<h3>Preferencia de lectura<\/h3>\n<p>Para las operaciones de lectura, puedes mencionar la preferencia de lectura que describe c\u00f3mo la base de datos dirige la consulta a los miembros del conjunto de r\u00e9plicas. Generalmente, el nodo primario recibe la operaci\u00f3n de lectura, pero el cliente puede mencionar una preferencia de lectura para enviar las operaciones de lectura a los nodos secundarios. Estas son las opciones para la preferencia de lectura:<\/p>\n<ul>\n<li><strong>primaryPreferred<\/strong>: Normalmente, las operaciones de lectura proceden del nodo primario, pero si \u00e9ste no est\u00e1 disponible, los datos se extraen de los nodos secundarios.<\/li>\n<li><strong>primary<\/strong>: Todas las operaciones de lectura proceden del nodo primario.<\/li>\n<li><strong>secondary<\/strong>: Todas las operaciones de lectura proceden de los nodos secundarios.<\/li>\n<li><strong>Closest<\/strong>: Aqu\u00ed, las peticiones de lectura se dirigen al nodo alcanzable m\u00e1s cercano, que puede detectarse ejecutando el comando <code>ping<\/code>. El resultado de las operaciones de lectura puede proceder de cualquier miembro del conjunto de r\u00e9plicas, independientemente de si es el primario o el secundario.<\/li>\n<li><strong>secondaryPreferred<\/strong>: Aqu\u00ed, la mayor\u00eda de las operaciones de lectura proceden de los nodos secundarios, pero si ninguno de ellos est\u00e1 disponible, los datos se toman del nodo primario.<\/li>\n<\/ul>\n<h3>Sincronizaci\u00f3n de datos del Conjunto de Replicaci\u00f3n<\/h3>\n<p>Para mantener copias actualizadas del conjunto de datos compartidos, los miembros secundarios de un conjunto de r\u00e9plica replican o sincronizan los datos de otros miembros.<\/p>\n<p>MongoDB aprovecha dos formas de sincronizaci\u00f3n de datos. Sincronizaci\u00f3n inicial para rellenar los nuevos miembros con el conjunto de datos completo. Replicaci\u00f3n para ejecutar cambios continuos en el conjunto de datos completo.<\/p>\n<h4>Sincronizaci\u00f3n inicial<\/h4>\n<p>Durante la sincronizaci\u00f3n inicial, un nodo secundario ejecuta el comando <code> init sync <\/code> para sincronizar todos los datos del nodo primario con otro nodo secundario que contiene los datos m\u00e1s recientes. Por tanto, el nodo secundario aprovecha sistem\u00e1ticamente la funci\u00f3n <code> tailable cursor <\/code> para consultar las entradas oplog m\u00e1s recientes dentro de la colecci\u00f3n local.oplog.rs del nodo primario y aplica estas operaciones dentro de estas entradas oplog.<\/p>\n<p>A partir de MongoDB 5.2, las sincronizaciones iniciales pueden basarse en la copia de archivos o ser l\u00f3gicas.<\/p>\n<h5>Sincronizaci\u00f3n l\u00f3gica<\/h5>\n<p>Cuando ejecutas una sincronizaci\u00f3n l\u00f3gica, MongoDB:<\/p>\n<ol>\n<li>Desarrolla todos los \u00edndices de las colecciones a medida que se copian los documentos de cada colecci\u00f3n.<\/li>\n<li>Duplica todas las bases de datos excepto la base de datos local. <code> mongod <\/code> escanea cada colecci\u00f3n en todas las bases de datos de origen e inserta todos los datos en sus duplicados de estas colecciones.<\/li>\n<li>Ejecuta todos los cambios en el conjunto de datos. Aprovechando el oplog de la fuente, el <code> mongod <\/code> actualiza su conjunto de datos para representar el estado actual del conjunto de r\u00e9plicas.<\/li>\n<li>Extrae los registros oplog reci\u00e9n a\u00f1adidos durante la copia de datos. Aseg\u00farate de que el nodo de destino dispone de suficiente espacio en disco dentro de la base de datos local para almacenar provisionalmente estos registros oplog mientras dure esta etapa de copia de datos.<\/li>\n<\/ol>\n<p>Cuando finaliza la sincronizaci\u00f3n inicial, el miembro pasa de <code> STARTUP2 <\/code> a <code> SECONDARY <\/code>.<\/p>\n<h5>Sincronizaci\u00f3n inicial basada en la copia de archivos<\/h5>\n<p>De entrada, s\u00f3lo puedes ejecutar esto si utilizas MongoDB Enterprise. Este proceso ejecuta la sincronizaci\u00f3n inicial duplicando y moviendo los archivos en el sistema de archivos. Este m\u00e9todo de sincronizaci\u00f3n puede ser m\u00e1s r\u00e1pido que la sincronizaci\u00f3n inicial l\u00f3gica en algunos casos. Ten en cuenta que la sincronizaci\u00f3n inicial basada en la copia de archivos puede dar lugar a recuentos inexactos si ejecutas el m\u00e9todo count() sin un predicado de consulta.<\/p>\n<p>Pero este m\u00e9todo tambi\u00e9n tiene sus limitaciones:<\/p>\n<ul>\n<li>Durante una sincronizaci\u00f3n inicial basada en copia de archivos, no puedes escribir en la base de datos local del nodo que se est\u00e1 sincronizando. Tampoco puedes ejecutar una copia de seguridad en el nodo con el que se est\u00e1 sincronizando ni en el miembro desde el que se est\u00e1 sincronizando.<\/li>\n<li>Cuando se aprovecha el motor de almacenamiento cifrado, MongoDB utiliza la clave de origen para cifrar la de destino.<\/li>\n<li>S\u00f3lo puedes ejecutar una sincronizaci\u00f3n inicial desde un nodo determinado cada vez.<\/li>\n<\/ul>\n<h4>Replicaci\u00f3n<\/h4>\n<p>Los nodos secundarios replican los datos de forma consistente despu\u00e9s de la sincronizaci\u00f3n inicial. Los nodos secundarios duplicar\u00e1n el oplog de su sincronizaci\u00f3n desde el origen y ejecutar\u00e1n estas operaciones en un proceso as\u00edncrono.<\/p>\n<p>Los secundarios son capaces de modificar autom\u00e1ticamente su sincronizaci\u00f3n desde el origen seg\u00fan sea necesario, bas\u00e1ndose en los cambios en el tiempo de ping y en el estado de la replicaci\u00f3n de otros nodos.<\/p>\n<h5>Replicaci\u00f3n en flujo<\/h5>\n<p>Desde MongoDB 4.4, la sincronizaci\u00f3n desde las fuentes env\u00eda un flujo continuo de entradas oplog a sus secundarios de sincronizaci\u00f3n. La replicaci\u00f3n en flujo reduce el retardo de replicaci\u00f3n en redes de alta carga y latencia. Tambi\u00e9n puede:<\/p>\n<ul>\n<li>Disminuir el riesgo de perder operaciones de escritura con <code>w:1<\/code> debido a la conmutaci\u00f3n por error del primario.<\/li>\n<li>Disminuir el estancamiento de las lecturas de los secundarios.<\/li>\n<li>Reducir la latencia en las operaciones de escritura con <code>w:\u201cmajority\u201d<\/code> y <code>w:&gt;1<\/code>. En resumen, cualquier preocupaci\u00f3n de escritura que necesite esperar a la replicaci\u00f3n.<\/li>\n<\/ul>\n<h5>Replicaci\u00f3n multihilo<\/h5>\n<p>MongoDB sol\u00eda escribir operaciones por lotes a trav\u00e9s de m\u00faltiples hilos para mejorar la concurrencia. MongoDB agrupa los lotes por id de documento mientras aplica cada grupo de operaciones con un hilo diferente.<\/p>\n<p>MongoDB siempre ejecuta las operaciones de escritura en un documento dado en su orden de escritura original. Esto cambi\u00f3 en MongoDB 4.0.<\/p>\n<p>A partir de MongoDB 4.0, las operaciones de lectura dirigidas a secundarios y configuradas con un nivel de preocupaci\u00f3n de lectura de <code>\u201cmajority\u201d<\/code> o <code>\u201clocal\u201d<\/code> leer\u00e1n ahora desde una instant\u00e1nea WiredTiger de los datos si la lectura se produce en un secundario en el que se est\u00e1n aplicando los lotes de replicaci\u00f3n. La lectura desde una instant\u00e1nea garantiza una visi\u00f3n coherente de los datos, y permite que la lectura se produzca simult\u00e1neamente con la replicaci\u00f3n en curso sin necesidad de bloqueo.<\/p>\n<p>Por lo tanto, las lecturas secundarias que necesitan estos niveles de preocupaci\u00f3n de lectura ya no necesitan esperar a que se apliquen los lotes de replicaci\u00f3n y pueden gestionarse a medida que se reciben.<\/p>\n<h2>C\u00f3mo Crear un Conjunto de R\u00e9plicas MongoDB<\/h2>\n<p>Como hemos mencionado anteriormente, MongoDB maneja la replicaci\u00f3n a trav\u00e9s de conjuntos de r\u00e9plica. En las siguientes secciones, mostraremos algunos m\u00e9todos que puedes usar para crear conjuntos de r\u00e9plica para tu caso de uso.<\/p>\n<h3>M\u00e9todo 1: Crear un nuevo conjunto de r\u00e9plica de MongoDB en Ubuntu<\/h3>\n<p>Antes de empezar, tendr\u00e1s que asegurarte de que tienes al menos tres servidores ejecutando Ubuntu 20.04, con <a href=\"https:\/\/kinsta.com\/es\/blog\/que-es-mongodb\/\">MongoDB<\/a> instalado en cada servidor.<\/p>\n<p>Para configurar un conjunto de r\u00e9plicas, es esencial proporcionar una direcci\u00f3n en la que cada nodo del conjunto de r\u00e9plicas pueda ser alcanzado por los dem\u00e1s miembros del conjunto. En este caso, mantenemos tres nodos en el conjunto. Aunque podemos utilizar <a href=\"https:\/\/kinsta.com\/es\/blog\/ip-estaticas-y-dinamicas\/\">direcciones IP<\/a>, no es recomendable, ya que las direcciones podr\u00edan cambiar inesperadamente. Una alternativa mejor puede ser utilizar los nombres de host DNS l\u00f3gicos al configurar los conjuntos de r\u00e9plica.<\/p>\n<p>Podemos hacerlo configurando el subdominio para cada miembro de replicaci\u00f3n. Aunque esto puede ser ideal para un entorno de producci\u00f3n, en esta secci\u00f3n se explicar\u00e1 c\u00f3mo configurar la resoluci\u00f3n <a href=\"https:\/\/kinsta.com\/es\/blog\/que-es-dns\/\">DNS<\/a> editando los respectivos archivos hosts de cada servidor. Este archivo nos permite asignar nombres de host legibles a direcciones IP num\u00e9ricas. As\u00ed, si en alg\u00fan momento cambia tu direcci\u00f3n IP, lo \u00fanico que tienes que hacer es actualizar los archivos de hosts de los tres servidores, \u00a1en lugar de volver a configurar el conjunto de r\u00e9plicas desde cero!<\/p>\n<p>En general, <code>hosts<\/code> se almacena en el directorio <code>\/etc\/<\/code>. Repite los siguientes comandos para cada uno de tus tres servidores:<\/p>\n<pre><code class=\"language-markdown\">sudo nano \/etc\/hosts<\/code><\/pre>\n<p>En el comando anterior, estamos utilizando nano como editor de texto, sin embargo, puedes utilizar cualquier editor de texto que prefieras. Despu\u00e9s de las primeras l\u00edneas que configuran el localhost, a\u00f1ade una entrada para cada miembro del conjunto de r\u00e9plicas. Estas entradas tienen la forma de una direcci\u00f3n IP seguida del nombre legible por humanos que elijas. Aunque puedes darles el nombre que quieras, aseg\u00farate de ser descriptivo para saber diferenciar a cada miembro. Para este tutorial, utilizaremos los siguientes nombres de host:<\/p>\n<ul>\n<li>mongo0.replset.member<\/li>\n<li>mongo1.replset.member<\/li>\n<li>mongo2.replset.member<\/li>\n<\/ul>\n<p>Utilizando estos nombres de host, tus archivos \/etc\/hosts tendr\u00edan un aspecto similar a las siguientes l\u00edneas resaltadas:<\/p>\n<figure id=\"attachment_148336\" aria-describedby=\"caption-attachment-148336\" style=\"width: 1222px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/Hostnames-Illustration.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-148336\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/Hostnames-Illustration.png\" alt=\"This is a snapshot of the \/etc\/hosts files containing the hostnames along with the IP address.\" width=\"1222\" height=\"339\"><\/a><figcaption id=\"caption-attachment-148336\" class=\"wp-caption-text\">Ilustraci\u00f3n de nombres de host<\/figcaption><\/figure>\n<p>Guarda y cierra el archivo.<\/p>\n<p>Despu\u00e9s de configurar la resoluci\u00f3n DNS para el conjunto de r\u00e9plicas, tenemos que actualizar las reglas del cortafuegos para permitir que se comuniquen entre s\u00ed. Ejecuta el siguiente comando <code>ufw<\/code> en mongo0 para proporcionar a mongo1 acceso al puerto 27017 de mongo0:<\/p>\n<pre><code class=\"language-markdown\">sudo ufw allow from mongo1_server_ip to any port 27017<\/code><\/pre>\n<p>En lugar del par\u00e1metro <code>mongo1_server_ip<\/code>, introduce la direcci\u00f3n IP real de tu servidor mongo1. Adem\u00e1s, si has actualizado la instancia de Mongo en este servidor para utilizar un puerto no predeterminado, aseg\u00farate de cambiar 27017 para reflejar el puerto que utiliza tu instancia de MongoDB.<\/p>\n<p>Ahora a\u00f1ade otra regla de cortafuegos para dar acceso a mongo2 al mismo puerto:<\/p>\n<pre><code class=\"language-markdown\">sudo ufw allow from mongo2_server_ip to any port 27017<\/code><\/pre>\n<p>En lugar del par\u00e1metro <code>mongo2_server_ip<\/code>, introduce la direcci\u00f3n IP real de tu servidor mongo2. A continuaci\u00f3n, actualiza las reglas del cortafuegos de tus otros dos servidores. Ejecuta los siguientes comandos en el servidor mongo1, asegur\u00e1ndote de cambiar las direcciones IP en lugar del par\u00e1metro server_ip para reflejar las de mongo0 y mongo2, respectivamente:<\/p>\n<pre><code class=\"language-markdown\">sudo ufw allow from mongo0_server_ip to any port 27017<\/code><\/pre>\n<pre><code class=\"language-markdown\">sudo ufw allow from mongo2_server_ip to any port 27017<\/code><\/pre>\n<p>Por \u00faltimo, ejecuta estos dos comandos en mongo2. De nuevo, aseg\u00farate de introducir las direcciones IP correctas para cada servidor:<\/p>\n<pre><code class=\"language-markdown\">sudo ufw allow from mongo0_server_ip to any port 27017<\/code><\/pre>\n<pre><code class=\"language-markdown\">sudo ufw allow from mongo1_server_ip to any port 27017<\/code><\/pre>\n<p>Tu siguiente paso es actualizar el archivo de configuraci\u00f3n de cada instancia de MongoDB para permitir conexiones externas. Para permitir esto, necesitas modificar el archivo de configuraci\u00f3n en cada servidor para reflejar la direcci\u00f3n IP e indicar el conjunto de r\u00e9plicas. Aunque puedes utilizar cualquier editor de texto que prefieras, nosotros vamos a utilizar una vez m\u00e1s el editor de texto nano. Hagamos las siguientes modificaciones en cada archivo mongod.conf.<\/p>\n<p><strong>En mongo0:<\/strong><\/p>\n<pre><code class=\"language-markdown\"># network interfaces\nnet:\nport: 27017\nbindIp: 127.0.0.1,mongo0.replset.member# replica set\nreplication:\nreplSetName: \"rs0\"<\/code><\/pre>\n<p><strong>En mongo1:<\/strong><\/p>\n<pre><code class=\"language-markdown\"># network interfaces\nnet:\nport: 27017\nbindIp: 127.0.0.1,mongo1.replset.member\nreplication:\nreplSetName: \"rs0\"<\/code><\/pre>\n<p><strong>En mongo2:<\/strong><\/p>\n<pre><code class=\"language-markdown\"># network interfaces\nnet:\nport: 27017\nbindIp: 127.0.0.1,mongo2.replset.member\nreplication:\nreplSetName: \"rs0\"<\/code><\/pre>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-important\">\n            <h3>Important<\/h3>\n        <p>Si quieres cambiar el valor de la directiva de rs0 aseg\u00farate de sustituirlo por el mismo en los comandos anteriores. Puedes nombrar la directiva como quieras, sin embargo, aseg\u00farate de que sea lo suficientemente descriptiva. Una vez completadas las actualizaciones, reinicia el servicio mongod en cada instancia para recargar las configuraciones.<\/p>\n<\/aside>\n\n<pre><code class=\"language-markdown\">sudo systemctl restart mongod<\/code><\/pre>\n<p>Con esto, habr\u00e1s habilitado la replicaci\u00f3n para la instancia MongoDB de cada servidor.<\/p>\n<p>Ahora puedes inicializar el conjunto de r\u00e9plica utilizando el m\u00e9todo <code>rs.initiate()<\/code>. Este m\u00e9todo s\u00f3lo debe ejecutarse en una \u00fanica instancia MongoDB del conjunto de r\u00e9plica. Aseg\u00farate de que el nombre y el miembro del conjunto de r\u00e9plica coinciden con las configuraciones que hiciste anteriormente en cada archivo de configuraci\u00f3n.<\/p>\n<pre><code class=\"language-markdown\">rs.initiate(\n  {\n    _id: \"rs0\",\n    members: [\n      { _id: 0, host: \"mongo0.replset.member\" },\n      { _id: 1, host: \"mongo1.replset.member\" },\n      { _id: 2, host: \"mongo2.replset.member\" }\n    ]\n  }\n)<\/code><\/pre>\n<p>Si el m\u00e9todo devuelve \u00abok 1 en la salida, significa que el conjunto de r\u00e9plica se inici\u00f3 correctamente. A continuaci\u00f3n se muestra un ejemplo de c\u00f3mo deber\u00eda ser la salida:<\/p>\n<pre><code class=\"language-markdown\"> \"ok\": 1,\n  \"$clusterTime\": {\n    \"clusterTime\": Timestamp(1612389071, 1),\n    \"signature\": {\n      \"hash\": BinData(0, \"AAAAAAAAAAAAAAAAAAAAAAAAAAA=\"),\n      \"keyId\": NumberLong(0)\n    }\n  },\n  \"operationTime\": Timestamp(1612389071, 1)\n}<\/code><\/pre>\n<h4>Apagar un servidor MongoDB<\/h4>\n<p>Puedes apagar un servidor MongoDB utilizando el m\u00e9todo <code>db.shutdownServer()<\/code>. A continuaci\u00f3n se muestra la sintaxis del mismo. Tanto <code>force<\/code> como <code>timeoutsecs<\/code> son <a href=\"https:\/\/www.mongodb.com\/docs\/v5.0\/reference\/method\/db.shutdownServer\/#mongodb-method-db.shutdownServer\" target=\"_blank\" rel=\"noopener noreferrer\">par\u00e1metros opcionales<\/a>.<\/p>\n<pre><code class=\"language-markdown\">db.shutdownServer({\n  force: &lt;boolean&gt;,\n  timeoutSecs: &lt;int&gt;\n})<\/code><\/pre>\n<p>Este m\u00e9todo puede fallar si el miembro del conjunto de r\u00e9plicas mongod ejecuta ciertas operaciones como la creaci\u00f3n de \u00edndices. Para interrumpir las operaciones y forzar el cierre del miembro, puedes introducir el par\u00e1metro booleano <code> force <\/code> a true.<\/p>\n<h4>Reiniciar MongoDB con \u2013replSet<\/h4>\n<p>Para reiniciar la configuraci\u00f3n, aseg\u00farate de que todos los nodos de tu conjunto de r\u00e9plicas est\u00e1n parados. A continuaci\u00f3n, elimina la base de datos local de cada nodo. Vuelve a iniciarlo utilizando la bandera <code>\u2013replSet<\/code> y ejecuta <code>rs.initiate()<\/code> en una sola instancia de mongod para el conjunto de r\u00e9plica.<\/p>\n<pre><code class=\"language-markdown\">mongod --replSet \"rs0\"<\/code><\/pre>\n<p><code>rs.initiate()<\/code> puede tomar un documento opcional de configuraci\u00f3n del conjunto de r\u00e9plica, a saber:<\/p>\n<ul>\n<li>La opci\u00f3n <code>Replication.replSetName<\/code> o <code>\u2014replSet<\/code> para especificar el nombre del conjunto de r\u00e9plica en el campo <code>_id<\/code>.<\/li>\n<li>La matriz de miembros, que contiene un documento por cada miembro del conjunto de r\u00e9plica.<\/li>\n<\/ul>\n<p>El m\u00e9todo <code>rs.initiate()<\/code> desencadena una elecci\u00f3n y elige a uno de los nodos para que sea el principal.<\/p>\n<h4>A\u00f1adir nodos al conjunto de r\u00e9plica<\/h4>\n<p>Para a\u00f1adir nodos al conjunto, inicia instancias de mongo en varias m\u00e1quinas. A continuaci\u00f3n, inicia un cliente mongo y utiliza el comando <code>rs.add()<\/code>.<\/p>\n<p>El comando <code>rs.add()<\/code> tiene la siguiente sintaxis b\u00e1sica:<\/p>\n<pre><code class=\"language-markdown\">rs.add(HOST_NAME:PORT)<\/code><\/pre>\n<p>Por ejemplo<\/p>\n<p>Sup\u00f3n que mongo1 es tu instancia de mongod, y que est\u00e1 escuchando en el puerto 27017. Utiliza el comando cliente de Mongo <code>rs.add()<\/code> para a\u00f1adir esta instancia al conjunto de r\u00e9plicas.<\/p>\n<pre><code class=\"language-markdown\">rs.add(\"mongo1:27017\")<\/code><\/pre>\n<p>S\u00f3lo cuando est\u00e9s conectado al nodo primario podr\u00e1s a\u00f1adir una instancia mongod al conjunto de r\u00e9plicas. Para comprobar si est\u00e1s conectado al primario, utiliza el comando <code>db.isMaster()<\/code>.<\/p>\n<h4>Eliminar usuarios<\/h4>\n<p>Para eliminar un nodos, podemos utilizar <code>rs.remove()<\/code><\/p>\n<p>Para ello, en primer lugar, apaga la instancia de mongod que deseas eliminar utilizando el m\u00e9todo <code>db.shutdownServer()<\/code> del que hemos hablado anteriormente.<\/p>\n<p>A continuaci\u00f3n, con\u00e9ctate al primario actual del conjunto de r\u00e9plicas. Para determinar el primario actual, utiliza <code>db.hello()<\/code> mientras est\u00e1s conectado a cualquier miembro del conjunto de r\u00e9plicas. Una vez que hayas determinado el primario, ejecuta cualquiera de los siguientes comandos:<\/p>\n<pre><code class=\"language-markdown\">rs.remove(\"mongodb-node-04:27017\")\nrs.remove(\"mongodb-node-04\")<\/code><\/pre>\n<figure id=\"attachment_148339\" aria-describedby=\"caption-attachment-148339\" style=\"width: 900px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/Code-Snippet-for-Node-Removal-1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-148339\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/Code-Snippet-for-Node-Removal-1.png\" alt=\"This is a snapshot of the output after carrying out the rs.remove() command.\" width=\"900\" height=\"267\"><\/a><figcaption id=\"caption-attachment-148339\" class=\"wp-caption-text\">La imagen anterior muestra que el nodo se ha eliminado correctamente del conjunto de r\u00e9plicas. (Fuente de la imagen: <a href=\"https:\/\/www.bmc.com\/blogs\/mongodb-replication\/\" target=\"_blank\" rel=\"noopener noreferrer\">Bmc<\/a>)<\/figcaption><\/figure>\n<p>Si el conjunto de r\u00e9plica necesita elegir un nuevo primario, MongoDB podr\u00eda desconectar brevemente el nodo. En este caso, volver\u00e1 a conectarse autom\u00e1ticamente. Adem\u00e1s, puede mostrar un error <code>DBClientCursor::init call()<\/code> failed aunque el comando se ejecute correctamente.<\/p>\n<h3>M\u00e9todo 2: Configurar un conjunto de r\u00e9plicas de MongoDB para el despliegue y las pruebas<\/h3>\n<p>En general, puedes configurar conjuntos de r\u00e9plica para pruebas con RBAC activado o desactivado. En este m\u00e9todo, configuraremos conjuntos de r\u00e9plica con el control de acceso deshabilitado para <a href=\"https:\/\/kinsta.com\/es\/blog\/que-es-un-desarrollador-full-stack\/\">desplegarlos<\/a> en un entorno de pruebas.<\/p>\n<p>En primer lugar, crea directorios para todas las instancias que formen parte del conjunto de r\u00e9plica utilizando el siguiente comando:<\/p>\n<pre><code class=\"language-markdown\">mkdir -p \/srv\/mongodb\/replicaset0-0  \/srv\/mongodb\/replicaset0-1 \/srv\/mongodb\/replicaset0-2<\/code><\/pre>\n<p>Este comando crear\u00e1 directorios para tres instancias MongoDB replicaset0-0, replicaset0-1 y replicaset0-2. Ahora, inicia las instancias MongoDB para cada una de ellas utilizando el siguiente conjunto de comandos:<\/p>\n<p><strong>Para el Servidor 1:<\/strong><\/p>\n<pre><code class=\"language-markdown\">mongod --replSet replicaset --port 27017 --bind_ip localhost,&lt;hostname(s)|ip address(es)&gt; --dbpath \/srv\/mongodb\/replicaset0-0  --oplogSize 128<\/code><\/pre>\n<p><strong>Para el Servidor 2:<\/strong><\/p>\n<pre><code class=\"language-markdown\">mongod --replSet replicaset --port 27018 --bind_ip localhost,&lt;hostname(s)|ip address(es)&gt; --dbpath \/srv\/mongodb\/replicaset0-0  --oplogSize 128<\/code><\/pre>\n<p><strong>Para el Servidor 3:<\/strong><\/p>\n<pre><code class=\"language-markdown\">mongod --replSet replicaset --port 27019 --bind_ip localhost,&lt;hostname(s)|ip address(es)&gt; --dbpath \/srv\/mongodb\/replicaset0-0  --oplogSize 128<\/code><\/pre>\n<p>El par\u00e1metro <code>\u2013oplogSize<\/code> se utiliza para evitar que la m\u00e1quina se sobrecargue durante la fase de prueba. Ayuda a reducir la cantidad de espacio que consume cada disco.<\/p>\n<p>Ahora, con\u00e9ctate a una de las instancias utilizando el shell de Mongo conect\u00e1ndote mediante el n\u00famero de puerto que se indica a continuaci\u00f3n.<\/p>\n<pre><code class=\"language-markdown\">mongo --port 27017<\/code><\/pre>\n<p>Podemos utilizar el comando <code>rs.initiate()<\/code> para iniciar el proceso de replicaci\u00f3n. Tendr\u00e1s que sustituir el par\u00e1metro <code>hostname<\/code> por el nombre de tu sistema.<\/p>\n<pre><code class=\"language-markdown\">rs conf = {\n\n  _id: \"replicaset0\",\n\n  members: [\n\n    {  _id: 0,  host: \"&lt;hostname&gt;:27017},\n\n    {  _id: 1,  host: \"&lt;hostname&gt;:27018\"},\n\n    {  _id: 2,  host: \"&lt;hostname&gt;:27019\"}\n\n   ] }<\/code><\/pre>\n<p>Ahora puedes pasar el archivo objeto de configuraci\u00f3n como par\u00e1metro para el comando iniciar y utilizarlo de la siguiente manera:<\/p>\n<pre><code class=\"language-markdown\">rs.initiate(rsconf)<\/code><\/pre>\n<p>\u00a1Y ya est\u00e1! Has creado con \u00e9xito un conjunto de r\u00e9plica de MongoDB para fines de <a href=\"https:\/\/kinsta.com\/es\/blog\/desarrollador-de-backend\/\">desarrollo<\/a> y pruebas.<\/p>\n<h3>M\u00e9todo 3: Transformar una instancia independiente en un conjunto de r\u00e9plica MongoDB<\/h3>\n<p>MongoDB permite a sus usuarios transformar sus instancias aut\u00f3nomas en conjuntos de r\u00e9plica. Mientras que las instancias aut\u00f3nomas se utilizan principalmente para la fase de pruebas y desarrollo, los conjuntos de r\u00e9plica forman parte del entorno de producci\u00f3n.<\/p>\n<p>Para empezar, cerremos nuestra instancia mongod utilizando el siguiente comando:<\/p>\n<pre><code class=\"language-markdown\">db.adminCommand({\"shutdown\":\"1\"})<\/code><\/pre>\n<p>Reinicia tu instancia utilizando el par\u00e1metro <code>\u2013repelSet<\/code> en tu comando para especificar el conjunto de r\u00e9plica que vas a utilizar:<\/p>\n<pre><code class=\"language-markdown\">mongod --port 27017 \u2013 dbpath \/var\/lib\/mongodb  --replSet replicaSet1 --bind_ip localhost,&lt;hostname(s)|ip address(es)&gt;<\/code><\/pre>\n<p>Debes especificar el nombre de tu servidor junto con la direcci\u00f3n \u00fanica en el comando.<\/p>\n<p>Conecta el shell con tu instancia MongoDB y utiliza el comando iniciar para iniciar el proceso de replicaci\u00f3n y convertir con \u00e9xito la instancia en un conjunto de r\u00e9plica. Puedes realizar todas las operaciones b\u00e1sicas como a\u00f1adir o eliminar una instancia utilizando los siguientes comandos:<\/p>\n<pre><code class=\"language-markdown\">rs.add(\u201c&lt;host_name:port&gt;\u201d)<\/code><\/pre>\n<pre><code class=\"language-markdown\">rs.remove(\u201chost-name\u201d)<\/code><\/pre>\n<p>Adem\u00e1s, puedes comprobar el estado de tu conjunto de r\u00e9plicas de MongoDB utilizando los comandos <code>rs.status()<\/code> y <code>rs.conf()<\/code>.<\/p>\n<h3>M\u00e9todo 4: Atlas MongoDB &#8211; Una alternativa m\u00e1s sencilla<\/h3>\n<p>La replicaci\u00f3n y la <a href=\"https:\/\/kinsta.com\/es\/blog\/mongodb-sharding\/\">fragmentaci\u00f3n<\/a> pueden funcionar juntas para formar algo llamado cl\u00faster fragmentado. Aunque la instalaci\u00f3n y la configuraci\u00f3n pueden llevar bastante tiempo, MongoDB Atlas es una alternativa mejor que los m\u00e9todos mencionados anteriormente.<\/p>\n<p>Automatiza tus conjuntos de r\u00e9plicas, haciendo que el proceso sea f\u00e1cil de implementar. Puedes desplegar conjuntos de r\u00e9plica fragmentados globalmente con unos pocos clics, lo que permite la recuperaci\u00f3n ante desastres, una <a href=\"https:\/\/kinsta.com\/es\/blog\/adminer\/\">administraci\u00f3n<\/a> m\u00e1s sencilla, localizaci\u00f3n de datos y despliegues multirregi\u00f3n.<\/p>\n<p>En MongoDB Atlas, tenemos que crear cl\u00fasteres, que pueden ser un conjunto de r\u00e9plicas o un cl\u00faster fragmentado. Para un proyecto concreto, el n\u00famero de nodos de un cl\u00faster en otras regiones est\u00e1 limitado a un total de 40.<\/p>\n<p>Esto excluye los clusters libres o compartidos y las regiones de la nube de Google que se comunican entre s\u00ed. El n\u00famero total de nodos entre dos regiones cualesquiera debe cumplir esta limitaci\u00f3n. Por ejemplo, si hay un proyecto en el que:<\/p>\n<ul>\n<li>La regi\u00f3n A tiene 15 nodos.<\/li>\n<li>La regi\u00f3n B tiene 25 nodos<\/li>\n<li>La regi\u00f3n C tiene 10 nodos<\/li>\n<\/ul>\n<p>S\u00f3lo podemos asignar 5 nodos m\u00e1s a la regi\u00f3n C ya que,<\/p>\n<ol>\n<li>Regi\u00f3n A+ Regi\u00f3n B = 40; cumple la restricci\u00f3n de que 40 es el n\u00famero m\u00e1ximo de nodos permitido.<\/li>\n<li>Regi\u00f3n B+ Regi\u00f3n C = 25+10+5 (Nodos adicionales asignados a C) = 40; cumple la restricci\u00f3n de que 40 es el n\u00famero m\u00e1ximo de nodos permitido.<\/li>\n<li>Regi\u00f3n A+ Regi\u00f3n C =15+10+5 (Nodos adicionales asignados a C) = 30; cumple la restricci\u00f3n de que 40 es el n\u00famero m\u00e1ximo de nodos permitido.<\/li>\n<\/ol>\n<p>Si asignamos 10 nodos m\u00e1s a la regi\u00f3n C, haciendo que la regi\u00f3n C tenga 20 nodos, entonces Regi\u00f3n B + Regi\u00f3n C = 45 nodos. Esto superar\u00eda la restricci\u00f3n dada, por lo que es posible que no puedas crear un cl\u00faster multirregi\u00f3n.<\/p>\n<p>Cuando creas un cl\u00faster, Atlas crea un contenedor de red en el proyecto para el proveedor de la nube, si no estaba all\u00ed previamente. Para crear un cl\u00faster de conjunto de r\u00e9plicas en MongoDB Atlas, ejecuta el siguiente comando en la CLI de Atlas:<\/p>\n<pre><code class=\"language-markdown\">atlas clusters create [name] [options]<\/code><\/pre>\n<p>Aseg\u00farate de dar un nombre de cl\u00faster descriptivo, ya que no se puede cambiar una vez creado el cl\u00faster. El argumento puede contener letras ASCII, n\u00fameros y guiones.<\/p>\n<p>Hay <a href=\"https:\/\/www.mongodb.com\/docs\/atlas\/cli\/stable\/command\/atlas-clusters-create\/\" target=\"_blank\" rel=\"noopener noreferrer\">varias<\/a> opciones disponibles para la creaci\u00f3n de cl\u00fasteres en MongoDB en funci\u00f3n de tus requisitos. Por ejemplo, si quieres una copia de seguridad continua en la nube para tu cl\u00faster, establece <code>--backup<\/code> como verdadero.<\/p>\n<h2>C\u00f3mo Gestionar el Retraso de la Replicaci\u00f3n<\/h2>\n<p>El retardo de replicaci\u00f3n puede ser bastante desagradable. Es un retraso entre una operaci\u00f3n en el primario y la aplicaci\u00f3n de esa operaci\u00f3n desde el oplog al secundario. Si tu empresa trabaja con grandes conjuntos de datos, es de esperar que se produzca un retraso dentro de un cierto umbral. Sin embargo, a veces tambi\u00e9n pueden contribuir factores externos y aumentar el retraso. Para beneficiarte de una replicaci\u00f3n actualizada, aseg\u00farate de que<\/p>\n<ol>\n<li>Diriges tu tr\u00e1fico de red con un ancho de banda estable y suficiente. La latencia de la red desempe\u00f1a un papel muy importante a la hora de afectar a tu replicaci\u00f3n, y si la red es insuficiente para satisfacer las necesidades del proceso de replicaci\u00f3n, se producir\u00e1n retrasos en la replicaci\u00f3n de datos en todo el conjunto de r\u00e9plicas.<\/li>\n<li>Tienes un rendimiento de disco suficiente. Si el sistema de archivos y el dispositivo de disco del secundario no son capaces de volcar datos al disco con la misma rapidez que el primario, el secundario tendr\u00e1 dificultades para mantener el ritmo. Por lo tanto, los nodos secundarios procesan las consultas de escritura m\u00e1s lentamente que el nodo primario. \u00c9ste es un problema com\u00fan en la mayor\u00eda de los sistemas multiinquilino, incluidas las instancias virtualizadas y los despliegues a gran escala.<\/li>\n<li>Solicita una consulta de escritura despu\u00e9s de un intervalo para dar a los secundarios la oportunidad de ponerse al d\u00eda con el primario, especialmente cuando quieras realizar una operaci\u00f3n de carga masiva o de ingesti\u00f3n de datos que requiera un gran n\u00famero de escrituras en el primario. Los secundarios no podr\u00e1n leer el oplog con la rapidez suficiente para seguir el ritmo de los cambios, sobre todo si hay problemas de escritura no reconocidos.<\/li>\n<li>Identifica las tareas en segundo plano en ejecuci\u00f3n. Algunas tareas, como los trabajos cron, las actualizaciones del servidor y las comprobaciones de seguridad, pueden tener efectos inesperados en la red o en el uso del disco, provocando retrasos en el proceso de replicaci\u00f3n.<\/li>\n<\/ol>\n<p>Si no est\u00e1s seguro de si hay un retraso en la replicaci\u00f3n de tu aplicaci\u00f3n, no te preocupes: \u00a1en la siguiente secci\u00f3n se tratan las estrategias de soluci\u00f3n de problemas!<\/p>\n<h2>Resoluci\u00f3n de Problemas de los Conjuntos de R\u00e9plica de MongoDB<\/h2>\n<p>Has configurado con \u00e9xito tus conjuntos de r\u00e9plica, pero notas que tus datos son incoherentes entre servidores. Esto es muy alarmante para las empresas a gran escala, sin embargo, con m\u00e9todos r\u00e1pidos de soluci\u00f3n de <a href=\"https:\/\/kinsta.com\/es\/blog\/solucionar-reparar-problemas-base-datos\/\">problemas<\/a> , \u00a1puedes encontrar la causa o incluso corregir el problema! A continuaci\u00f3n se indican algunas estrategias habituales para solucionar problemas de despliegue de conjuntos de r\u00e9plicas que pueden resultarte \u00fatiles:<\/p>\n<h3>Comprobar el estado de la r\u00e9plica<\/h3>\n<p>Podemos comprobar el estado actual del conjunto de r\u00e9plica y el estado de cada nodo ejecutando el siguiente comando en una sesi\u00f3n de mongosh que est\u00e9 conectada al primario de un conjunto de r\u00e9plica.<\/p>\n<pre><code class=\"language-markdown\"> rs.status()<\/code><\/pre>\n<h3>Comprueba el retraso en la replicaci\u00f3n<\/h3>\n<p>Como ya hemos comentado, el retardo de replicaci\u00f3n puede ser un problema grave, ya que hace que los miembros \u00abrezagados\u00bb no puedan convertirse r\u00e1pidamente en primarios y aumenta la posibilidad de que las operaciones de lectura distribuida sean incoherentes. Podemos comprobar la longitud actual del registro de replicaci\u00f3n utilizando el siguiente comando:<\/p>\n<pre><code class=\"language-markdown\">rs.printSecondaryReplicationInfo()<\/code><\/pre>\n<p>Esto devuelve el valor <code>syncedTo<\/code>, que es la hora a la que se escribi\u00f3 la \u00faltima entrada oplog en el secundario para cada miembro. He aqu\u00ed un ejemplo para demostrar lo mismo:<\/p>\n<pre><code class=\"language-markdown\">source: m1.example.net:27017\n    syncedTo: Mon Oct 10 2022 10:19:35 GMT-0400 (EDT)\n    0 secs (0 hrs) behind the primary\nsource: m2.example.net:27017\n    syncedTo: Mon Oct 10 2022 10:19:35 GMT-0400 (EDT)\n    0 secs (0 hrs) behind the primary<\/code><\/pre>\n<p>Un nodo retrasado puede mostrarse como 0 segundos por detr\u00e1s del primario cuando el periodo de inactividad en el primario es mayor que el valor <code> members[n].secondaryDelaySecs<\/code>.<\/p>\n<h3>Probar las conexiones entre todos los nodos<\/h3>\n<p>Cada miembro de un conjunto de r\u00e9plicas debe poder conectarse con todos los dem\u00e1s nodos. Aseg\u00farate siempre de verificar las conexiones en ambas direcciones. En la mayor\u00eda de los casos, las configuraciones de cortafuegos o las topolog\u00edas de red impiden la conectividad normal y necesaria, lo que puede bloquear la replicaci\u00f3n.<\/p>\n<p>Por ejemplo, supongamos que la instancia mongod se vincula tanto a localhost como a hostname &#8216;ExampleHostname&#8217;, que est\u00e1 asociado a la direcci\u00f3n IP 198.41.110.1:<\/p>\n<pre><code class=\"language-markdown\">mongod --bind_ip localhost, ExampleHostname<\/code><\/pre>\n<p>Para conectarse a esta instancia, los clientes remotos deben especificar el nombre de host o la Direcci\u00f3n IP:<\/p>\n<pre><code class=\"language-markdown\">mongosh --host ExampleHostname\nmongosh --host 198.41.110.1<\/code><\/pre>\n<p>Si un conjunto de r\u00e9plicas consta de tres miembros, m1, m2 y m3, utilizando el puerto por defecto 27017, debes probar la conexi\u00f3n como se indica a continuaci\u00f3n:<\/p>\n<p><strong>En m1:<\/strong><\/p>\n<pre><code class=\"language-markdown\">mongosh --host m2 --port 27017\nmongosh --host m3 --port 27017<\/code><\/pre>\n<p><strong>En m2:<\/strong><\/p>\n<pre><code class=\"language-markdown\">mongosh --host m1 --port 27017\nmongosh --host m3 --port 27017<\/code><\/pre>\n<p><strong>En m3:<\/strong><\/p>\n<pre><code class=\"language-markdown\">mongosh --host m1 --port 27017\nmongosh --host m2 --port 27017<\/code><\/pre>\n<p>Si falla alguna conexi\u00f3n en cualquier direcci\u00f3n, tendr\u00edas que comprobar la configuraci\u00f3n de tu <a href=\"https:\/\/kinsta.com\/es\/blog\/que-es-un-cortafuegos\/\">cortafuegos<\/a> y reconfigurarlo para permitir las conexiones.<\/p>\n<h2>Garantizar la Seguridad de las Comunicaciones con la Autenticaci\u00f3n de Archivos de Claves<\/h2>\n<p>Por defecto, la autenticaci\u00f3n de archivos de claves en MongoDB se basa en el mecanismo de autenticaci\u00f3n de respuesta de desaf\u00edo salado (SCRAM &#8211; salted challenge response authentication mechanism). Para ello, MongoDB debe leer y validar las credenciales proporcionadas por el usuario, que incluyen una combinaci\u00f3n del nombre de usuario, la contrase\u00f1a y la base de datos de autenticaci\u00f3n que conoce la instancia espec\u00edfica de MongoDB. Este es el mecanismo exacto que se utiliza para autenticar a los usuarios que proporcionan una contrase\u00f1a al conectarse a la base de datos.<\/p>\n<p>Cuando activas la autenticaci\u00f3n en MongoDB, se activa autom\u00e1ticamente el Control de Acceso Basado en Roles (RBAC) para el conjunto de r\u00e9plicas, y se concede al usuario uno o varios roles que determinan su acceso a los recursos de la base de datos. Cuando se habilita el RBAC, significa que s\u00f3lo el usuario v\u00e1lido de Mongo autenticado y con los privilegios adecuados podr\u00e1 acceder a los recursos del sistema.<\/p>\n<p>El archivo de claves act\u00faa como una contrase\u00f1a compartida para cada miembro del cl\u00faster. Esto permite que cada instancia de Mongo en el conjunto de r\u00e9plicas utilice el contenido del archivo de claves como contrase\u00f1a compartida para autenticar a otros miembros en el despliegue.<\/p>\n<p>S\u00f3lo las instancias mongod con el archivo de claves correcto pueden unirse al conjunto de r\u00e9plica. La longitud de una clave debe estar comprendida entre 6 y 1024 caracteres y s\u00f3lo puede contener caracteres del conjunto base64. Ten en cuenta que MongoDB elimina los espacios en blanco al leer las claves.<\/p>\n<p>Puedes <strong>generar un archivo <\/strong>de claves utilizando varios m\u00e9todos. En este tutorial, utilizamos <code>openssl <\/code> para generar una cadena compleja de 1024 caracteres aleatorios para utilizarla como contrase\u00f1a compartida. A continuaci\u00f3n, utiliza <code>chmod<\/code> para cambiar los permisos del archivo y proporcionar permisos de lectura s\u00f3lo para el propietario del archivo. Evita almacenar el archivo de claves en medios de almacenamiento que puedan desconectarse f\u00e1cilmente del hardware que aloja las instancias de mongod, como una unidad USB o un dispositivo de almacenamiento conectado a la red. A continuaci\u00f3n se muestra el comando para generar un archivo de claves:<\/p>\n<pre><code class=\"language-markdown\">openssl rand -base64 756 &gt; &lt;path-to-keyfile&gt;\nchmod 400 &lt;path-to-keyfile&gt;<\/code><\/pre>\n<p>A continuaci\u00f3n, <strong>copia el archivo de claves en cada nodo del conjunto de r\u00e9plicas<\/strong>. Aseg\u00farate de que el usuario que ejecuta las instancias mongod es el propietario del archivo y puede acceder al archivo de claves. Una vez hecho lo anterior, <strong>apaga todos los miembros del conjunto de r\u00e9plica<\/strong> empezando por los secundarios. Una vez que todos los secundarios est\u00e9n desconectados, puedes seguir adelante y apagar el primario. Es esencial seguir este orden para evitar posibles retrocesos. Ahora apaga la instancia mongod ejecutando el siguiente comando:<\/p>\n<pre><code class=\"language-markdown\">use admin\ndb.shutdownServer()<\/code><\/pre>\n<p>Una vez ejecutado el comando, todos los nodos del conjunto de r\u00e9plicas estar\u00e1n desconectados. Ahora,<strong> reinicia cada nodo del conjunto de r\u00e9plicas con el control de acceso activado<\/strong>.<\/p>\n<p>Para cada miembro del conjunto de r\u00e9plicas, inicia la instancia mongod con la configuraci\u00f3n del archivo de configuraci\u00f3n <code>security.keyFile<\/code> o con la opci\u00f3n de l\u00ednea de comandos <code>--keyFile<\/code>.<\/p>\n<p>Si utilizas un archivo de configuraci\u00f3n, establece<\/p>\n<ul>\n<li>security.keyFile a la ruta del archivo de claves, y<\/li>\n<li>replication.replSetName al nombre del conjunto de r\u00e9plica.<\/li>\n<\/ul>\n<pre><code class=\"language-markdown\">security:\n  keyFile: &lt;path-to-keyfile&gt;\nreplication:\n  replSetName: &lt;replicaSetName&gt;\nnet:\n   bindIp: localhost,&lt;hostname(s)|ip address(es)&gt;<\/code><\/pre>\n<p>Inicia la instancia mongod utilizando el archivo de configuraci\u00f3n:<\/p>\n<pre><code class=\"language-markdown\">mongod --config &lt;path-to-config-file&gt;<\/code><\/pre>\n<p>Si utilizas las opciones de la l\u00ednea de comandos, inicia la instancia de mongod con las siguientes opciones:<\/p>\n<ul>\n<li>&#8211;keyFile establecido en la ruta del archivo de claves, y<\/li>\n<li>&#8211;replSet con el nombre del conjunto de r\u00e9plicas.<\/li>\n<\/ul>\n<pre><code class=\"language-markdown\">mongod --keyFile &lt;path-to-keyfile&gt; --replSet &lt;replicaSetName&gt; --bind_ip localhost,&lt;hostname(s)|ip address(es)&gt;<\/code><\/pre>\n<p>Puedes incluir opciones adicionales seg\u00fan requiera tu configuraci\u00f3n. Por ejemplo, si deseas que clientes remotos se conecten a tu despliegue o los miembros de tu despliegue se ejecutan en distintos hosts, especifica &#8211;bind_ip. Para m\u00e1s informaci\u00f3n, consulta <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/release-notes\/3.6-compatibility\/#std-label-3.6-bind_ip-compatibility\" target=\"_blank\" rel=\"noopener noreferrer\">Cambios en la compatibilidad de enlace localhost.<\/a><\/p>\n<p>A continuaci\u00f3n, <strong>con\u00e9ctate a un nodo del conjunto de r\u00e9plicas a trav\u00e9s de la interfaz localhost<\/strong>. Debes ejecutar mongosh en la misma m\u00e1quina f\u00edsica que la instancia de mongod. Esta interfaz s\u00f3lo est\u00e1 disponible cuando no se han creado usuarios para la implantaci\u00f3n y se cierra autom\u00e1ticamente tras la creaci\u00f3n del primer usuario.<\/p>\n<p>A continuaci\u00f3n, iniciamos el conjunto de r\u00e9plicas. Desde mongosh, ejecuta el m\u00e9todo <code>rs.initiate()<\/code>:<\/p>\n<pre><code class=\"language-markdown\">rs.initiate(\n  {\n    _id: \"myReplSet\",\n    members: [\n      { _id: 0, host: \"mongo1:27017\" },\n      { _id: 1, host: \"mongo2:27017\" },\n      { _id: 2, host: \"mongo3:27017\" }\n    ]\n  }\n)<\/code><\/pre>\n<p>Como ya hemos comentado, este m\u00e9todo elige a uno de los nodos para que sea el nodo primario del conjunto de r\u00e9plica. Para localizar al nodo primario, utiliza <code>rs.status()<\/code>. Con\u00e9ctate al primario antes de continuar.<\/p>\n<p>Ahora, <strong>crea el usuario administrador<\/strong>. Puedes a\u00f1adir un usuario utilizando el m\u00e9todo <code>db.createUser()<\/code>. Aseg\u00farate de que el usuario tenga al menos el rol <code>userAdminAnyDatabase<\/code> en la base de datos admin.<\/p>\n<p>El siguiente ejemplo crea el usuario &#8216;batman&#8217; con el rol <code>userAdminAnyDatabase<\/code> en la base de datos admin:<\/p>\n<pre><code class=\"language-markdown\">admin = db.getSiblingDB(\"admin\")\nadmin.createUser(\n  {\n    user: \"batman\",\n    pwd: passwordPrompt(), \/\/ or cleartext password\n    roles: [ { role: \"userAdminAnyDatabase\", db: \"admin\" } ]\n  }\n)<\/code><\/pre>\n<p>Introduce la contrase\u00f1a creada anteriormente cuando se te solicite.<\/p>\n<p>A continuaci\u00f3n, debes <strong>autenticarte como usuario<\/strong> administrador. Para ello, utiliza <code>db.auth()<\/code> para autenticarte. Por ejemplo<\/p>\n<p>db.getSiblingDB(\u00abadmin\u00bb).auth(\u00abbatman\u00bb, passwordPrompt()) \/\/ o contrase\u00f1a en texto claro<\/p>\n<p>Como alternativa, puedes conectar una nueva instancia de mongosh al nodo primario del conjunto de r\u00e9plicas utilizando los par\u00e1metros <code>-u &lt;username&gt;<\/code>,<code> -p &lt;password&gt;<\/code> y <code>--authenticationDatabase<\/code>.<\/p>\n<pre><code class=\"language-markdown\">mongosh -u \"batman\" -p  --authenticationDatabase \"admin\"<\/code><\/pre>\n<p>Aunque no especifiques la contrase\u00f1a en el campo de la l\u00ednea de comandos <code>-p<\/code>, mongosh te pedir\u00e1 la contrase\u00f1a.<\/p>\n<p>Por \u00faltimo, <strong>crea el administrador del cl\u00faster<\/strong>. El rol <code>clusterAdmin<\/code> da acceso a las operaciones de replicaci\u00f3n, como la configuraci\u00f3n del conjunto de r\u00e9plicas.<\/p>\n<p>Vamos a crear un usuario administrador del cl\u00faster y a asignarle el rol <code>clusterAdmin<\/code> en la base de datos admin:<\/p>\n<pre><code class=\"language-markdown\">db.getSiblingDB(\"admin\").createUser(\n  {\n    \"user\": \"robin\",\n    \"pwd\": passwordPrompt(),     \/\/ or cleartext password\n    roles: [ { \"role\" : \"clusterAdmin\", \"db\" : \"admin\" } ]\n  }\n)<\/code><\/pre>\n<p>Introduce la contrase\u00f1a cuando se te solicite.<\/p>\n<p>Si lo deseas, puedes crear usuarios adicionales para permitir clientes e interactuar con el conjunto de r\u00e9plicas.<\/p>\n<p>\u00a1Listo! \u00a1Has activado con \u00e9xito la autenticaci\u00f3n por fichero de claves!<\/p>\n\n<h2>Resumen<\/h2>\n<p>La replicaci\u00f3n ha sido un requisito esencial en lo que respecta a las bases de datos, sobre todo a medida que aumentan las empresas. Mejora ampliamente el <a href=\"https:\/\/kinsta.com\/es\/blog\/herramientas-apm\/\">rendimiento<\/a>, la seguridad de los datos y la disponibilidad del sistema. Hablando de rendimiento, es fundamental para tu base de datos de WordPress controlar los problemas de rendimiento y rectificarlos en el momento oportuno, por ejemplo, con <a href=\"https:\/\/kinsta.com\/es\/herramienta-apm\/\">Kinsta APM<\/a>, Jetpack y Freshping, por nombrar algunos.<\/p>\n<p>La replicaci\u00f3n ayuda a garantizar la protecci\u00f3n de los datos en varios servidores y evita que tus servidores sufran graves periodos de inactividad (o peor a\u00fan, que pierdan tus datos por completo). En este art\u00edculo, cubrimos la creaci\u00f3n de un conjunto de r\u00e9plicas y algunos consejos para solucionar problemas, junto con la importancia de la replicaci\u00f3n. \u00bfUtilizas la replicaci\u00f3n de MongoDB en tu empresa y te ha resultado \u00fatil? \u00a1H\u00e1znoslo saber en la secci\u00f3n de comentarios m\u00e1s abajo!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>MongoDB es una base de datos NoSQL que utiliza documentos tipo JSON con esquemas din\u00e1micos. Cuando se trabaja con bases de datos, siempre es bueno tener &#8230;<\/p>\n","protected":false},"author":199,"featured_media":63906,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[1337],"class_list":["post-63905","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-herramientas-de-desarrollo-web"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Construye un Robusto Conjunto de R\u00e9plicas MongoDB en Tiempo R\u00e9cord (4 M\u00e9todos) - Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"Un conjunto de r\u00e9plicas MongoDB es un grupo de instancias MongoDB interconectadas que proporcionan redundancia y alta disponibilidad. \u00a1Despliega conjuntos de r\u00e9plica y protege tus datos!\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/es\/blog\/conjunto-de-replicas-mongodb\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Construye un Robusto Conjunto de R\u00e9plicas MongoDB en Tiempo R\u00e9cord (4 M\u00e9todos)\" \/>\n<meta property=\"og:description\" content=\"Un conjunto de r\u00e9plicas MongoDB es un grupo de instancias MongoDB interconectadas que proporcionan redundancia y alta disponibilidad. \u00a1Despliega conjuntos de r\u00e9plica y protege tus datos!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/es\/blog\/conjunto-de-replicas-mongodb\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinsta.es\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-03-16T07:46:26+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-01-17T13:21:04+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/03\/mongodb-replica-set.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Jeremy Holcombe\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Un conjunto de r\u00e9plicas MongoDB es un grupo de instancias MongoDB interconectadas que proporcionan redundancia y alta disponibilidad. \u00a1Despliega conjuntos de r\u00e9plica y protege tus datos!\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/03\/mongodb-replica-set.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@Kinsta_ES\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_ES\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jeremy Holcombe\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"30 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/conjunto-de-replicas-mongodb\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/conjunto-de-replicas-mongodb\/\"},\"author\":{\"name\":\"Jeremy Holcombe\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21\"},\"headline\":\"Construye un Robusto Conjunto de R\u00e9plicas MongoDB en Tiempo R\u00e9cord (4 M\u00e9todos)\",\"datePublished\":\"2023-03-16T07:46:26+00:00\",\"dateModified\":\"2025-01-17T13:21:04+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/conjunto-de-replicas-mongodb\/\"},\"wordCount\":6701,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/es\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/conjunto-de-replicas-mongodb\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/03\/mongodb-replica-set.jpg\",\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/es\/blog\/conjunto-de-replicas-mongodb\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/conjunto-de-replicas-mongodb\/\",\"url\":\"https:\/\/kinsta.com\/es\/blog\/conjunto-de-replicas-mongodb\/\",\"name\":\"Construye un Robusto Conjunto de R\u00e9plicas MongoDB en Tiempo R\u00e9cord (4 M\u00e9todos) - Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/es\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/conjunto-de-replicas-mongodb\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/conjunto-de-replicas-mongodb\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/03\/mongodb-replica-set.jpg\",\"datePublished\":\"2023-03-16T07:46:26+00:00\",\"dateModified\":\"2025-01-17T13:21:04+00:00\",\"description\":\"Un conjunto de r\u00e9plicas MongoDB es un grupo de instancias MongoDB interconectadas que proporcionan redundancia y alta disponibilidad. \u00a1Despliega conjuntos de r\u00e9plica y protege tus datos!\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/conjunto-de-replicas-mongodb\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/es\/blog\/conjunto-de-replicas-mongodb\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/conjunto-de-replicas-mongodb\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/03\/mongodb-replica-set.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/03\/mongodb-replica-set.jpg\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/conjunto-de-replicas-mongodb\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/es\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Herramientas de Desarrollo Web\",\"item\":\"https:\/\/kinsta.com\/es\/secciones\/herramientas-de-desarrollo-web\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Construye un Robusto Conjunto de R\u00e9plicas MongoDB en Tiempo R\u00e9cord (4 M\u00e9todos)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/es\/#website\",\"url\":\"https:\/\/kinsta.com\/es\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Soluciones de alojamiento premium, r\u00e1pidas y seguras\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/es\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/es\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/es\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/es\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinsta.es\/\",\"https:\/\/x.com\/Kinsta_ES\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21\",\"name\":\"Jeremy Holcombe\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g\",\"caption\":\"Jeremy Holcombe\"},\"description\":\"Senior Editor at Kinsta, WordPress Web Developer, and Content Writer. Outside of all things WordPress, I enjoy the beach, golf, and movies. I also have tall people problems.\",\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/jeremyholcombe\/\"],\"url\":\"https:\/\/kinsta.com\/es\/blog\/author\/jeremyholcombe\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Construye un Robusto Conjunto de R\u00e9plicas MongoDB en Tiempo R\u00e9cord (4 M\u00e9todos) - Kinsta\u00ae","description":"Un conjunto de r\u00e9plicas MongoDB es un grupo de instancias MongoDB interconectadas que proporcionan redundancia y alta disponibilidad. \u00a1Despliega conjuntos de r\u00e9plica y protege tus datos!","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/es\/blog\/conjunto-de-replicas-mongodb\/","og_locale":"es_ES","og_type":"article","og_title":"Construye un Robusto Conjunto de R\u00e9plicas MongoDB en Tiempo R\u00e9cord (4 M\u00e9todos)","og_description":"Un conjunto de r\u00e9plicas MongoDB es un grupo de instancias MongoDB interconectadas que proporcionan redundancia y alta disponibilidad. \u00a1Despliega conjuntos de r\u00e9plica y protege tus datos!","og_url":"https:\/\/kinsta.com\/es\/blog\/conjunto-de-replicas-mongodb\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinsta.es\/","article_published_time":"2023-03-16T07:46:26+00:00","article_modified_time":"2025-01-17T13:21:04+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/03\/mongodb-replica-set.jpg","type":"image\/jpeg"}],"author":"Jeremy Holcombe","twitter_card":"summary_large_image","twitter_description":"Un conjunto de r\u00e9plicas MongoDB es un grupo de instancias MongoDB interconectadas que proporcionan redundancia y alta disponibilidad. \u00a1Despliega conjuntos de r\u00e9plica y protege tus datos!","twitter_image":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/03\/mongodb-replica-set.jpg","twitter_creator":"@Kinsta_ES","twitter_site":"@Kinsta_ES","twitter_misc":{"Escrito por":"Jeremy Holcombe","Tiempo de lectura":"30 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/es\/blog\/conjunto-de-replicas-mongodb\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/es\/blog\/conjunto-de-replicas-mongodb\/"},"author":{"name":"Jeremy Holcombe","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21"},"headline":"Construye un Robusto Conjunto de R\u00e9plicas MongoDB en Tiempo R\u00e9cord (4 M\u00e9todos)","datePublished":"2023-03-16T07:46:26+00:00","dateModified":"2025-01-17T13:21:04+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/es\/blog\/conjunto-de-replicas-mongodb\/"},"wordCount":6701,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/es\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/es\/blog\/conjunto-de-replicas-mongodb\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/03\/mongodb-replica-set.jpg","inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/es\/blog\/conjunto-de-replicas-mongodb\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/es\/blog\/conjunto-de-replicas-mongodb\/","url":"https:\/\/kinsta.com\/es\/blog\/conjunto-de-replicas-mongodb\/","name":"Construye un Robusto Conjunto de R\u00e9plicas MongoDB en Tiempo R\u00e9cord (4 M\u00e9todos) - Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinsta.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/es\/blog\/conjunto-de-replicas-mongodb\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/es\/blog\/conjunto-de-replicas-mongodb\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/03\/mongodb-replica-set.jpg","datePublished":"2023-03-16T07:46:26+00:00","dateModified":"2025-01-17T13:21:04+00:00","description":"Un conjunto de r\u00e9plicas MongoDB es un grupo de instancias MongoDB interconectadas que proporcionan redundancia y alta disponibilidad. \u00a1Despliega conjuntos de r\u00e9plica y protege tus datos!","breadcrumb":{"@id":"https:\/\/kinsta.com\/es\/blog\/conjunto-de-replicas-mongodb\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/es\/blog\/conjunto-de-replicas-mongodb\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/blog\/conjunto-de-replicas-mongodb\/#primaryimage","url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/03\/mongodb-replica-set.jpg","contentUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/03\/mongodb-replica-set.jpg","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/es\/blog\/conjunto-de-replicas-mongodb\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/es\/"},{"@type":"ListItem","position":2,"name":"Herramientas de Desarrollo Web","item":"https:\/\/kinsta.com\/es\/secciones\/herramientas-de-desarrollo-web\/"},{"@type":"ListItem","position":3,"name":"Construye un Robusto Conjunto de R\u00e9plicas MongoDB en Tiempo R\u00e9cord (4 M\u00e9todos)"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/es\/#website","url":"https:\/\/kinsta.com\/es\/","name":"Kinsta\u00ae","description":"Soluciones de alojamiento premium, r\u00e1pidas y seguras","publisher":{"@id":"https:\/\/kinsta.com\/es\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/es\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/es\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinsta.es\/","https:\/\/x.com\/Kinsta_ES","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21","name":"Jeremy Holcombe","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g","caption":"Jeremy Holcombe"},"description":"Senior Editor at Kinsta, WordPress Web Developer, and Content Writer. Outside of all things WordPress, I enjoy the beach, golf, and movies. I also have tall people problems.","sameAs":["https:\/\/www.linkedin.com\/in\/jeremyholcombe\/"],"url":"https:\/\/kinsta.com\/es\/blog\/author\/jeremyholcombe\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/63905","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/users\/199"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/comments?post=63905"}],"version-history":[{"count":15,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/63905\/revisions"}],"predecessor-version":[{"id":69506,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/63905\/revisions\/69506"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/63905\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/63905\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/63905\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/63905\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/63905\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/63905\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/63905\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/63905\/translations\/es"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/63905\/translations\/se"},{"embeddable":true,"hreflang":"da","title":"Danish","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/63905\/translations\/dk"},{"href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/63905\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/media\/63906"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/media?parent=63905"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/tags?post=63905"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/topic?post=63905"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}