En esta página, se describe cómo administrar réplicas de lectura. Estas operaciones incluyen inhabilitar y habilitar la replicación, promover una réplica, configurar la replicación paralela y verificar el estado de la replicación.
Para obtener más información sobre cómo funciona la replicación, consulta Replicación en Cloud SQL.
Inhabilitar replicación
Según la configuración predeterminada, una réplica se inicia con su habilitación. Sin embargo, puedes inhabilitar la replicación, por ejemplo, para depurar o analizar el estado de una instancia. Cuando estés listo, habilita de nuevo la replicación de forma explícita. Inhabilitar o volver a habilitar la replicación no reinicia la instancia de réplica.
Cuando se inhabilita la replicación, no se detiene la instancia de réplica, sino que se convierte en una instancia de solo lectura que ya no se replica a partir de su instancia principal. Se te seguirá cobrando por la instancia. En la réplica inhabilitada, puedes volver a habilitar la replicación, borrar la réplica o ascenderla a una instancia independiente.
Para inhabilitar la replicación:
Console
-
En la consola de Google Cloud, ve a la página Instancias de Cloud SQL.
- Haz clic en el nombre de una instancia de réplica para seleccionarla.
- Haz clic en Inhabilitar replicación en la barra de botones.
- Haz clic en Aceptar.
gcloud
gcloud sql instances patch REPLICA_NAME \ --no-enable-database-replication
REST v1
Para ejecutar este comando cURL en una ventana de línea de comandos, debes adquirir un token de acceso con el comando gcloud auth print-access-token. También puedes usar el Explorador de API en la página de parches de instancias para enviar la solicitud a la API de REST.
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
- project-id: El ID del proyecto
- replica-name: El nombre de la instancia de réplica
Método HTTP y URL:
PATCH https://sqladmin.googleapis.com/v1/projects/project-id/instances/replica-name
Cuerpo JSON de la solicitud:
{ "settings": { "databaseReplicationEnabled": "False" } }
Para enviar tu solicitud, expande una de estas opciones:
Deberías recibir una respuesta JSON similar a la que se muestra a continuación:
REST v1beta4
Para ejecutar este comando cURL en una ventana de línea de comandos, debes adquirir un token de acceso con el comando gcloud auth print-access-token. También puedes usar el Explorador de API en la página de parches de instancias para enviar la solicitud a la API de REST.
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
- project-id: El ID del proyecto
- replica-name: El nombre de la instancia de réplica
Método HTTP y URL:
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/replica-name
Cuerpo JSON de la solicitud:
{ "settings": { "databaseReplicationEnabled": "False" } }
Para enviar tu solicitud, expande una de estas opciones:
Deberías recibir una respuesta JSON similar a la que se muestra a continuación:
Habilitar replicación
Si una réplica no se repitió durante mucho tiempo, tardará más en alcanzar a la instancia principal. En este caso, borra la réplica y crea una nueva.
Para habilitar la replicación:
Console
-
En la consola de Google Cloud, ve a la página Instancias de Cloud SQL.
- Haz clic en el nombre de una instancia de réplica para seleccionarla.
- Haz clic en Habilitar replicación.
- Haz clic en Aceptar.
gcloud
gcloud sql instances patch REPLICA_NAME \ --enable-database-replication
REST v1
Para ejecutar este comando cURL en una ventana de línea de comandos, debes adquirir un token de acceso con el comando gcloud auth print-access-token. También puedes usar el Explorador de API en la página de parches de instancias para enviar la solicitud a la API de REST.
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
- project-id: El ID del proyecto
- replica-name: El nombre de la instancia de réplica
Método HTTP y URL:
PATCH https://sqladmin.googleapis.com/v1/projects/project-id/instances/replica-name
Cuerpo JSON de la solicitud:
{ "settings": { "databaseReplicationEnabled": "True" } }
Para enviar tu solicitud, expande una de estas opciones:
Deberías recibir una respuesta JSON similar a la que se muestra a continuación:
REST v1beta4
Para ejecutar este comando cURL en una ventana de línea de comandos, debes adquirir un token de acceso con el comando gcloud auth print-access-token. También puedes usar el Explorador de API en la página de parches de instancias para enviar la solicitud a la API de REST.
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
- project-id: El ID del proyecto
- replica-name: El nombre de la instancia de réplica
Método HTTP y URL:
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/replica-name
Cuerpo JSON de la solicitud:
{ "settings": { "databaseReplicationEnabled": "True" } }
Para enviar tu solicitud, expande una de estas opciones:
Deberías recibir una respuesta JSON similar a la que se muestra a continuación:
Ascender una réplica
Si asciendes una réplica de lectura, se detendrá la replicación y la instancia pasará a ser una instancia principal de Cloud SQL independiente con funciones de lectura y escritura.
Cuando se ascienden, las réplicas de lectura se configuran de forma automática con copias de seguridad, pero no se configuran automáticamente como instancias con alta disponibilidad (HA). Puedes habilitar la alta disponibilidad después de ascender la réplica como lo harías con cualquier instancia que no sea de réplica. La configuración de una réplica de lectura para alta disponibilidad se realiza de la misma manera que para una instancia principal. Obtén más información sobre cómo configurar la instancia para alta disponibilidad.
Antes de ascender una réplica de lectura, si la instancia principal sigue disponible y entrega contenido a los clientes, debes hacer lo siguiente:
- Detén todas las operaciones de escritura en la instancia principal.
- Verifica el estado de replicación de la réplica (sigue las instrucciones que se indican en la pestaña psql Client (Cliente psql)).
- Verifica que la réplica se replique y, luego, espera hasta que el retraso de replicación que informa la métrica
replay_lag
sea 0.
De lo contrario, es posible que a una instancia recién ascendida le falten algunas transacciones confirmadas en la instancia principal.
Para ascender una réplica a una instancia independiente, sigue estos pasos:
Console
-
En la consola de Google Cloud, ve a la página Instancias de Cloud SQL.
- Haz clic en el nombre de una instancia de réplica para seleccionarla.
- Haz clic en Promover réplica.
- Haz clic en Aceptar.
gcloud
gcloud sql instances promote-replica REPLICA_NAME
REST v1
Para ejecutar este comando cURL en una ventana de línea de comandos, debes adquirir un token de acceso con el comando gcloud auth print-access-token. También puedes usar el Explorador de API en la página de ascenso de réplicas de instancias para enviar la solicitud a la API de REST.
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
- project-id: El ID del proyecto
- replica-name: El nombre de la instancia de réplica
Método HTTP y URL:
POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/replica-name/promoteReplica
Para enviar tu solicitud, expande una de estas opciones:
Deberías recibir una respuesta JSON similar a la que se muestra a continuación:
REST v1beta4
Para ejecutar este comando cURL en una ventana de línea de comandos, debes adquirir un token de acceso con el comando gcloud auth print-access-token. También puedes usar el Explorador de API en la página de ascenso de réplicas de instancias para enviar la solicitud a la API de REST.
Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:
- project-id: El ID del proyecto
- replica-name: El nombre de la instancia de réplica
Método HTTP y URL:
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/replica-name/promoteReplica
Para enviar tu solicitud, expande una de estas opciones:
Deberías recibir una respuesta JSON similar a la que se muestra a continuación:
Confirma que la instancia ascendida esté configurada de forma correcta. En particular, considera configurar la instancia para alta disponibilidad si es necesario.
Comprobar el estado de la replicación
Cuando visualizas una instancia de réplica con la consola de Google Cloud o accedes a la instancia con un cliente de administración, obtienes los detalles de la replicación, incluidos el estado y las métricas. Cuando usas gcloud, obtienes un breve resumen de la configuración de la replicación.
Antes de verificar el estado de replicación de una instancia de réplica de Cloud SQL, usa el comando gcloud sql instances describe
para mostrar el estado de la instancia. Como resultado, puedes ver si la replicación está habilitada para la instancia de réplica.
Las siguientes métricas están disponibles para instancias de réplica. (Obtén más información sobre las métricas adicionales disponibles para todas las instancias, incluidas las que no son de réplica).
Métrica | Descripción |
---|---|
Estado de replicació ( cloudsql.googleapis.com ) |
Indica si la replicación transmite de forma activa los registros desde la instancia principal hacia la réplica. Los valores posibles son los siguientes:
Esta métrica muestra
Para obtener más información, consulta El recopilador de estadísticas y las Funciones de administración del sistema en el manual de referencia de PostgreSQL. |
Retraso de replicación ( cloudsql.googleapis.com ) |
La cantidad de tiempo que el estado de la réplica se encuentra detrás del estado de la instancia principal. Esta es la diferencia entre (1) la hora actual y (2) la marca de tiempo original en la que la confirmación principal confirmó la transacción que se está aplicando en la réplica. En particular, las operaciones de escritura se pueden contar como atrasadas incluso si la réplica las recibió, si la réplica aún no aplica la operación de escritura en la base de datos. Para las réplicas en cascada, cada par de réplica principal se supervisa por separado y no hay una sola métrica que genere el retraso de extremo a extremo (principal para réplica). Para obtener más información, consulta Retraso de replicación. |
Bytes de retraso ( cloudsql.googleapis.com ) |
Informa la cantidad de bytes por los que la réplica de lectura retrasa la instancia principal. Se producen cuatro series temporales para cada réplica y muestra la cantidad de bytes en el registro de escritura por adelantado de la instancia principal que aún no han sido…
Estas métricas tienen diferentes propósitos, por ejemplo:
Estas métricas se calculan mediante la comparación de |
Bytes máximos de retraso ( cloudsql.googleapis.com ) |
Para una réplica de una instancia principal externa, se informa el retraso de replicación máximo (en bytes) de todas las bases de datos que se replican en esta instancia. Para cada base de datos, esto se define como la cantidad de bytes en el registro de escritura anticipada que no fueron confirmados como recibidos por la réplica. Esta métrica se calcula mediante el envío de una consulta a la instancia principal para comparar |
Para verificar el estado de la replicación:
Console
Cloud SQL informa la
métrica Replication State
en el
panel de
supervisión predeterminado de Cloud SQL.
Si deseas ver otras métricas de réplicas en región y entre regiones, y las réplicas de los servidores externos, crea un panel personalizado y agrega las métricas que deseas supervisar en él:
-
En la consola de Google Cloud, ve a la página Supervisión.
- Selecciona la pestaña Paneles.
- Haz clic en Crear panel de control.
- Asigna un nombre al panel y haz clic en Aceptar.
- Haz clic en Agregar gráfico.
- En Tipo de recurso, selecciona Cloud SQL Database.
- Sigue uno de estos pasos:
- Para supervisar la métrica del estado de replicación: En el campo Seleccionar una métrica, escribe
Replication state
. Luego, agrega un filtro parastate = "Running"
. En el gráfico, se muestra 1 si la replicación está en ejecución y 0 en caso contrario. - Para supervisar el retraso de replicación, en bytes, para una réplica de lectura: En el campo Seleccionar una métrica, escribe
Lag Bytes
. Luego, agrega un filtro enreplica_lag_type = "replay_location"
. En el gráfico, se muestra la cantidad de bytes asociados a transacciones que se confirmaron en la réplica principal, pero que todavía no se han vuelto a reproducir en la réplica. - Para supervisar el retraso de replicación, en bytes, para una réplica de una instancia principal externa: En el campo Seleccionar una métrica, escribe
Max Lag Bytes
. En el gráfico, se muestra la cantidad de bytes asociados a transacciones que se confirmaron en la principal, pero que la réplica aún no confirma.
gcloud
Para una instancia de réplica, verifica el estado de la replicación de la siguiente forma:
gcloud sql instances describe REPLICA_NAME
En el resultado, busca las propiedades databaseReplicationEnabled
y masterInstanceName
.
En el caso de una instancia principal, puedes verificar si hay réplicas de la siguiente forma:
gcloud sql instances describe PRIMARY_INSTANCE_NAME
Busca la propiedad replicaNames
en el resultado.
Cliente psql
La réplica principal genera algunas métricas del estado de replicación, y otras las produce la réplica. Para los siguientes pasos, conéctate a la réplica o a la instancia principal (como se indica a continuación) con un cliente PostgreSQL.
Si deseas obtener más información, consulta Opciones de conexión para aplicaciones externas.
- Para verificar el estado de la réplica desde la instancia principal, haz lo siguiente:
Busca las siguientes métricas en el resultado del comando:select * from pg_stat_replication;
client_addr
: Es la dirección IP de la instancia de réplica.state
: Indica si el subproceso de SQL para ejecutar eventos en el registro de retransmisión está en ejecución. El valor esstreaming
cuando se inicia la replicación.replay_lag
: Es la cantidad de bytes que tiene el subproceso de SQL de réplica detrás de la instancia principal. El valor esO
o una pequeña cantidad de bytes.
- Para verificar el estado de la réplica desde la instancia de réplica, haz lo siguiente:
select * from pg_stat_wal_receiver;
Busca las siguientes métricas en el resultado del comando:
sender_host
: Es la dirección IP de la instancia principal.status
: Indica si el subproceso de SQL para ejecutar eventos en el registro de retransmisión está en ejecución. El valor esstreaming
cuando se inicia la replicación.last_msg_send_time
ylast_msg_receipt_time
: La diferencia entre estas dos marcas de tiempo es el tiempo de retraso.
Para verificar si la replicación se detuvo, haz lo siguiente:
select pg_is_wal_replay_paused();
El valor es
t
si la replicación está pausada yf
en caso contrario.Para verificar si hay transacciones recibidas que se recibieron de la instancia principal, pero que aún no se aplicaron, sigue estos pasos:
# for PostgreSQL 9.6 select pg_catalog.pg_last_xlog_receive_location(), pg_catalog.pg_last_xlog_replay_location(); # for PostgreSQL 10 and above select pg_catalog.pg_last_wal_receive_lsn(), pg_catalog.pg_last_wal_replay_lsn();
Si los dos valores son iguales, la réplica procesa todas las transacciones que recibió de la instancia principal.
Solucionar problemas
Problema | Soluciona problemas |
---|---|
La réplica de lectura no comenzó a replicarse cuando se creó. | Es probable que haya un error más específico en los archivos de registro. Inspecciona los registros en Cloud Logging para encontrar el error real. |
No se puede crear una réplica de lectura: error invalidFlagValue. | Una de las marcas de la solicitud no es válida. Puede ser una marca que proporcionaste explícitamente o una que se configuró como un valor predeterminado.
Primero, comprueba que el valor de la marca Si la marca |
No se puede crear una réplica de lectura: error desconocido. | Es probable que haya un error más específico en los archivos de registro.
Inspecciona los registros en Cloud Logging para encontrar el error real.
Si el error es |
El disco está lleno. | El tamaño del disco de la instancia principal puede llenarse durante la creación de una réplica. Edita la instancia principal para actualizarla a un tamaño de disco más grande. |
El espacio en el disco aumenta significativamente. | Una ranura que no se usa de forma activa para realizar un seguimiento de los datos hace que PostgreSQL se conserve en los segmentos WAL de forma indefinida, lo que hace que el espacio en disco crezca de forma indefinida. Si usas las funciones de replicación y decodificación lógicas en Cloud SQL, las ranuras de replicación se crean y descartan de forma automática. Las ranuras de replicación sin usar se pueden detectar si consultas la vista del sistema pg_replication_slots y filtras en la columna active . Las ranuras sin usar se pueden descartar para quitar los segmentos de WAL mediante el comando pg_drop_replication_slot .
|
La instancia de réplica usa demasiada memoria. | La réplica usa memoria temporal para almacenar en caché las operaciones de lectura solicitadas con frecuencia, lo que puede ocasionar que use más memoria que la instancia principal.
Reinicia la instancia de réplica para recuperar el espacio de memoria temporal. |
Se detuvo la replicación. | Se alcanzó el límite de almacenamiento máximo y el aumento de almacenamiento automático no está habilitado.
Edita la instancia para habilitar |
El retraso de replicación se mantiene alto. | La carga de escritura es demasiado alta para que la réplica la maneje. El retraso de la replicación se produce cuando el subproceso de SQL en una réplica no puede mantener el ritmo del subproceso de E/S. Algunos tipos de consultas o cargas de trabajo pueden causar un gran retraso de la replicación de forma temporal o permanente en un esquema determinado. Algunas de las causas típicas del retraso de la replicación son las siguientes:
Estas son algunas de las soluciones posibles:
|
Errores cuando se vuelven a compilar índices en PostgreSQL 9.6 | Recibirás un error de PostgreSQL que te informará que debes volver a compilar un índice en particular. Esto se puede hacer solo en la instancia principal. Si creas una instancia de réplica nueva, pronto recibirás el mismo error.
Los índices hash no se propagan a las réplicas en las versiones de PostgreSQL inferiores a 10.
Si debes usar índices de hash, actualiza a PostgreSQL 10 o versiones posteriores. De lo contrario, si también quieres usar réplicas, no uses índices de hash en PostgreSQL 9.6. |
La consulta en la instancia principal siempre se ejecuta. | Después de crear una réplica, se espera que la consulta SELECT * from pg_stat_activity where state = 'active' and pid = XXXX and username = 'cloudsqlreplica' se ejecute de forma continua en tu instancia principal.
|
La creación de la réplica falla con el tiempo de espera. | Las transacciones no confirmadas de larga duración en la instancia principal pueden generar una falla en la creación de la réplica de lectura.
Vuelve a crear la réplica después de detener todas las consultas en ejecución. |
Si la instancia principal y la réplica tienen diferentes tamaños de CPU virtuales, puede haber problemas de rendimiento de las consultas porque el optimizador de consultas tiene en cuenta los tamaños de las CPU virtuales. |
Para resolver este problema, realiza los siguientes pasos:
Si se trata de una consulta específica, modifícala. Por ejemplo, puedes cambiar el orden de las uniones para ver si obtienes un mejor rendimiento. |
¿Qué sigue?
- Aprende a crear una réplica de lectura.
- Obtén más información sobre los requisitos y recomendaciones para la replicación.