En esta página se describe cómo gestionar las réplicas de lectura. Entre estas operaciones se incluyen la habilitación e inhabilitación de la réplica, la promoción de una réplica, la configuración de la réplica paralela y la comprobación del estado de la réplica.
Para obtener más información sobre cómo funciona la replicación, consulta Replicación en Cloud SQL.
Inhabilitar replicación
De forma predeterminada, las réplicas se inician con la replicación habilitada. Sin embargo, puedes inhabilitar la replicación en determinadas situaciones; por ejemplo, para depurar o analizar el estado de una instancia. Cuando lo tengas todo listo, vuelve a habilitar la replicación de forma explícita. Si inhabilitas o vuelves a habilitar la replicación, no se reiniciará la instancia de réplica.
Si inhabilitas la replicación, la instancia de réplica no se detendrá, sino que se convertirá en una instancia de solo lectura que ya no replicará datos de su instancia principal. Se te seguirá cobrando por la instancia. En la réplica inhabilitada, puedes volver a habilitar la replicación, eliminar la réplica o convertirla en una instancia independiente.
Si inhabilitas la replicación durante un periodo prolongado, es posible que aumenten los requisitos de almacenamiento en disco. Por ejemplo, tu instancia puede acumular registros de transacciones para permitirte reanudar la replicación cuando la vuelvas a habilitar. Para evitar que aumenten los requisitos de almacenamiento en disco, en lugar de inhabilitar la réplica durante un periodo prolongado, te recomendamos que promociones la réplica o crees un clon de la instancia principal.
Para inhabilitar la replicación, efectúa los pasos siguientes:
Consola
-
En la Google Cloud consola, 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 un símbolo del sistema, debes obtener un token de acceso con el comando gcloud auth print-access-token. También puede usar el Explorador de APIs en la página Instances:patch para enviar la solicitud de la API REST.
Antes de usar los datos de la solicitud, haz las siguientes sustituciones:
- project-id: el ID del proyecto
- replica-name: 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, despliega una de estas opciones:
Deberías recibir una respuesta JSON similar a la siguiente:
REST v1beta4
Para ejecutar este comando cURL en un símbolo del sistema, debes obtener un token de acceso con el comando gcloud auth print-access-token. También puede usar el Explorador de APIs en la página Instances:patch para enviar la solicitud de la API REST.
Antes de usar los datos de la solicitud, haz las siguientes sustituciones:
- project-id: el ID del proyecto
- replica-name: 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, despliega una de estas opciones:
Deberías recibir una respuesta JSON similar a la siguiente:
Habilitar replicación
Si una réplica no se ha replicado durante mucho tiempo, tardará más en ponerse al día con la instancia principal. En ese caso, elimina la réplica y crea otra.
Para habilitar la replicación, efectúa los pasos siguientes:
Consola
-
En la Google Cloud consola, 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 un símbolo del sistema, debes obtener un token de acceso con el comando gcloud auth print-access-token. También puede usar el Explorador de APIs en la página Instances:patch para enviar la solicitud de la API REST.
Antes de usar los datos de la solicitud, haz las siguientes sustituciones:
- project-id: el ID del proyecto
- replica-name: 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, despliega una de estas opciones:
Deberías recibir una respuesta JSON similar a la siguiente:
REST v1beta4
Para ejecutar este comando cURL en un símbolo del sistema, debes obtener un token de acceso con el comando gcloud auth print-access-token. También puede usar el Explorador de APIs en la página Instances:patch para enviar la solicitud de la API REST.
Antes de usar los datos de la solicitud, haz las siguientes sustituciones:
- project-id: el ID del proyecto
- replica-name: 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, despliega una de estas opciones:
Deberías recibir una respuesta JSON similar a la siguiente:
Promocionar una réplica
Si promueves una réplica de lectura, se detendrá la replicación y la instancia se convertirá en una instancia principal de Cloud SQL independiente con permisos de lectura y escritura.
Cuando se ascienden, las réplicas de lectura se configuran automáticamente con copias de seguridad, pero no se configuran automáticamente como instancias de alta disponibilidad. Puedes habilitar la alta disponibilidad después de promocionar la réplica, igual que harías con cualquier instancia que no sea una réplica. La configuración de una réplica de lectura para alta disponibilidad se realiza de la misma forma que en una instancia principal. Consulta más información sobre cómo configurar la instancia para alta disponibilidad.
Antes de promover una réplica de lectura, si la principal sigue estando disponible y atendiendo a los clientes, debes hacer lo siguiente:
- Detener todas las escrituras en la instancia principal.
- Comprueba el estado de la réplica (sigue las instrucciones de la pestaña Cliente psql).
- Verifica que la réplica se esté replicando y, a continuación, espera hasta que la latencia de replicación que indica la métrica
replay_lag
sea 0.
De lo contrario, es posible que a la instancia recién ascendida le falten algunas transacciones que se hayan confirmado en la instancia principal.
Para promover una réplica a una instancia independiente, sigue estos pasos:
Consola
-
En la Google Cloud consola, 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 Promocionar réplica.
- Haz clic en Aceptar.
gcloud
gcloud sql instances promote-replica REPLICA_NAME
REST v1
Para ejecutar este comando cURL en un símbolo del sistema, debes obtener un token de acceso con el comando gcloud auth print-access-token. También puede usar el Explorador de APIs en la página Instances:promoteReplica para enviar la solicitud de la API REST.
Antes de usar los datos de la solicitud, haz las siguientes sustituciones:
- project-id: el ID del proyecto
- replica-name: 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, despliega una de estas opciones:
Deberías recibir una respuesta JSON similar a la siguiente:
REST v1beta4
Para ejecutar este comando cURL en un símbolo del sistema, debes obtener un token de acceso con el comando gcloud auth print-access-token. También puede usar el Explorador de APIs en la página Instances:promoteReplica para enviar la solicitud de la API REST.
Antes de usar los datos de la solicitud, haz las siguientes sustituciones:
- project-id: el ID del proyecto
- replica-name: 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, despliega una de estas opciones:
Deberías recibir una respuesta JSON similar a la siguiente:
Confirma que la instancia promocionada esté configurada correctamente. En concreto, plantéate configurar la instancia para alta disponibilidad si es necesario.
Comprobar el estado de la replicación
Cuando ves una instancia de réplica mediante la Google Cloud consola o inicias sesión en la instancia con un cliente de administración, obtienes detalles sobre la replicación, como el estado y las métricas. Cuando usas gcloud CLI, obtienes un breve resumen de la configuración de la réplica.
Antes de comprobar el estado de la 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, puede ver si la replicación está habilitada en la instancia de réplica.
Las siguientes métricas están disponibles para las instancias réplica. Más información sobre las métricas adicionales disponibles para todas las instancias, incluidas las que no son réplicas.
Métrica | Descripción |
---|---|
Estado de replicación ( cloudsql.googleapis.com ) |
Indica si la réplica está transmitiendo registros de forma activa desde la principal. Los valores posibles son:
Esta métrica informa de
Para obtener más información, consulta El recolector de estadísticas y Funciones de administración del sistema en el manual de referencia de PostgreSQL. |
Latencia de replicación ( cloudsql.googleapis.com ) |
Tiempo que tarda en replicarse el estado de la réplica con respecto al estado de la instancia principal. Es la diferencia entre (1) la hora actual y (2) la marca de tiempo original en la que la réplica principal confirmó la transacción que se está aplicando en la réplica. En concreto, las escrituras pueden considerarse retrasadas aunque la réplica las haya recibido, si la réplica aún no ha aplicado la escritura a la base de datos. En el caso de las réplicas en cascada, cada par principal-réplica se monitoriza por separado y no hay una métrica única que proporcione la latencia de extremo a extremo (de principal a réplica). Para obtener más información, consulta el artículo sobre el retraso de la replicación. |
Lag Bytes ( cloudsql.googleapis.com ) |
Informa del número de bytes por el que la réplica de lectura se retrasa con respecto a la principal. Se generan cuatro series temporales por cada réplica, que muestran el número de bytes del registro de escritura anticipada de la réplica principal que aún no se han…
Estas métricas tienen finalidades diferentes. Por ejemplo:
Estas métricas se calculan comparando |
Max Lag Bytes ( cloudsql.googleapis.com ) |
En el caso de una réplica de una principal externa, informa de la latencia de replicación máxima (en bytes) de todas las bases de datos que se están replicando en esta instancia. En cada base de datos, se define como el número de bytes del registro de escritura anticipada de la principal que no se ha confirmado que haya recibido la réplica. Esta métrica se calcula enviando una consulta a la réplica principal para comparar |
Para comprobar el estado de la replicación, efectúa los pasos siguientes:
Consola
Cloud SQL informa de la métrica Replication State
en el panel de control de monitorización de Cloud SQL predeterminado.
Para ver otras métricas de las réplicas de la misma región y de otras regiones, así como de las réplicas de servidores externos, cree un panel de control personalizado y añada las métricas que quiera monitorizar:
-
En la Google Cloud consola, ve a la página Monitorización.
- Seleccione la pestaña Paneles.
- Haz clic en Crear panel de control.
- Asigna un nombre al panel de control y haz clic en Aceptar.
- Haz clic en Añadir gráfico.
- En Tipo de recurso, selecciona Base de datos de Cloud SQL.
- Sigue uno de estos métodos:
- Para monitorizar la métrica de estado de la réplica: en el campo Selecciona una métrica, escribe
Replication state
. A continuación, añade un filtro parastate = "Running"
. El gráfico muestra 1 si la replicación está en curso y 0 en caso contrario. - Para monitorizar el retraso de la replicación, en bytes, de una réplica de lectura: en el campo Seleccionar una métrica, escribe
Lag Bytes
. A continuación, añade un filtro enreplica_lag_type = "replay_location"
. El gráfico muestra el número de bytes asociados a las transacciones que se han confirmado en el servidor principal, pero que aún no se han reproducido en la réplica. - Para monitorizar el desfase de replicación, en bytes, de una réplica de un primario externo: en el campo Seleccionar una métrica, escribe
Max Lag Bytes
. El gráfico muestra el número de bytes asociados a las transacciones que se han confirmado en la principal, pero que la réplica aún no ha confirmado que ha recibido.
gcloud
Para una instancia de réplica, comprueba el estado de la replicación con:
gcloud sql instances describe REPLICA_NAME
En el resultado, busca las propiedades databaseReplicationEnabled
y masterInstanceName
.
En el caso de una instancia principal, comprueba si hay réplicas con lo siguiente:
gcloud sql instances describe PRIMARY_INSTANCE_NAME
En el resultado, busca la propiedad replicaNames
.
Cliente psql
La instancia principal genera algunas métricas de estado de la replicación y la réplica genera otras. Para seguir los pasos que se indican a continuación, conéctate a la réplica o a la instancia principal (según se indique más abajo) con un cliente de PostgreSQL.
Para obtener información, consulta las opciones de conexión para aplicaciones externas.
- Para comprobar el estado de la réplica desde la instancia principal, sigue estos pasos:
Busca las siguientes métricas en el resultado del comando:select * from pg_stat_replication;
client_addr
: la dirección IP de la instancia de réplica.state
: indica si el subproceso 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
: número de bytes que el subproceso SQL de la réplica está por detrás de la instancia principal. El valor esO
o un número pequeño de bytes.
- Para comprobar el estado de la réplica desde la instancia de réplica, sigue estos pasos:
select * from pg_stat_wal_receiver;
Busca las siguientes métricas en el resultado del comando:
sender_host
: la dirección IP de la instancia principal.status
: indica si el subproceso 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 latencia.
Para comprobar si la replicación se ha pausado, sigue estos pasos:
select pg_is_wal_replay_paused();
El valor es
t
si la replicación está en pausa yf
en caso contrario.Para comprobar si hay transacciones que se han recibido de la cuenta principal, pero aún no se han aplicado, 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, significa que la réplica ha procesado todas las transacciones que ha recibido de la principal.
Solucionar problemas
Problema | Solución de problemas |
---|---|
La réplica de lectura no ha empezado a replicarse al crearse. | Probablemente 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 hayas proporcionado explícitamente o una que se haya definido con un valor predeterminado.
En primer lugar, comprueba que el valor de la marca Si la marca |
No se ha podido crear la réplica de lectura debido a un error desconocido. | Probablemente 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 disco de la instancia principal puede llenarse durante la creación de la réplica. Edita la instancia principal para actualizarla a un tamaño de disco mayor. |
El espacio en disco aumenta considerablemente. | Si una ranura no se usa de forma activa para monitorizar datos, PostgreSQL conservará los segmentos WAL indefinidamente, lo que provocará que el espacio en disco aumente indefinidamente. Si usas las funciones de replicación lógica y decodificación en Cloud SQL, las ranuras de replicación se crean y se eliminan automáticamente. Puedes detectar las ranuras de replicación no utilizadas consultando la vista del sistema pg_replication_slots
y filtrando por la columna active . Los espacios sin usar se pueden eliminar para quitar segmentos WAL con el comando pg_drop_replication_slot .
|
La instancia de réplica está usando demasiada memoria. | La réplica usa memoria temporal para almacenar en caché las operaciones de lectura solicitadas con frecuencia, lo que puede hacer que use más memoria que la instancia principal.
Reinicia la instancia de réplica para recuperar el espacio de memoria temporal. |
Replicación detenida. | Se ha alcanzado el límite máximo de almacenamiento y el aumento automático del almacenamiento no está habilitado.
Edita la instancia para habilitar |
La latencia de replicación es constantemente alta. | La carga de escritura es demasiado alta para que la réplica pueda gestionarla. El retraso de la réplica se produce cuando el subproceso SQL de una réplica no puede seguir el ritmo del subproceso de E/S. Algunos tipos de consultas o cargas de trabajo pueden provocar una latencia de replicación alta temporal o permanente en un esquema determinado. Estas son algunas de las causas habituales del retraso de la réplica:
Estas son algunas posibles soluciones:
|
Errores al reconstruir índices en PostgreSQL 9.6. | PostgreSQL te informa de que debes volver a generar un índice concreto. Esto solo se puede hacer en la instancia principal. Si creas una nueva instancia de réplica, pronto volverá a aparecer el mismo error.
Los índices hash no se propagan a las réplicas en las versiones de PostgreSQL anteriores a la 10.
Si debes usar índices hash, actualiza a PostgreSQL 10 o una versión posterior. De lo contrario, si también quieres usar réplicas, no uses índices hash en PostgreSQL 9.6. |
La consulta en la instancia principal siempre está en ejecución. | 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 continuamente en tu instancia principal.
|
La creación de réplicas falla por tiempo de espera agotado. | Las transacciones sin confirmar de larga duración en la instancia principal pueden provocar que falle la creación de réplicas 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 tamaños de vCPU diferentes, puede haber problemas de rendimiento de las consultas porque el optimizador de consultas tiene en cuenta los tamaños de las vCPU. |
Para solucionar este problema, siga estos pasos:
Si se trata de una consulta específica, modifícala. Por ejemplo, puedes cambiar el orden de las combinaciones para ver si obtienes un mejor rendimiento. |
Siguientes pasos
- Obtén información sobre cómo crear una réplica de lectura.
- Obtén más información sobre los requisitos y las prácticas recomendadas para la replicación.