{"id":56221,"date":"2022-08-11T14:36:53","date_gmt":"2022-08-11T12:36:53","guid":{"rendered":"https:\/\/kinsta.com\/es\/?p=56221&#038;preview=true&#038;preview_id=56221"},"modified":"2023-08-25T11:22:03","modified_gmt":"2023-08-25T09:22:03","slug":"postgresql-replicacion","status":"publish","type":"post","link":"https:\/\/kinsta.com\/es\/blog\/postgresql-replicacion\/","title":{"rendered":"Replicaci\u00f3n PostgreSQL: Una Gu\u00eda Completa"},"content":{"rendered":"<p>Como te dir\u00e1 cualquier propietario de un sitio web, la p\u00e9rdida de datos y el tiempo de inactividad, incluso en dosis m\u00ednimas, pueden ser catastr\u00f3ficos. Pueden golpear a los desprevenidos en cualquier momento, provocando una reducci\u00f3n de la productividad, la accesibilidad y la confianza en el producto.<\/p>\n<p>Para proteger la integridad de tu sitio web, es vital crear protecciones contra la posibilidad de un tiempo de inactividad o una p\u00e9rdida de datos.<\/p>\n<p>Ah\u00ed es donde entra en acci\u00f3n la replicaci\u00f3n de datos.<\/p>\n\n<p>La replicaci\u00f3n de datos es un proceso de copia de seguridad automatizado en el que tus datos se copian repetidamente desde su base de datos principal a otra ubicaci\u00f3n remota para su custodia. Es una tecnolog\u00eda integral para cualquier sitio o aplicaci\u00f3n que ejecute un servidor de <a href=\"https:\/\/kinsta.com\/es\/blog\/base-de-datos-wordpress\/\">bases de datos<\/a>. Tambi\u00e9n puedes aprovechar la base de datos replicada para procesar SQL de s\u00f3lo lectura, permitiendo que se ejecuten m\u00e1s procesos dentro del sistema.<\/p>\n<p>Configurar la replicaci\u00f3n entre dos bases de datos ofrece tolerancia a los fallos frente a percances inesperados. Se considera la mejor estrategia para conseguir una alta disponibilidad durante los desastres.<\/p>\n<p>En este art\u00edculo, nos adentraremos en las diferentes estrategias que pueden implementar los <a href=\"https:\/\/kinsta.com\/es\/blog\/desarrollador-de-backend\/\">desarrolladores de backend<\/a> para conseguir una replicaci\u00f3n de PostgreSQL sin problemas.<br \/>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc><\/p>\n<h2>\u00bfQu\u00e9 es la Replicaci\u00f3n PostgreSQL?<\/h2>\n<figure id=\"attachment_128034\" aria-describedby=\"caption-attachment-128034\" style=\"width: 945px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-128034 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/07\/PostgreSQL-Replication-Illustration.png\" alt=\"Una ilustraci\u00f3n de la replicaci\u00f3n de PostgreSQL que muestra el flujo de datos del servidor primario a la r\u00e9plica.\" width=\"945\" height=\"310\"><figcaption id=\"caption-attachment-128034\" class=\"wp-caption-text\">Ilustraci\u00f3n de la replicaci\u00f3n PostgreSQL (Fuente: <a href=\"https:\/\/www.enterprisedb.com\/postgres-tutorials\/postgresql-replication-and-automatic-failover-tutorial#continuous-wal\">EnterpriseDB<\/a>)<\/figcaption><\/figure>\n<p>La replicaci\u00f3n PostgreSQL se define como el proceso de copiar datos de un servidor de <a href=\"https:\/\/kinsta.com\/es\/blog\/que-es-postgresql\/\">base de datos PostgreSQL<\/a> a otro servidor. El servidor de la base de datos de origen tambi\u00e9n se conoce como servidor \u00abprimario\u00bb, mientras que el servidor de la base de datos que recibe los datos copiados se conoce como servidor \u00abr\u00e9plica\u00bb.<\/p>\n<p>La base de datos PostgreSQL sigue un modelo de replicaci\u00f3n sencillo, en el que todas las escrituras van a un nodo primario. El nodo primario puede entonces aplicar estos cambios y difundirlos a los nodos secundarios.<\/p>\n<h3>\u00bfQu\u00e9 es la Conmutaci\u00f3n por Error Autom\u00e1tica?<\/h3>\n<p>La conmutaci\u00f3n por error es un m\u00e9todo para <a href=\"https:\/\/www.enterprisedb.com\/postgres-tutorials\/postgresql-replication-and-automatic-failover-tutorial\">recuperar los datos si el servidor primario falla<\/a> por cualquier motivo. Siempre que hayas configurado PostreSQL para gestionar la replicaci\u00f3n de tu flujo f\u00edsico, t\u00fa \u2014 y tus usuarios \u2014 estar\u00e9is protegidos contra el tiempo de inactividad debido a un fallo del servidor primario.<\/p>\n<p>Ten en cuenta que el proceso de conmutaci\u00f3n por error puede tardar un poco en configurarse e iniciarse. No hay herramientas incorporadas para monitorear y evaluar los fallos del servidor en PostgreSQL, as\u00ed que tendr\u00e1s que ser creativo.<\/p>\n<p>Afortunadamente, ya no tienes que depender de PostgreSQL para la conmutaci\u00f3n por error. Hay herramientas dedicadas que permiten la conmutaci\u00f3n por error autom\u00e1tica y el cambio autom\u00e1tico al standby, reduciendo el <a href=\"https:\/\/kinsta.com\/es\/blog\/solucionar-reparar-problemas-base-datos\/\">tiempo de inactividad de la base de datos<\/a>.<\/p>\n<p>Al configurar la replicaci\u00f3n por error, pr\u00e1cticamente garantizas una alta disponibilidad al asegurar que los servidores en espera est\u00e9n disponibles si el servidor primario se colapsa alguna vez.<\/p>\n<h2>Ventajas de Utilizar la Replicaci\u00f3n PostgreSQL<\/h2>\n<p>He aqu\u00ed algunas de las principales ventajas de aprovechar la replicaci\u00f3n PostgreSQL:<\/p>\n<ul>\n<li><strong>Migraci\u00f3n de datos:<\/strong> Puedes aprovechar la replicaci\u00f3n de PostgreSQL para la migraci\u00f3n de datos, ya sea a trav\u00e9s de un cambio de hardware del servidor de base de datos o mediante el despliegue del sistema.<\/li>\n<li><strong>Tolerancia a los fallos<\/strong>: Si el servidor primario falla, el servidor en espera puede actuar como servidor, ya que los datos contenidos para ambos servidores, el primario el primario y el que est\u00e1 en espera, son los mismos.<\/li>\n<li><strong>Rendimiento del procesamiento transaccional online (OLTP)<\/strong>: Puedes mejorar el tiempo de procesamiento de transacciones y el tiempo de consulta de un sistema OLTP eliminando la carga de consulta de informes. El tiempo de procesamiento de transacciones es el tiempo que tarda en ejecutarse una consulta determinada antes de que finalice la transacci\u00f3n.<\/li>\n<li><strong>Prueba del sistema en paralelo<\/strong>: Al actualizar un nuevo sistema, tienes que asegurarte de que el sistema se comporta bien con los datos existentes, de ah\u00ed la necesidad de probar con una copia de la base de datos de producci\u00f3n antes de la implantaci\u00f3n.<\/li>\n<\/ul>\n<h2>C\u00f3mo Funciona la Replicaci\u00f3n PostgreSQL<\/h2>\n<p>Generalmente, la gente cree que cuando se est\u00e1 jugando con una arquitectura primaria y secundaria, s\u00f3lo hay una manera de <a href=\"https:\/\/kinsta.com\/es\/blog\/copia-seguridad-sitio-wordpress\/\">configurar las copias de seguridad<\/a> y la replicaci\u00f3n. Sin embargo, las implementaciones de PostgreSQL pueden seguir <a href=\"https:\/\/www.citusdata.com\/blog\/2018\/02\/21\/three-approaches-to-postgresql-replication\/\">cualquiera de estos tres m\u00e9todos<\/a>:<\/p>\n<ol>\n<li><strong>Replicaci\u00f3n en streaming:<\/strong> Replica los datos del nodo primario al secundario, y luego copia los datos a Amazon S3 o Azure Blob para el almacenamiento de las copias de seguridad.<\/li>\n<li><strong>Replicaci\u00f3n a nivel de volumen:<\/strong> Replica los datos en la capa de almacenamiento, empezando por el nodo primario hacia el secundario, y luego copia los datos en Amazon S3 o Azure Blob para el almacenamiento de las copias de seguridad.<\/li>\n<li><strong>Copias de seguridad incrementales:<\/strong> Replica los datos del nodo primario mientras construye un nuevo nodo secundario a partir del almacenamiento de Amazon S3 o Azure Blob, lo que permite el streaming directamente desde el nodo primario.<\/li>\n<\/ol>\n<h3>M\u00e9todo 1: Streaming<\/h3>\n<p>La replicaci\u00f3n en streaming de PostgreSQL, tambi\u00e9n conocida como replicaci\u00f3n WAL, puede configurarse sin problemas despu\u00e9s de instalar PostgreSQL en todos los servidores. Este enfoque de la replicaci\u00f3n se basa en el traslado de los archivos WAL del primario a la base de datos de destino.<\/p>\n<p>Puedes implementar la replicaci\u00f3n en flujo de PostgreSQL utilizando una configuraci\u00f3n primaria-secundaria. El servidor primario es la instancia principal que maneja la base de datos primaria y todas sus operaciones. El servidor secundario act\u00faa como instancia complementaria y ejecuta en s\u00ed mismo todos los cambios realizados en la base de datos primaria, generando una copia id\u00e9ntica en el proceso. El primario es el servidor de lectura\/escritura, mientras que el secundario es de mera lectura.<\/p>\n<p>Para este m\u00e9todo, tienes que configurar tanto el nodo primario como el nodo secundario. Las siguientes secciones dilucidar\u00e1n los pasos necesarios para configurarlos con facilidad.<\/p>\n<h4>Configurar el Nodo Primario<\/h4>\n<p>Puedes configurar el nodo primario para la replicaci\u00f3n en streaming llevando a cabo los siguientes pasos:<\/p>\n<h5>Paso 1: Inicializar la Base de Datos<\/h5>\n<p>Para <a href=\"https:\/\/hevodata.com\/learn\/postgresql-streaming-replication\/#master1\">inicializar la base de datos<\/a>, puedes aprovechar el comando de utilidad <code>initdb<\/code>. A continuaci\u00f3n, puedes crear un nuevo usuario con privilegios de replicaci\u00f3n utilizando el siguiente comando:<\/p>\n<pre><code class=\"language-bash\">CREATE USER 'example_username' REPLICATION LOGIN ENCRYPTED PASSWORD 'example_password';<\/code><\/pre>\n<p>El usuario tendr\u00e1 que proporcionar una contrase\u00f1a y un nombre de usuario para la consulta dada. La palabra clave de replicaci\u00f3n se utiliza para dar al usuario los privilegios necesarios. Un ejemplo de consulta ser\u00eda algo as\u00ed<\/p>\n<pre><code class=\"language-bash\">CREATE USER 'rep_username' REPLICATION LOGIN ENCRYPTED PASSWORD 'rep_password';<\/code><\/pre>\n<h5>Paso 2: Configurar las Propiedades de Streaming<\/h5>\n<p>A continuaci\u00f3n, puedes configurar las propiedades de streaming con el archivo de configuraci\u00f3n de PostgreSQL <strong>(postgresql.conf<\/strong>) que se puede modificar como sigue:<\/p>\n<pre><code class=\"bash\">wal_level = logical\nwal_log_hints = on\nmax_wal_senders = 8\nmax_wal_size = 1GB\nhot_standby = on<\/code><\/pre>\n<p>Aqu\u00ed tienes un poco de informaci\u00f3n sobre los par\u00e1metros utilizados en el fragmento anterior:<\/p>\n<ul>\n<li><strong><code>wal_log_hints<\/code><\/strong>: Este par\u00e1metro es necesario para la funci\u00f3n <code>pg_rewind<\/code>, que resulta muy \u00fatil cuando el servidor secundario est\u00e1 desincronizado con el primario.<\/li>\n<li><strong><code>wal_level<\/code><\/strong>: Puedes utilizar este par\u00e1metro para habilitar la replicaci\u00f3n en flujo de PostgreSQL, con valores posibles como <code>minimal<\/code>, <code>replica<\/code>, o <code>logical<\/code>.<\/li>\n<li><strong><code>max_wal_size<\/code><\/strong>: Se puede utilizar para especificar el tama\u00f1o de los archivos WAL que se pueden conservar en los archivos de registro.<\/li>\n<li><strong><code>hot_standby<\/code><\/strong>: Puedes aprovechar este par\u00e1metro para establecer una conexi\u00f3n de lectura con el secundario cuando est\u00e1 configurado como ON.<\/li>\n<li><strong><code>max_wal_senders<\/code><\/strong>: Puedes utilizar <code>max_wal_senders<\/code> para especificar el n\u00famero m\u00e1ximo de conexiones concurrentes que pueden establecerse con los servidores en espera.<\/li>\n<\/ul>\n<h5>Paso 3: Crear una Nueva Entrada<\/h5>\n<p>Despu\u00e9s de haber modificado los par\u00e1metros en el archivo <strong>postgresql.conf<\/strong>, una nueva entrada de replicaci\u00f3n en el archivo <strong>pg_hba.conf<\/strong> puede permitir que los servidores establezcan una conexi\u00f3n entre s\u00ed para la replicaci\u00f3n.<\/p>\n<p>Normalmente puedes encontrar este archivo en el directorio de datos de PostgreSQL. Puedes utilizar el siguiente fragmento de c\u00f3digo para ello:<\/p>\n<pre><code class=\"language-bash\"> host replication rep_user IPaddress md5<\/code><\/pre>\n<p>Una vez ejecutado el fragmento de c\u00f3digo, el servidor primario permite que un usuario llamado <code>rep_user<\/code> se conecte y act\u00fae como servidor en espera utilizando la IP especificada para la replicaci\u00f3n. Por ejemplo:<\/p>\n<pre><code class=\"language-bash\"> host replication rep_user 192.168.0.22\/32 md5<\/code><\/pre>\n<h4>Configurar el Nodo En Espera<\/h4>\n<p>Para configurar el nodo en espera para la replicaci\u00f3n en streaming, sigue estos pasos:<\/p>\n<h5>Paso 1: Copia de Seguridad del Nodo Primario<\/h5>\n<p>Para configurar el nodo en espera, aprovecha la utilidad <code>pg_basebackup<\/code> para generar una copia de seguridad del nodo primario. Esto servir\u00e1 como punto de partida para el nodo en espera. Puedes utilizar esta utilidad con la siguiente sintaxis:<\/p>\n<pre><code class=\"language-bash\"> pg_basebackp -D  -h  -X stream -c fast -U rep_user -W<\/code><\/pre>\n<p>Los par\u00e1metros utilizados en la sintaxis mencionada son los siguientes:<\/p>\n<ul>\n<li><strong><code>-h<\/code><\/strong>: Puedes utilizarlo para mencionar el host primario.<\/li>\n<li><strong><code>-D<\/code><\/strong>: Este par\u00e1metro indica el directorio en el que est\u00e1s trabajando actualmente.<\/li>\n<li><strong><code>-C<\/code><\/strong>: Puedes utilizarlo para establecer los puntos de control.<\/li>\n<li><strong><code>-X<\/code><\/strong>: Este par\u00e1metro puede utilizarse para incluir los archivos de registro transaccional necesarios.<\/li>\n<li><strong><code>-W<\/code><\/strong>: Puedes utilizar este par\u00e1metro para solicitar al usuario una contrase\u00f1a antes de enlazar con la base de datos.<\/li>\n<\/ul>\n<h5>Paso 2: Configurar el Archivo de Configuraci\u00f3n de la Replicaci\u00f3n<\/h5>\n<p>A continuaci\u00f3n, tienes que comprobar si existe el archivo de configuraci\u00f3n de la replicaci\u00f3n. Si no existe, puedes generar el archivo de configuraci\u00f3n de la replicaci\u00f3n como <strong>recovery.conf<\/strong>.<\/p>\n<p>Debes crear este archivo en el directorio de datos de la instalaci\u00f3n de PostgreSQL. Puedes generarlo autom\u00e1ticamente utilizando la opci\u00f3n <code>-R<\/code> dentro de la utilidad <code>pg_basebackup<\/code>.<\/p>\n<p>El archivo <strong>recovery. conf<\/strong> debe contener los siguientes comandos:<\/p>\n<pre><code class=\"bash\">standby_mode = 'on'\n\nprimary_conninfo = 'host=&lt;master_host&gt; port=&lt;postgres_port&gt; user=&lt;replication_user&gt; password=&lt;password&gt; application_name=\"host_name\"'\n\nrecovery_target_timeline = 'latest'<\/code><\/pre>\n<p>Los par\u00e1metros utilizados en los comandos mencionados son los siguientes<\/p>\n<ul>\n<li><strong><code>primary_conninfo<\/code><\/strong>: Puedes utilizarlo para establecer una conexi\u00f3n entre los servidores primario y secundario aprovechando una cadena de conexi\u00f3n.<\/li>\n<li><strong><code>standby_mode<\/code><\/strong>: Este par\u00e1metro puede hacer que el servidor primario se inicie como el secundario cuando se ponga en marcha.<\/li>\n<li><strong><code>recovery_target_timeline<\/code><\/strong>: Puedes utilizarlo para establecer el tiempo de recuperaci\u00f3n.<\/li>\n<\/ul>\n<p>Para establecer una conexi\u00f3n, debes proporcionar el nombre de usuario, la direcci\u00f3n IP y la contrase\u00f1a como valores del par\u00e1metro primary_conninfo. Por ejemplo:<\/p>\n<pre><code class=\"language-bash\"> primary_conninfo = 'host=192.168.0.26 port=5432 user=rep_user password=rep_pass'<\/code><\/pre>\n<h5>Paso 3: Reiniciar el Servidor Secundario<\/h5>\n<p>Por \u00faltimo, puedes reiniciar el servidor secundario para completar el proceso de configuraci\u00f3n.<\/p>\n<p>Sin embargo, la replicaci\u00f3n en streaming conlleva varios retos, como por ejemplo:<\/p>\n<ul>\n<li>Varios clientes PostgreSQL (escritos en diferentes lenguajes de programaci\u00f3n) conversan con un \u00fanico punto final. Cuando el nodo primario falle, estos clientes seguir\u00e1n reintentando el mismo nombre DNS o IP. Esto hace que la conmutaci\u00f3n por error sea visible para la aplicaci\u00f3n.<\/li>\n<li>La replicaci\u00f3n de PostgreSQL no lleva incorporada la conmutaci\u00f3n por error ni la supervisi\u00f3n. Cuando el nodo primario falla, tienes que promover un secundario para que sea el nuevo primario. Esta promoci\u00f3n debe ejecutarse de forma que los clientes escriban s\u00f3lo en un nodo primario, y no observen inconsistencias en los datos.<\/li>\n<li>PostgreSQL replica todo su estado. Cuando necesitas desarrollar un nuevo nodo secundario, el secundario necesita recapitular todo el historial de cambios de estado del nodo primario, lo que consume muchos recursos y hace que sea costoso eliminar nodos en el head y crear otros nuevos.<\/li>\n<\/ul>\n<h3>M\u00e9todo 2: Dispositivo de Bloque Replicado<\/h3>\n<p>El enfoque del dispositivo de bloque replicado depende de la duplicaci\u00f3n de discos (tambi\u00e9n conocida como replicaci\u00f3n de vol\u00famenes). En este enfoque, los cambios se escriben en un volumen persistente que se replica sincr\u00f3nicamente en otro volumen.<\/p>\n<p>La ventaja a\u00f1adida de este enfoque es su compatibilidad y la durabilidad de los datos en entornos de nube con todas las bases de datos relacionales, como PostgreSQL, MySQL y <a href=\"https:\/\/kinsta.com\/es\/blog\/postgresql-vs-sql-server\/\">SQL Server<\/a>, por nombrar algunas.<\/p>\n<p>Sin embargo, el m\u00e9todo de r\u00e9plica en disco de PostgreSQL necesita que se repliquen tanto los datos del registro WAL como los de la tabla. Dado que cada escritura en la base de datos tiene que pasar por la red de forma sincr\u00f3nica, no puedes permitirte perder un solo byte, ya que eso podr\u00eda dejar tu base de datos en un estado corrupto.<\/p>\n<p>Este m\u00e9todo se aprovecha normalmente con Azure PostgreSQL y Amazon RDS.<\/p>\n<h3>M\u00e9todo 3: WAL<\/h3>\n<p>La WAL se compone de archivos de segmentos (16 MB por defecto). Cada segmento tiene uno o m\u00e1s registros. Un registro de secuencia de registro (LSN) es un indicador de un registro en la WAL, que permite conocer la posici\u00f3n\/ubicaci\u00f3n en la que se ha guardado el registro en el archivo de registro.<\/p>\n<p>Un servidor en espera aprovecha los segmentos de WAL \u2013 tambi\u00e9n conocidos como XLOGS en la terminolog\u00eda de PostgreSQL\u2013 para replicar continuamente los cambios de su servidor primario. Puedes utilizar el registro de escritura anticipada para garantizar la durabilidad y la atomicidad en un SGBD, serializando trozos de datos byte-array (cada uno con un LSN \u00fanico) en un almacenamiento estable antes de que se apliquen a una base de datos.<\/p>\n<p>La aplicaci\u00f3n de una mutaci\u00f3n a una base de datos puede llevar a varias operaciones del sistema de archivos. Una cuesti\u00f3n pertinente que se plantea es c\u00f3mo puede una base de datos asegurar la atomicidad en caso de fallo del servidor debido a un corte de energ\u00eda mientras estaba en medio de una actualizaci\u00f3n del sistema de archivos. Cuando una base de datos arranca, inicia un proceso de arranque o r\u00e9plica que puede leer los segmentos de WAL disponibles y los compara con el LSN almacenado en cada p\u00e1gina de datos (cada p\u00e1gina de datos est\u00e1 marcada con el LSN del \u00faltimo registro de WAL que afecta a la p\u00e1gina).<\/p>\n<h4>Replicaci\u00f3n Basada en el Env\u00edo de Registros (Nivel de Bloque)<\/h4>\n<p>La replicaci\u00f3n en flujo perfecciona el proceso de env\u00edo de registros. En lugar de esperar al cambio de WAL, los registros se env\u00edan a medida que se crean, lo que disminuye el retraso de la replicaci\u00f3n.<\/p>\n<p>La replicaci\u00f3n en flujo tambi\u00e9n supera el env\u00edo de registros porque el servidor en espera se enlaza con el servidor primario a trav\u00e9s de la red aprovechando un protocolo de replicaci\u00f3n. El servidor primario puede entonces enviar los registros WAL directamente a trav\u00e9s de esta conexi\u00f3n sin tener que depender de los scripts proporcionados por el usuario final.<\/p>\n<h4>Replicaci\u00f3n Basada en el Env\u00edo de Registros (Nivel de Archivo)<\/h4>\n<p>El env\u00edo de registros se define como la copia de los archivos de registro a otro servidor PostgreSQL para generar otro servidor en espera mediante la replicaci\u00f3n de los archivos WAL. Este servidor est\u00e1 configurado para trabajar en modo de recuperaci\u00f3n, y su \u00fanico prop\u00f3sito es aplicar los nuevos archivos WAL a medida que aparecen.<\/p>\n<p>Este servidor secundario se convierte entonces en una copia de seguridad caliente del servidor PostgreSQL primario. Tambi\u00e9n puede configurarse para ser una r\u00e9plica de lectura, en la que puede ofrecer consultas de s\u00f3lo lectura, lo que tambi\u00e9n se denomina hot standby.<\/p>\n<h4>Archivo WAL Continuo<\/h4>\n<p>Duplicar los archivos WAL a medida que se crean en cualquier ubicaci\u00f3n distinta del subdirectorio <code>pg_wal<\/code> para archivarlos se conoce como archivo WAL. PostgreSQL llamar\u00e1 a un script dado por el usuario para archivar, cada vez que se cree un archivo WAL.<\/p>\n<p>El script puede aprovechar el comando <code>scp<\/code> para duplicar el archivo en una o varias ubicaciones, como un soporte NFS. Una vez archivados, los archivos de segmento WAL pueden aprovecharse para recuperar la base de datos en cualquier momento.<\/p>\n<p>Otras configuraciones basadas en el registro son:<\/p>\n<ul>\n<li><strong>Replicaci\u00f3n sincr\u00f3nica:<\/strong> Antes de que se consigne cada transacci\u00f3n de replicaci\u00f3n sincr\u00f3nica, el servidor primario espera hasta que los nodos secundarios confirmen que han recibido los datos. La ventaja de esta configuraci\u00f3n es que no habr\u00e1 conflictos causados por procesos de escritura paralelos.<\/li>\n<li><strong>Replicaci\u00f3n s\u00edncrona multimaster<\/strong>: Aqu\u00ed, todos los servidores pueden aceptar solicitudes de escritura, y los datos modificados se transmiten desde el servidor original a todos los dem\u00e1s servidores antes de que se confirme cada transacci\u00f3n. Aprovecha el protocolo 2PC y se adhiere a la regla de todo o nada.<\/li>\n<\/ul>\n<h4>Detalles del Protocolo de Streaming WAL<\/h4>\n<p>Un proceso conocido como receptor de WAL, que se ejecuta en el servidor en espera, aprovecha los detalles de conexi\u00f3n proporcionados en el par\u00e1metro <code>primary_conninfo<\/code> de <strong>recovery.conf<\/strong> y se conecta al servidor primario aprovechando una conexi\u00f3n TCP\/IP.<\/p>\n<p>Para iniciar la replicaci\u00f3n en streaming, el frontend puede enviar el par\u00e1metro de replicaci\u00f3n dentro del mensaje de inicio. Un valor booleano de verdadero, s\u00ed, 1 u ON permite al <a href=\"https:\/\/kinsta.com\/es\/blog\/salario-de-desarrollador-de-backend\/\">backend<\/a> saber que debe entrar en modo de replicaci\u00f3n f\u00edsica walsender.<\/p>\n<p>El emisor de la WAL es otro proceso que se ejecuta en el servidor primario y se encarga de enviar los registros de la WAL al servidor en espera a medida que se generan. El receptor de la WAL guarda los registros de la WAL en la WAL como si fueran creados por la actividad de los clientes conectados localmente.<\/p>\n<p>Una vez que los registros de la WAL llegan a los archivos de segmentos de la WAL, el servidor en espera sigue reproduciendo constantemente la WAL para que el primario y el en espera est\u00e9n actualizados.<\/p>\n<figure id=\"attachment_128035\" aria-describedby=\"caption-attachment-128035\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-128035 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/07\/WAL-Streaming-Protocol-Details.png\" alt=\"Un diagrama de flujo que muestra los pasos del proceso del protocolo de flujo WAL entre los servidores primario y en espera.\" width=\"1024\" height=\"1020\"><figcaption id=\"caption-attachment-128035\" class=\"wp-caption-text\">Diagrama de flujo del protocolo de streaming de WAL (Fuente: <a href=\"https:\/\/www.enterprisedb.com\/postgres-tutorials\/postgresql-replication-and-automatic-failover-tutorial#continuous-wal\">EnterpriseDB<\/a>)<\/figcaption><\/figure>\n<h2>Elementos de la Replicaci\u00f3n PostgreSQL<\/h2>\n<p>En esta secci\u00f3n, conocer\u00e1s mejor los modelos m\u00e1s utilizados (replicaci\u00f3n monom\u00e1ster y multim\u00e1ster), los tipos (replicaci\u00f3n f\u00edsica y l\u00f3gica) y los modos (s\u00edncrono y as\u00edncrono) de la replicaci\u00f3n PostgreSQL.<\/p>\n<h3>Modelos de Replicaci\u00f3n de Bases de Datos PostgreSQL<\/h3>\n<p>La escalabilidad significa a\u00f1adir m\u00e1s recursos\/hardware a los nodos existentes para mejorar la capacidad de la base de datos de almacenar y procesar m\u00e1s datos, lo que puede conseguirse de forma horizontal y vertical. La replicaci\u00f3n de PostgreSQL es un ejemplo de escalabilidad horizontal que es mucho m\u00e1s dif\u00edcil de implementar que la escalabilidad vertical. Podemos conseguir la escalabilidad horizontal principalmente mediante la replicaci\u00f3n monom\u00e1ster (SMR) y la replicaci\u00f3n multim\u00e1ster (MMR).<\/p>\n<p>La replicaci\u00f3n monom\u00e1ster permite que los datos se modifiquen s\u00f3lo en un nodo, y estas modificaciones se replican en uno o m\u00e1s nodos. Las tablas replicadas en la base de datos de r\u00e9plica no pueden aceptar ning\u00fan cambio, excepto los del servidor primario. Incluso si lo hacen, los cambios no se replican al servidor primario.<\/p>\n<p>La mayor\u00eda de las veces, la SMR es suficiente para la aplicaci\u00f3n porque es menos complicada de configurar y gestionar, adem\u00e1s de que no hay posibilidades de conflictos. La replicaci\u00f3n monom\u00e1ster tambi\u00e9n es unidireccional, ya que los datos de replicaci\u00f3n fluyen en una direcci\u00f3n principalmente, desde la base de datos primaria a la r\u00e9plica.<\/p>\n<p>En algunos casos, la SMR por s\u00ed sola puede no ser suficiente, y puedes necesitar implementar la MMR. La MMR permite que m\u00e1s de un nodo act\u00fae como nodo primario. Los cambios en las filas de las tablas en m\u00e1s de una base de datos primaria designada se replican en sus tablas hom\u00f3logas en todas las dem\u00e1s bases de datos primarias. En este modelo, se suelen emplear esquemas de resoluci\u00f3n de conflictos para evitar problemas como las claves primarias duplicadas.<\/p>\n<p>El uso de MMR tiene algunas ventajas, por ejemplo:<\/p>\n<ul>\n<li>En caso de fallo del servidor, otros servidores pueden seguir prestando servicios de actualizaci\u00f3n e inserci\u00f3n.<\/li>\n<li>Los nodos primarios est\u00e1n repartidos en varios lugares diferentes, por lo que la posibilidad de que fallen todos los nodos primarios es muy peque\u00f1a.<\/li>\n<li>Posibilidad de emplear una red de \u00e1rea amplia (WAN) de bases de datos primarias que pueden estar geogr\u00e1ficamente cerca de grupos de clientes, pero manteniendo la consistencia de los datos en toda la red.<\/li>\n<\/ul>\n<p>Sin embargo, el inconveniente de aplicar el MMR es la complejidad y su dificultad para resolver los conflictos.<\/p>\n<p>Varias ramas y aplicaciones ofrecen soluciones de MMR, ya que PostgreSQL no lo soporta de forma nativa. Estas soluciones pueden ser de <a href=\"https:\/\/kinsta.com\/es\/blog\/bases-de-datos-de-codigo-abierto\/\">c\u00f3digo abierto<\/a>, gratuitas o de pago. Una de estas <a href=\"https:\/\/kinsta.com\/es\/blog\/plugin-base-de-datos-wordpress\/\">extensiones<\/a> es la replicaci\u00f3n bidireccional (BDR), que es as\u00edncrona y se basa en la funci\u00f3n de decodificaci\u00f3n l\u00f3gica de PostgreSQL.<\/p>\n<p>Como la aplicaci\u00f3n BDR replica las transacciones en otros nodos, la operaci\u00f3n de r\u00e9plica puede fallar si hay un conflicto entre la transacci\u00f3n que se aplica y la transacci\u00f3n consignada en el nodo receptor.<\/p>\n<h3>Tipos de Replicaci\u00f3n PostgreSQL<\/h3>\n<p>Hay dos tipos de replicaci\u00f3n PostgreSQL: la l\u00f3gica y la f\u00edsica.<\/p>\n<p>Una simple operaci\u00f3n <em>l\u00f3gica<\/em> <code>initdb<\/code>\u00a0realizar\u00eda la operaci\u00f3n f\u00edsica de crear un directorio base para un cl\u00faster. Asimismo, una simple operaci\u00f3n <em>l\u00f3gica<\/em> \u00ab<code>CREATE DATABASE<\/code>\u00bb realizar\u00eda la operaci\u00f3n <em>f\u00edsica<\/em> de crear un subdirectorio en el directorio base.<\/p>\n<p>La replicaci\u00f3n f\u00edsica suele tratar con archivos y directorios. No sabe qu\u00e9 representan estos archivos y directorios. Estos m\u00e9todos se utilizan para mantener una copia completa de todos los datos de un \u00fanico cl\u00faster, normalmente en otra m\u00e1quina, y se realizan a nivel de sistema de archivos o de disco y utilizan direcciones de bloque exactas.<\/p>\n<p>La replicaci\u00f3n l\u00f3gica es una forma de reproducir las entidades de datos y sus modificaciones, bas\u00e1ndose en su identidad de replicaci\u00f3n (normalmente una clave primaria). A diferencia de la replicaci\u00f3n f\u00edsica, se ocupa de las bases de datos, las tablas y las operaciones DML y se realiza a nivel de cl\u00faster de base de datos. Utiliza un modelo de <em>publicaci\u00f3n<\/em> y <em>suscripci\u00f3n<\/em> en el que uno o varios <em>suscriptores<\/em> est\u00e1n suscritos a una o varias <em>publicaciones<\/em> en un nodo <em>editor<\/em>.<\/p>\n<p>El proceso de replicaci\u00f3n comienza tomando una instant\u00e1nea de los datos en la base de datos del editor y luego la copia al suscriptor. Los suscriptores extraen los datos de las publicaciones a las que se suscriben y pueden volver a publicar los datos m\u00e1s tarde para permitir la replicaci\u00f3n en cascada o configuraciones m\u00e1s complejas. El suscriptor aplica los datos en el mismo orden que el editor, de modo que se garantiza la coherencia transaccional de las publicaciones dentro de una misma suscripci\u00f3n, tambi\u00e9n conocida como replicaci\u00f3n transaccional.<\/p>\n<p>Los casos de uso t\u00edpicos de la replicaci\u00f3n l\u00f3gica son:<\/p>\n<ul>\n<li>Env\u00edo de cambios incrementales en una \u00fanica base de datos (o en un subconjunto de la misma) a los suscriptores a medida que se producen.<\/li>\n<li>Compartir un subconjunto de la base de datos entre varias bases de datos.<\/li>\n<li>Desencadenar el env\u00edo de los cambios individuales a medida que llegan al suscriptor.<\/li>\n<li>Consolidar varias bases de datos en una sola.<\/li>\n<li>Proporcionar acceso a los datos replicados a diferentes grupos de usuarios.<\/li>\n<\/ul>\n<p>La base de datos del suscriptor se comporta de la misma manera que cualquier otra instancia de PostgreSQL y puede utilizarse como editor para otras bases de datos definiendo sus publicaciones.<\/p>\n<p>Si el suscriptor es tratado como de s\u00f3lo lectura por la aplicaci\u00f3n, no habr\u00e1 conflictos desde una \u00fanica suscripci\u00f3n. En cambio, si hay otras escrituras realizadas por una aplicaci\u00f3n o por otros suscriptores en el mismo conjunto de tablas, pueden surgir conflictos.<\/p>\n<p>PostgreSQL admite ambos mecanismos de forma concurrente. La replicaci\u00f3n l\u00f3gica permite un control detallado tanto de la replicaci\u00f3n de datos como de la seguridad.<\/p>\n<h3>Modos de Replicaci\u00f3n<\/h3>\n<p>Existen principalmente dos modos de replicaci\u00f3n en PostgreSQL: sincr\u00f3nica y asincr\u00f3nica. La replicaci\u00f3n sincr\u00f3nica permite que los datos se escriban en el servidor primario y en el secundario al mismo tiempo, mientras que la replicaci\u00f3n asincr\u00f3nica garantiza que los datos se escriban primero en el host y luego se copien en el servidor secundario.<\/p>\n<p>En la replicaci\u00f3n en modo s\u00edncrono, las transacciones en la base de datos primaria se consideran completas s\u00f3lo cuando esos cambios se han replicado a todas las r\u00e9plicas. Los servidores de r\u00e9plica deben estar disponibles todo el tiempo para que las transacciones se completen en el primario. El modo s\u00edncrono de replicaci\u00f3n se utiliza en entornos transaccionales de alto nivel con requisitos de conmutaci\u00f3n por error inmediatos.<\/p>\n<p>En el modo as\u00edncrono, las transacciones en el servidor primario pueden declararse completas cuando los cambios se han realizado s\u00f3lo en el servidor primario. Estos cambios se replican posteriormente en las r\u00e9plicas. Los servidores de r\u00e9plica pueden permanecer desincronizados durante un tiempo determinado, llamado retraso de replicaci\u00f3n. En caso de ca\u00edda, puede producirse una p\u00e9rdida de datos, pero la sobrecarga que proporciona la replicaci\u00f3n as\u00edncrona es peque\u00f1a, por lo que es aceptable en la mayor\u00eda de los casos (no sobrecarga al servidor). La conmutaci\u00f3n por error de la base de datos primaria a la secundaria tarda m\u00e1s que la replicaci\u00f3n sincr\u00f3nica.<\/p>\n<h2>C\u00f3mo Configurar la Replicaci\u00f3n PostgreSQL<\/h2>\n<p>En esta secci\u00f3n mostraremos c\u00f3mo configurar el proceso de replicaci\u00f3n de PostgreSQL en un sistema operativo Linux. En este caso, utilizaremos Ubuntu 18.04 LTS y PostgreSQL 10.<\/p>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-important\">\n            <h3>Important<\/h3>\n        <p>Aseg\u00farate de que has instalado el servidor Linux Ubuntu. Los pasos para instalar PostgreSQL en un servidor Linux se mencionan a continuaci\u00f3n, seguidos de la configuraci\u00f3n de la replicaci\u00f3n en el servidor primario y en el secundario<\/p>\n<\/aside>\n\n<p>\u00a1Vamos a profundizar!<\/p>\n<h3>Instalaci\u00f3n<\/h3>\n<p>Comenzar\u00e1s instalando PostgreSQL en Linux con estos pasos:<\/p>\n<ol>\n<li>En primer lugar, tendr\u00e1s que importar la clave de firma de PostgreSQL escribiendo el siguiente comando en el terminal:\n<pre><code class=\"language-bash\">wget -q https:\/\/www.postgresql.org\/media\/keys\/ACCC4CF8.asc -O- | sudo apt-key add -<\/code><\/pre>\n<\/li>\n<li>A continuaci\u00f3n, a\u00f1ade el repositorio PostgreSQL escribiendo el siguiente comando en el terminal:\n<pre><code class=\"language-bash\">echo \"deb http:\/\/apt.postgresql.org\/pub\/repos\/apt\/ bionic-pgdg main\" | sudo tee \/etc\/apt\/sources.list.d\/postgresql.list <\/code><\/pre>\n<\/li>\n<li>Actualiza el \u00edndice del repositorio escribiendo el siguiente comando en el terminal:\n<pre><code class=\"language-bash\">sudo apt-get update <\/code><\/pre>\n<\/li>\n<li>Instala el paquete PostgreSQL con el comando apt:\n<pre><code class=\"language-bash\">sudo apt-get install -y postgresql-10<\/code><\/pre>\n<\/li>\n<li>Por \u00faltimo, establece la contrase\u00f1a del usuario de PostgreSQL con el siguiente comando:\n<pre><code class=\"language-bash\">sudo passwd postgres<\/code><\/pre>\n<\/li>\n<\/ol>\n<p>La instalaci\u00f3n de PostgreSQL es obligatoria tanto para el servidor primario como para el secundario antes de iniciar el proceso de replicaci\u00f3n de PostgreSQL.<\/p>\n<p>Una vez que hayas configurado PostgreSQL en ambos servidores, puedes pasar a la configuraci\u00f3n de la replicaci\u00f3n del servidor primario y del secundario.<\/p>\n<h3>Configuraci\u00f3n de la Replicaci\u00f3n en el Servidor Primario<\/h3>\n<p>Realiza estos pasos una vez que hayas instalado PostgreSQL en los dos servidores primario y secundario.<\/p>\n<ol>\n<li>En primer lugar, accede a la base de datos PostgreSQL con el siguiente comando:\n<pre><code class=\"language-bash\">su - postgres<\/code><\/pre>\n<\/li>\n<li>Crea un usuario de replicaci\u00f3n con el siguiente comando:\n<pre><code class=\"language-bash\">psql -c \"CREATEUSER replication REPLICATION LOGIN CONNECTION LIMIT 1 ENCRYPTED PASSWORD'YOUR_PASSWORD';\"<\/code><\/pre>\n<\/li>\n<li>Edita <strong>pg_hba.cnf<\/strong> con cualquier aplicaci\u00f3n nano en Ubuntu y a\u00f1ade la siguiente configuraci\u00f3n: archivo editar comando\n<pre><code class=\"language-bash\">nano \/etc\/postgresql\/10\/main\/pg_hba.conf<\/code><\/pre>\n<p>Para configurar el archivo, utiliza el siguiente comando:<\/p>\n<pre><code class=\"language-bash\">host replication  replication  MasterIP\/24  md5<\/code><\/pre>\n<\/li>\n<li>Abre y edita <strong>postgresql.conf<\/strong> y pon la siguiente configuraci\u00f3n en el servidor primario:\n<pre><code class=\"language-bash\">nano \/etc\/postgresql\/10\/main\/postgresql.conf<\/code><\/pre>\n<p>Utiliza los siguientes ajustes de configuraci\u00f3n:<strong><br \/>\n<\/strong><\/p>\n<pre><code class=\"language-bash\">listen_addresses = 'localhost,MasterIP'\n<\/code><code class=\"language-bash\">wal_level = replica\n<\/code><code class=\"language-bash\">wal_keep_segments = 64\n<\/code><code class=\"language-bash\">max_wal_senders = 10<\/code><\/pre>\n<\/li>\n<li>Por \u00faltimo, reinicia PostgreSQL en el servidor principal:<\/li>\n<\/ol>\n<pre><code class=\"language-bash\">systemctl restart postgresql<\/code><\/pre>\n<p>Ahora has completado la configuraci\u00f3n en el servidor primario.<\/p>\n<h3>Configurar la Replicaci\u00f3n en el Servidor Secundario<\/h3>\n<p>Sigue estos pasos para configurar la replicaci\u00f3n en el servidor secundario:<\/p>\n<ol>\n<li>Inicia sesi\u00f3n en PostgreSQL RDMS con el siguiente comando:\n<pre><code class=\"language-bash\">su - postgres<\/code><\/pre>\n<\/li>\n<li>Detenemos el servicio PostgreSQL para poder trabajar en \u00e9l con el siguiente comando\n<pre><code class=\"language-bash\">systemctl stop postgresql<\/code><\/pre>\n<\/li>\n<li>Editar el archivo <strong>pg_hba.conf<\/strong> con este comando y a\u00f1adir la siguiente configuraci\u00f3n:\n<pre><code class=\"language-bash\">\/\/ \"Edit\" command\nnano \/etc\/postgresql\/10\/main\/pg_hba.conf\n\/\/ \"Configuration\" command\nhost replication  replication  MasterIP\/24  md5<\/code><\/pre>\n<\/li>\n<li>Abrir y editar <strong>postgresql.conf<\/strong> en el servidor secundario y poner la siguiente configuraci\u00f3n o descomentarla si est\u00e1 comentada:\n<pre><code class=\"language-bash\">nano \/etc\/postgresql\/10\/main\/postgresql.conf\nlisten_addresses = 'localhost,SecondaryIP'\nwal_keep_segments = 64\nwal_level = replica\nhot_standby = on\nmax_wal_senders = 10<\/code><\/pre>\n<p><code>SecondaryIP<\/code> es la direcci\u00f3n del servidor secundario<\/li>\n<li>Accede al directorio de datos de PostgreSQL en el servidor secundario y elimina todo:\n<pre><code class=\"language-bash\">cd \/var\/lib\/postgresql\/10\/main\nrm -rfv *<\/code><\/pre>\n<\/li>\n<li>Copia los archivos del directorio de datos del servidor primario de PostgreSQL al directorio de datos del servidor secundario de PostgreSQL y escribe este comando en el servidor secundario:\n<pre><code class=\"language-bash\">pg_basebackup -h MasterIP -D \/var\/lib\/postgresql\/11\/main\/ -P -U\nreplication --wal-method=fetch<\/code><\/pre>\n<\/li>\n<li>Introduce la contrase\u00f1a del servidor primario PostgreSQL y pulsa enter. A continuaci\u00f3n, a\u00f1ade el siguiente comando para la configuraci\u00f3n de recuperaci\u00f3n:\n<pre><code class=\"language-bash\">\/\/ \"Edit\" Command\nnano \/var\/lib\/postgresql\/10\/main\/recovery.conf\n\/\/ Configuration\nstandby_mode   = 'on'\nprimary_conninfo = 'host=MasterIP port=5432 user=replication password=YOUR_PASSWORD'\ntrigger_file = '\/tmp\/MasterNow'<\/code><\/pre>\n<p>Aqu\u00ed, <code>YOUR_PASSWORD<\/code> es la contrase\u00f1a del usuario de replicaci\u00f3n en el servidor primario PostgreSQL creado<\/li>\n<li>Una vez que la contrase\u00f1a se ha establecido, tendr\u00edas que reiniciar la base de datos PostgreSQL secundaria como se detuvo:<\/li>\n<\/ol>\n<pre><code class=\"language-bash\">systemctl start postgresql<\/code><\/pre>\n<h3>Testing Your Setup<\/h3>\n<p>\u00a0<\/p>\n<h3>Prueba de la Configuraci\u00f3n<\/h3>\n<p>Ahora que hemos realizado los pasos, vamos a probar el proceso de replicaci\u00f3n y a observar la base de datos del servidor secundario. Para ello, creamos una tabla en el servidor primario y observamos si la misma se refleja en el servidor secundario.<\/p>\n<p>Vamos a ello.<\/p>\n<ol>\n<li>Como vamos a crear la tabla en el servidor primario, tendr\u00e1s que iniciar sesi\u00f3n en el servidor primario:\n<pre><code class=\"language-bash\"> su - postgres\npsql<\/code><\/pre>\n<\/li>\n<li>Ahora creamos una tabla simple llamada &#8216;testtable&#8217; e insertamos datos en la tabla ejecutando las siguientes consultas PostgreSQL en el terminal:\n<pre><code class=\"language-bash\"> CREATE TABLE testtable (websites varchar(100));\nINSERT INTO testtable VALUES ('section.com');\nINSERT INTO testtable VALUES ('google.com');\nINSERT INTO testtable VALUES ('github.com');<\/code><\/pre>\n<\/li>\n<li>Observa la base de datos PostgreSQL del servidor secundario iniciando sesi\u00f3n en \u00e9l:\n<pre><code class=\"language-bash\"> su - postgres psql<\/code><\/pre>\n<\/li>\n<li>Ahora, comprobamos si la tabla &#8216;testtable&#8217; existe, y podemos devolver los datos ejecutando las siguientes consultas PostgreSQL en el terminal. Este comando muestra esencialmente toda la tabla.\n<pre><code class=\"language-bash\"> select * from testtable;<\/code><\/pre>\n<\/li>\n<\/ol>\n<p>Este es el resultado de la tabla de prueba:<\/p>\n<pre><code class=\"language-bash\">|  websites  |\n\n-------------------\n\n| section.com |\n\n| google.com |\n\n| github.com  |\n\n--------------------<\/code><\/pre>\n<p>Deber\u00edas poder observar los mismos datos que en el servidor primario.<\/p>\n<p>Si ves lo anterior, \u00a1has realizado con \u00e9xito el proceso de replicaci\u00f3n!<\/p>\n<h2>\u00bfCu\u00e1les Son los Pasos de la Conmutaci\u00f3n por Error Manual de PostgreSQL?<\/h2>\n<p>Vamos a repasar los pasos para una conmutaci\u00f3n por error manual de PostgreSQL:<\/p>\n<ol>\n<li>Para el servidor primario.<\/li>\n<li>Promueve\u00a0el servidor en espera ejecutando el siguiente comando en el servidor en espera:\n<pre><code class=\"language-bash\">.\/pg_ctl promote -D ..\/sb_data\/\nserver promoting<\/code><\/pre>\n<\/li>\n<li>Con\u00e9ctate al servidor en espera promocionado e inserta una fila:\n<pre><code class=\"language-bash\">-bash-4.2$ .\/edb-psql -p 5432 edb\n\nPassword:\n\npsql.bin (10.7)\n\nType \"help\" <strong>for<\/strong> help.\n\nedb=# <strong>insert<\/strong> <strong>into<\/strong> abc <strong>values<\/strong>(4,'Four');\n<\/code><\/pre>\n<\/li>\n<\/ol>\n<p>Si la inserci\u00f3n funciona bien, entonces el servidor en espera, que antes era de s\u00f3lo lectura, ha sido promovido como nuevo servidor primario.<\/p>\n<h2>C\u00f3mo Automatizar la Conmutaci\u00f3n por Error en PostgreSQL<\/h2>\n<p>Configurar la conmutaci\u00f3n por error autom\u00e1tica es f\u00e1cil.<\/p>\n<p>Necesitar\u00e1s el gestor de conmutaci\u00f3n por error EDB PostgreSQL (EFM). Despu\u00e9s de descargar e instalar EFM en cada nodo primario y en el nodo en espera, puedes crear un Cluster EFM, que consta de un nodo primario, uno o m\u00e1s nodos en espera y un nodo Testigo opcional que confirma las afirmaciones en caso de fallo.<\/p>\n<p>EFM supervisa continuamente el estado del sistema y env\u00eda alertas por correo electr\u00f3nico en funci\u00f3n de los eventos del sistema. Cuando se produce un fallo, cambia autom\u00e1ticamente al nodo en espera m\u00e1s actualizado y reconfigura todos los dem\u00e1s servidores en espera para que reconozcan el nuevo nodo primario.<\/p>\n<p>Tambi\u00e9n reconfigura los equilibradores de carga (como pgPool) y evita que se produzca el \u00absplit-brain\u00bb (cuando dos nodos se creen primarios).<\/p>\n<h2>Resumen<\/h2>\n<p>Debido a la gran cantidad de datos, la escalabilidad y la seguridad se han convertido en dos de los criterios m\u00e1s importantes en la <a href=\"https:\/\/kinsta.com\/es\/wordpress-hosting\/dedicado\/\">gesti\u00f3n de bases de datos<\/a>, especialmente en un entorno transaccional. Aunque podemos mejorar la escalabilidad verticalmente a\u00f1adiendo m\u00e1s recursos\/hardware a los nodos existentes, no siempre es posible, a menudo debido al coste o las limitaciones de a\u00f1adir nuevo hardware.<\/p>\n<p>Por tanto, se requiere una escalabilidad horizontal, lo que significa a\u00f1adir m\u00e1s nodos a los nodos de red existentes, en lugar de mejorar la funcionalidad de los nodos existentes. Aqu\u00ed es donde entra en escena la replicaci\u00f3n PostgreSQL.<br \/>\n<br \/>\nEn este art\u00edculo, hemos hablado de los tipos de r\u00e9plicas PostgreSQL, las ventajas, los modos de replicaci\u00f3n, la instalaci\u00f3n y la conmutaci\u00f3n por error PostgreSQL entre SMR y MMR. Ahora vamos a escuchar tu opini\u00f3n.<\/p>\n<p>\u00bfCu\u00e1l sueles implementar? \u00bfQu\u00e9 caracter\u00edstica de la base de datos es la m\u00e1s importante para ti y por qu\u00e9? \u00a1Nos encantar\u00eda leer tus opiniones! Comp\u00e1rtelas en la secci\u00f3n de comentarios m\u00e1s abajo.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Como te dir\u00e1 cualquier propietario de un sitio web, la p\u00e9rdida de datos y el tiempo de inactividad, incluso en dosis m\u00ednimas, pueden ser catastr\u00f3ficos. Pueden &#8230;<\/p>\n","protected":false},"author":117,"featured_media":56222,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[622,1135,856,1046],"topic":[1319],"class_list":["post-56221","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-database","tag-databeses","tag-development","tag-postgresql","topic-postgresql"],"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>Replicaci\u00f3n PostgreSQL: Una Gu\u00eda Completa<\/title>\n<meta name=\"description\" content=\"Conoce los aspectos clave de la replicaci\u00f3n de PostgreSQL, incluyendo sus beneficios, elementos, tipos y estrategias para realizar copias de seguridad de datos sin problemas.\" \/>\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\/postgresql-replicacion\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Replicaci\u00f3n PostgreSQL: Una Gu\u00eda Completa\" \/>\n<meta property=\"og:description\" content=\"Conoce los aspectos clave de la replicaci\u00f3n de PostgreSQL, incluyendo sus beneficios, elementos, tipos y estrategias para realizar copias de seguridad de datos sin problemas.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/es\/blog\/postgresql-replicacion\/\" \/>\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=\"2022-08-11T12:36:53+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-25T09:22:03+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/08\/postgresql-replication-5.png\" \/>\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\/png\" \/>\n<meta name=\"author\" content=\"Salman Ravoof\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Conoce los aspectos clave de la replicaci\u00f3n de PostgreSQL, incluyendo sus beneficios, elementos, tipos y estrategias para realizar copias de seguridad de datos sin problemas.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/08\/postgresql-replication-5.png\" \/>\n<meta name=\"twitter:creator\" content=\"@salmanravoof\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_ES\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Salman Ravoof\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"24 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/postgresql-replicacion\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/postgresql-replicacion\/\"},\"author\":{\"name\":\"Salman Ravoof\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987\"},\"headline\":\"Replicaci\u00f3n PostgreSQL: Una Gu\u00eda Completa\",\"datePublished\":\"2022-08-11T12:36:53+00:00\",\"dateModified\":\"2023-08-25T09:22:03+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/postgresql-replicacion\/\"},\"wordCount\":5438,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/es\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/postgresql-replicacion\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/08\/postgresql-replication-5.png\",\"keywords\":[\"database\",\"databeses\",\"development\",\"PostgreSQL\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/es\/blog\/postgresql-replicacion\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/postgresql-replicacion\/\",\"url\":\"https:\/\/kinsta.com\/es\/blog\/postgresql-replicacion\/\",\"name\":\"Replicaci\u00f3n PostgreSQL: Una Gu\u00eda Completa\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/es\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/postgresql-replicacion\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/postgresql-replicacion\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/08\/postgresql-replication-5.png\",\"datePublished\":\"2022-08-11T12:36:53+00:00\",\"dateModified\":\"2023-08-25T09:22:03+00:00\",\"description\":\"Conoce los aspectos clave de la replicaci\u00f3n de PostgreSQL, incluyendo sus beneficios, elementos, tipos y estrategias para realizar copias de seguridad de datos sin problemas.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/postgresql-replicacion\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/es\/blog\/postgresql-replicacion\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/postgresql-replicacion\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/08\/postgresql-replication-5.png\",\"contentUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/08\/postgresql-replication-5.png\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/postgresql-replicacion\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/es\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"PostgreSQL\",\"item\":\"https:\/\/kinsta.com\/es\/secciones\/postgresql\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Replicaci\u00f3n PostgreSQL: Una Gu\u00eda Completa\"}]},{\"@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\/9cafd2eedd617e640eeea4cf3a5fd987\",\"name\":\"Salman Ravoof\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g\",\"caption\":\"Salman Ravoof\"},\"description\":\"Salman Ravoof is a self-taught web developer, writer, creator, and a huge admirer of Free and Open Source Software (FOSS). Besides tech, he's excited by science, philosophy, photography, arts, cats, and food. Learn more about him on his website, and connect with Salman on Twitter.\",\"sameAs\":[\"https:\/\/salmanravoof.com\",\"https:\/\/www.linkedin.com\/in\/salman-ravoof-5a749133\/\",\"https:\/\/x.com\/salmanravoof\"],\"url\":\"https:\/\/kinsta.com\/es\/blog\/author\/salmanravoof\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Replicaci\u00f3n PostgreSQL: Una Gu\u00eda Completa","description":"Conoce los aspectos clave de la replicaci\u00f3n de PostgreSQL, incluyendo sus beneficios, elementos, tipos y estrategias para realizar copias de seguridad de datos sin problemas.","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\/postgresql-replicacion\/","og_locale":"es_ES","og_type":"article","og_title":"Replicaci\u00f3n PostgreSQL: Una Gu\u00eda Completa","og_description":"Conoce los aspectos clave de la replicaci\u00f3n de PostgreSQL, incluyendo sus beneficios, elementos, tipos y estrategias para realizar copias de seguridad de datos sin problemas.","og_url":"https:\/\/kinsta.com\/es\/blog\/postgresql-replicacion\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinsta.es\/","article_published_time":"2022-08-11T12:36:53+00:00","article_modified_time":"2023-08-25T09:22:03+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/08\/postgresql-replication-5.png","type":"image\/png"}],"author":"Salman Ravoof","twitter_card":"summary_large_image","twitter_description":"Conoce los aspectos clave de la replicaci\u00f3n de PostgreSQL, incluyendo sus beneficios, elementos, tipos y estrategias para realizar copias de seguridad de datos sin problemas.","twitter_image":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/08\/postgresql-replication-5.png","twitter_creator":"@salmanravoof","twitter_site":"@Kinsta_ES","twitter_misc":{"Escrito por":"Salman Ravoof","Tiempo de lectura":"24 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/es\/blog\/postgresql-replicacion\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/es\/blog\/postgresql-replicacion\/"},"author":{"name":"Salman Ravoof","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/9cafd2eedd617e640eeea4cf3a5fd987"},"headline":"Replicaci\u00f3n PostgreSQL: Una Gu\u00eda Completa","datePublished":"2022-08-11T12:36:53+00:00","dateModified":"2023-08-25T09:22:03+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/es\/blog\/postgresql-replicacion\/"},"wordCount":5438,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/es\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/es\/blog\/postgresql-replicacion\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/08\/postgresql-replication-5.png","keywords":["database","databeses","development","PostgreSQL"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/es\/blog\/postgresql-replicacion\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/es\/blog\/postgresql-replicacion\/","url":"https:\/\/kinsta.com\/es\/blog\/postgresql-replicacion\/","name":"Replicaci\u00f3n PostgreSQL: Una Gu\u00eda Completa","isPartOf":{"@id":"https:\/\/kinsta.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/es\/blog\/postgresql-replicacion\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/es\/blog\/postgresql-replicacion\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/08\/postgresql-replication-5.png","datePublished":"2022-08-11T12:36:53+00:00","dateModified":"2023-08-25T09:22:03+00:00","description":"Conoce los aspectos clave de la replicaci\u00f3n de PostgreSQL, incluyendo sus beneficios, elementos, tipos y estrategias para realizar copias de seguridad de datos sin problemas.","breadcrumb":{"@id":"https:\/\/kinsta.com\/es\/blog\/postgresql-replicacion\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/es\/blog\/postgresql-replicacion\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/blog\/postgresql-replicacion\/#primaryimage","url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/08\/postgresql-replication-5.png","contentUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/08\/postgresql-replication-5.png","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/es\/blog\/postgresql-replicacion\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/es\/"},{"@type":"ListItem","position":2,"name":"PostgreSQL","item":"https:\/\/kinsta.com\/es\/secciones\/postgresql\/"},{"@type":"ListItem","position":3,"name":"Replicaci\u00f3n PostgreSQL: Una Gu\u00eda Completa"}]},{"@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\/9cafd2eedd617e640eeea4cf3a5fd987","name":"Salman Ravoof","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0c5885f75cb78473fb7408e5e49ad190?s=96&d=mm&r=g","caption":"Salman Ravoof"},"description":"Salman Ravoof is a self-taught web developer, writer, creator, and a huge admirer of Free and Open Source Software (FOSS). Besides tech, he's excited by science, philosophy, photography, arts, cats, and food. Learn more about him on his website, and connect with Salman on Twitter.","sameAs":["https:\/\/salmanravoof.com","https:\/\/www.linkedin.com\/in\/salman-ravoof-5a749133\/","https:\/\/x.com\/salmanravoof"],"url":"https:\/\/kinsta.com\/es\/blog\/author\/salmanravoof\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/56221","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\/117"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/comments?post=56221"}],"version-history":[{"count":15,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/56221\/revisions"}],"predecessor-version":[{"id":61846,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/56221\/revisions\/61846"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/56221\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/56221\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/56221\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/56221\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/56221\/translations\/de"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/56221\/translations\/es"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/56221\/translations\/nl"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/56221\/translations\/jp"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/56221\/translations\/se"},{"embeddable":true,"hreflang":"da","title":"Danish","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/56221\/translations\/dk"},{"href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/56221\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/media\/56222"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/media?parent=56221"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/tags?post=56221"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/topic?post=56221"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}