Configurar Cloud SQL para PostgreSQL para usarlo en producción

En este documento se explica cómo configurar Cloud SQL para PostgreSQL para usarlo en producción. Cloud SQL para PostgreSQL es un servicio de SGBDR totalmente gestionado que está integrado con el ecosistema de Google Cloud. Cloud SQL para PostgreSQL tiene varias funciones y características principales:

  • Ofrece servicios a varias aplicaciones y usuarios de todo el mundo mediante las funciones de seguridad gestionadas deGoogle Cloud, como la VPC y el cifrado automático de datos en reposo y en tránsito.
  • Admite una arquitectura de alta disponibilidad que usa instancias principales y de espera, así como la conmutación por error automática entre ellas.
  • Admite cargas de trabajo de bases de datos distribuidas al permitir la separación de lectura y escritura entre el nodo principal y las réplicas de lectura del mismo clúster de bases de datos.
  • Admite copias de seguridad automáticas integradas con Cloud Storage y mantenimiento automático de bases de datos.
  • Admite una gran variedad de cargas de trabajo de procesamiento de transacciones online (OLTP).

Implementar una instancia de Cloud SQL para PostgreSQL

Puedes configurar una instancia de Cloud SQL para PostgreSQL en unos pocos pasos con la Google Cloud consola o la CLI de Google Cloud. Ambos métodos se describen en este artículo.

Consola

  1. En la Google Cloud consola, ve a la página SQL>Instancias.

    Ir a Instancias

  2. Haz clic en Crear instancia y, a continuación, en Elegir PostgreSQL.

  3. En la página Crear una instancia de PostgreSQL, proporciona los siguientes detalles:

    • ID de instancia: introduzca un nombre para la instancia. El nombre de la instancia es permanente y no se puede cambiar más adelante.
    • Contraseña de usuario predeterminada: elige la contraseña de usuario postgres como cuenta de administrador predeterminada. Puedes crear más usuarios después de desplegar la instancia de PostgreSQL.
    • Región y Zona: selecciona una región y una zona. Es una práctica recomendada implementar la instancia de PostgreSQL en la misma región que los servicios asociados (por ejemplo, las aplicaciones) o en una zona geográfica cercana a los usuarios para reducir la latencia del procesamiento de datos. Google Cloud Una vez que hayas seleccionado una región, no podrás modificarla más adelante.
    • Versión de la base de datos: elige la versión más reciente o la que esté disponible más recientemente si la necesitas.
  4. Haz clic en Crear para desplegar la instancia de PostgreSQL. También puedes hacer clic en Mostrar opciones de configuración para definir más configuraciones.

    Crear una instancia de PostgreSQL.

    • Opciones de configuración adicionales:

      • Conectividad: normalmente, se conecta la instancia de PostgreSQL a la red a través de una dirección IP pública, una dirección IP privada y redes autorizadas. Las redes autorizadas son conexiones permitidas que puedes configurar para establecer una conexión remota. Por ejemplo, puedes aprobar una conexión desde una dirección IP específica de un cliente.

        Configurar una conexión de red.

      • Tipo de máquina y almacenamiento: elige el tipo de máquina según los recursos asignados (vCPUs y RAM), el tipo de almacenamiento (SSD o HDD) y la capacidad de almacenamiento. Al aumentar la capacidad de almacenamiento, también se incrementa el rendimiento del disco admitido (MB/s) y las IOPs de lectura y escritura de la base de datos. Ajusta la capacidad de almacenamiento en función del rendimiento del disco y los requisitos de IOPS previstos.

        Capacidad de almacenamiento de 10 GB.Capacidad de almacenamiento de 100 GB.

      • Copias de seguridad automáticas y alta disponibilidad: utiliza la función de copias de seguridad automáticas, que está habilitada de forma predeterminada, para definir el periodo en el que se realizarán las copias de seguridad automáticas. Además, la opción de recuperación a un momento dado, que usa registros de escritura previa, también es necesaria para crear una réplica de lectura. Estos registros se actualizan con regularidad y usan espacio de almacenamiento. Para evitar problemas de almacenamiento inesperados, le recomendamos que habilite los aumentos automáticos del almacenamiento cuando utilice la recuperación a un momento dado. La alta disponibilidad está inhabilitada de forma predeterminada (varias zonas). Para habilitar la conmutación por error automática, selecciona la opción Alta disponibilidad (regional).

      • Marcas: este ajuste especifica el método de Cloud SQL para controlar los ajustes y los parámetros de tu instancia. Es equivalente al archivo postgresql.conf de una instancia de PostgreSQL no gestionada. Para ver una lista completa, consulta la documentación del producto. Si cambias el valor de una marca o estableces una nueva, es posible que tengas que reiniciar la instancia.

      • Mantenimiento: en esta sección se especifica el periodo que prefieres para realizar tareas de mantenimiento, como correcciones de errores y actualizaciones de versiones secundarias. Ten en cuenta que las operaciones de mantenimiento suelen requerir que se reinicie una instancia y pueden provocar una breve interrupción del servicio. Puedes registrarte para recibir notificaciones por correo electrónico sobre los próximos eventos de mantenimiento.

      • Etiquetas: en esta sección, se definen pares clave-valor para categorizar la instancia de PostgreSQL. Por ejemplo:

        Definir pares clave/valor que categoricen tu instancia de PostgreSQL.

gcloud

  1. Crea la instancia de PostgreSQL:

    gcloud sql instances create postgresql01 \
        --cpu=2 \
        --memory=7680MB \
        --region=us-central1 --zone=us-central1-a
    
  2. Asigna una contraseña al usuario predeterminado de PostgreSQL (ejemplo de sintaxis):

    gcloud sql users set-password postgres \
        --instance INSTANCE_NAME \
        --password PASSWORD
    

    Puedes especificar estas opciones adicionales:

    • Versión de la base de datos: una de las versiones compatibles de PostgreSQL.
    • Tipo de almacenamiento: SSD o HDD.
    • Capacidad de almacenamiento: la configuración de almacenamiento inicial de la instancia.
    • Aumento automático del almacenamiento: automatización de Cloud SQL para añadir almacenamiento adicional cuando el espacio libre es escaso.
    • Alta disponibilidad: alta disponibilidad de Cloud SQL.
    • Copias de seguridad automáticas: la ventana de hora de inicio de las copias de seguridad.
    • Recuperación a un momento dado: recuperación a un momento dado y registro de escritura previa.
    • Ventana de mantenimiento: periodo de una hora en el que Cloud SQL puede realizar tareas de mantenimiento que provoquen interrupciones.
    • Hora de mantenimiento: la hora preferida para realizar actualizaciones en la instancia de PostgreSQL. Puedes especificar preview para las actualizaciones anteriores o production para las posteriores.
    • Marcas de bases de datos: las marcas de bases de datos de PostgreSQL para controlar los ajustes y los parámetros.

    El siguiente comando gcloud crea una instancia de Cloud SQL para PostgreSQL con algunas opciones adicionales:

    gcloud sql instances create postgresql01 \
        --cpu=2 \
        --memory=7680MB \
        --region=us-central1 \
        --zone=us-central1-a \
        --database-version=POSTGRES_12 \
        --storage-type=SSD \
        --storage-size=100 \
        --storage-auto-increase \
        --availability-type=regional \
        --backup-start-time=23:30 \
        --enable-point-in-time-recovery \
        --maintenance-window-day=sun \
        --maintenance-window-hour=11 \
        --maintenance-release-channel=production \
        --database-flags max_connections=100
    

    Para obtener más información, consulta el apartado sobre crear instancias.

Selección de instancias

Para seleccionar o dimensionar una instancia, debes elegir un tipo de máquina que pueda admitir tu carga de trabajo de Oracle® en Cloud SQL para PostgreSQL. Los tipos de instancia se dividen en dos grupos principales:

  • Máquinas con núcleo compartido: son rentables.
  • Instancias de núcleo dedicado: admiten varias relaciones de vCPU y memoria.

Para obtener más información sobre los tipos de instancias, consulta los precios de Cloud SQL.

Para dimensionar la instancia, empieza analizando los recursos asignados a tu base de datos de origen y los que utiliza. Puedes obtener la configuración de los recursos de la base de datos Oracle desde la vista de sistema V$OSSTAT o desde un informe AWR de Oracle (consulta los siguientes ejemplos):

Memoria física (número total de bytes de memoria física en el servidor de la base de datos):

SQL> SELECT ROUND(MAX(VALUE)/1024/1024/1024) AS MEM_SIZE_GB
     FROM V$OSSTAT
     WHERE STAT_NAME = 'PHYSICAL_MEMORY_BYTES';

Memoria asignada:

SQL> SELECT NAME, VALUE, DISPLAY_VALUE FROM V$PARAMETER
     WHERE NAME LIKE '%sga%' OR NAME LIKE '%memory%';

Núcleos de CPU (número de núcleos de CPU disponibles):

SQL> SELECT VALUE FROM V$OSSTAT
     WHERE STAT_NAME = 'NUM_CPU_CORES';

Núcleos de CPU (identificados por una instancia de Oracle mediante la vista V$LICENSE):

SQL> SELECT CPU_CORE_COUNT_CURRENT FROM V$LICENSE;

Ejemplo de recurso de informe AWR de Oracle: un informe AWR de Oracle puede proporcionar información adicional sobre las características de la carga de trabajo de una instancia de Oracle específica.

Ejemplo de recurso de informe AWR de Oracle.

Cuando tengas la información de los recursos de tu base de datos de origen, te recomendamos que elijas el tipo de instancia de Cloud SQL que mejor se adapte y que ejecutes algunas pruebas comparativas. Los resultados de las comparativas te ayudan a finalizar la selección de tu instancia.

Configuración de alta disponibilidad

Para implementar una solución de recuperación tras desastres similar a Data Guard de Oracle, Cloud SQL para PostgreSQL ofrece funciones de alta disponibilidad que proporcionan una conmutación por error automática de la instancia principal del clúster a su instancia en espera. La instancia de espera se encuentra en una zona diferente de la misma región que la instancia principal. La instancia de espera se mantiene sincronizada mediante la replicación síncrona entre los discos persistentes de las instancias principal y de espera. Este método asegura que todas las modificaciones de datos de la principal también se apliquen a la secundaria.

En caso de que se produzca un fallo en la instancia principal, como que no responda o que se produzca un fallo a nivel de zona, Cloud SQL realiza una conmutación por error automática. La instancia principal se monitoriza mediante latidos, que se producen en intervalos de 1 segundo. La conmutación por error se activa después de aproximadamente 60 segundos sin recibir latidos de la instancia principal. En este punto, la instancia principal pasa a la de espera, lo que permite que las aplicaciones o los clientes accedan a los datos de forma transparente, mientras que las réplicas de lectura siguen operativas. Ten en cuenta que, a diferencia de Active Data Guard, la instancia de espera no está abierta a lecturas mientras actúa como instancia de espera. Con Cloud SQL, solo se pueden usar réplicas de lectura para descargar lecturas de la instancia principal.

Puedes habilitar la función de alta disponibilidad de Cloud SQL para PostgreSQL al crear la instancia o en una instancia de PostgreSQL que ya tengas. Estos son los pasos que debes seguir:

Consola

  1. En la página de creación de instancias, haga clic en Mostrar opciones de configuración>Copias de seguridad automáticas y alta disponibilidad>Disponibilidad y, a continuación, seleccione la opción Alta disponibilidad (regional).
  2. En el caso de una instancia de PostgreSQL, edítala siguiendo el paso anterior. Esto requiere reiniciar la base de datos.
  3. Para iniciar una conmutación por error con fines de prueba, ve a la página Cloud SQL y haz clic en Conmutación por error.

    Iniciando la conmutación por error para realizar pruebas.

    Puedes habilitar la conmutación por error de la misma forma.

gcloud

  1. Para habilitar la alta disponibilidad, asigna el valor regional al parámetro availability-type:

    gcloud sql instances create postgresql01 \
        --cpu=2 \
        --memory=7680MB \
        --region=us-central1 \
        --zone=us-central1-a \
        --availability-type=regional
    
  2. Comprueba si una instancia de PostgreSQL tiene configurada la alta disponibilidad:

    gcloud sql instances describe INSTANCE_NAME
    

    Si el resultado de este comando incluye availabilityType: REGIONAL, entonces HA ya está habilitado. Si el resultado incluye availabilityType: ZONAL, significa que la alta disponibilidad no está configurada y se puede habilitar con el comando patch:

    gcloud sql instances patch INSTANCE_NAME --availability-type REGIONAL
    
  3. Inicia una prueba de conmutación por error de la instancia principal a la de espera:

    gcloud sql instances failover PRIMARY_INSTANCE_NAME
    

    Para volver a la configuración original, ejecuta el mismo comando de conmutación por error en el nuevo servidor principal.

Usuarios y cuentas de administrador

Cualquier instalación de Cloud SQL para PostgreSQL incluye dos cuentas de usuario de PostgreSQL predeterminadas. Estas cuentas son postgres y cloudsqlimportexport.

cuenta de Postgres

La cuenta postgres es la cuenta de administrador y equivale a los usuarios de Oracle SYS o SYSTEM en Cloud PaaS. Como Cloud SQL para PostgreSQL es un servicio gestionado, el usuario postgres, a diferencia de los usuarios SYS u SYSTEM de Oracle, no puede acceder a determinados procedimientos y tablas del sistema que requieren privilegios avanzados.

El usuario postgres forma parte del rol cloudsqlsuperuser y tiene los siguientes atributos (privilegios): CREATEROLE, CREATEDB y LOGIN. No tiene los atributos SUPERUSER ni REPLICATION.

Cuenta cloudsqlimportexport

La cuenta cloudsqlimportexport se crea con el conjunto mínimo de privilegios necesarios para las operaciones de importación y exportación de CSV. Puedes crear tus propios usuarios para realizar estas operaciones, pero, si no lo haces, se usará el usuario cloudsqlimportexport predeterminado. El usuario cloudsqlimportexport es un usuario del sistema y no puedes usarlo directamente.

Gestión de cuentas (añadir, eliminar o cambiar la contraseña)

La gestión de cuentas implica crear cuentas de usuario, modificar la contraseña de una cuenta y eliminar una cuenta que ya no se necesite. Puedes realizar estas operaciones de cuenta a través de la consola, la herramienta gcloud o el cliente de PostgreSQL. Google Cloud

Consola

  1. Lista de las cuentas actuales desde la consola: ve a Consola de Cloud SQL> selecciona Instancia de PostgreSQL > Usuarios. Google Cloud

    Se muestran las cuentas.

  2. Modifica la contraseña de la cuenta o elimínala por completo haciendo clic en el icono de tres puntos (Más) situado junto a la cuenta.

    En esta pantalla, puedes hacer clic en Crear cuenta de usuario para crear un usuario de PostgreSQL.

    Modificar la contraseña y eliminar una cuenta.

gcloud

  1. Lista de las cuentas de usuario:

    gcloud sql users list --instance=postgresql01
    

    El resultado debería ser similar al siguiente:

    NAME       HOST
    Postgres
    
  2. Crea la cuenta de usuario appuser, establece la contraseña y elimina appuser:

    gcloud sql users create appuser \
        --instance=postgresql01 --password=PASSWORD
    
    gcloud sql users set-password appuser \
        --host=% --instance=postgresql01 --prompt-for-password
    
    gcloud sql users delete appuser --instance=postgresql01
    

PostgreSQL

  • Realiza estas mismas acciones directamente desde un cliente estándar de PostgreSQL. Por ejemplo:

    postgres=> create user appuser with login password 'my_password';
    
    postgres=> alter user appuser password 'my_password';
    
    postgres=> drop user appuser;
    

    Puedes configurar permisos a nivel de base de datos de PostgreSQL (por ejemplo, leer de una tabla o vista específica) mediante los comandos GRANT/REVOKE a través del cliente de PostgreSQL.

Monitorización y alertas

Cloud Logging es la herramienta de registro principal de Google Cloud. Se usa para recoger y ver varios registros de monitorización de recursos, como Cloud SQL para PostgreSQL.

Cloud Logging te permite ver los registros de Cloud SQL para PostgreSQL filtrados por nivel de evento (por ejemplo, Crítico, Error o Advertencia), periodo del evento y búsqueda de texto libre, como se muestra en la siguiente captura de pantalla.

Ver registros en Cloud Logging.

Monitorización de instancias de bases de datos PostgreSQL

Las principales herramientas de monitorización de Oracle son Enterprise Manager y Grid/Cloud Control. Estas herramientas te permiten monitorizar las instancias de bases de datos en tiempo real a nivel de sesión de base de datos y de instrucción SQL.

Cloud SQL para PostgreSQL ofrece funciones de monitorización comparables a través de la Google Cloud consola. Desde ahí, puede obtener una vista de resumen de sus instancias de base de datos, incluido el uso de CPU, el uso de almacenamiento, el uso de memoria, las operaciones de lectura/escritura, las conexiones activas, las transacciones por segundo y los bytes de entrada/salida. Ten en cuenta que Google Cloud Observability proporciona métricas de monitorización adicionales para Cloud SQL para PostgreSQL, como las solicitudes de conmutación por error automática y el retraso de la replicación entre la réplica de lectura y la principal.

El siguiente gráfico muestra las transacciones por segundo de las últimas 6 horas:

Gráfico de transacciones por segundo de las últimas 6 horas.

Monitorizar réplicas de lectura

Puedes monitorizar las réplicas de lectura a través de la Google Cloud consola de la misma forma que monitorizas la instancia principal. Hay métricas específicas para comprobar el estado de la replicación entre las instancias primarias y las réplicas de lectura. Estas métricas se usan para rellenar la página de resumen de la instancia de réplica de lectura en la consolaGoogle Cloud .

También puedes comprobar el estado de la réplica desde la línea de comandos:

gcloud sql instances describe REPLICA_NAME

Otra opción es comprobar el estado de la replicación a través de un cliente de PostgreSQL. El siguiente comando de PostgreSQL comprueba el estado de la réplica de lectura:

postgres=> \x on
Expanded display is on.
postgres=> select * from pg_stat_replication;
-[ RECORD 1 ]----+-------------------------------------------
pid              | 74733
usesysid         | 16388
usename          | cloudsqlreplica
application_name | PROJECT_ID:REPLICA_NAME
client_addr      | REPLICA_IP
client_hostname  |
client_port      | 41660
backend_start    | 2020-09-28 06:59:38.783981+00
backend_xmin     |
state            | streaming
sent_lsn         | 0/2939FFA8
write_lsn        | 0/2939FFA8
flush_lsn        | 0/2939FFA8
replay_lsn       | 0/2939FFA8
write_lag        |
flush_lag        |
replay_lag       |
sync_priority    | 0
sync_state       | async
reply_time       | 2020-09-28 07:17:52.714969+00
postgres=>

Monitorización de bases de datos PostgreSQL

En esta sección se describen algunas tareas de monitorización adicionales que se consideran rutinarias para un administrador de bases de datos PostgreSQL.

Monitorización de sesiones

Las sesiones de Oracle se monitorizan consultando las vistas de rendimiento dinámicas, conocidas como vistas "V$". Las vistas V$SESSION y V$PROCESS se suelen usar para obtener información valiosa en tiempo real sobre la actividad actual de la base de datos mediante instrucciones SQL. Puedes monitorizar la actividad de las sesiones en PostgreSQL de forma similar, tanto con comandos de PostgreSQL como con instrucciones SQL.

La vista dinámica PostgreSQL pg_stat_activity proporciona información detallada sobre la actividad de la sesión de base de datos actual:

postgres=> \x on
postgres=> select * from pg_stat_activity where backend_type = 'client backend' and usename != 'cloudsqladmin';
-[ RECORD 1 ]----+-----------------------------------------------------------------------------------------------------
datid            | 14052
datname          | postgres
pid              | 74750
usesysid         | 16389
usename          | postgres
application_name | psql
client_addr      | CLIENT_IP
client_hostname  |
client_port      | 51904
backend_start    | 2020-09-28 07:01:30.214099+00
xact_start       | 2020-09-28 07:28:48.982115+00
query_start      | 2020-09-28 07:28:48.982115+00
state_change     | 2020-09-28 07:28:48.982117+00
wait_event_type  |
wait_event       |
state            | active
backend_xid      |
backend_xmin     | 88513
query            | select * from pg_stat_activity where backend_type = 'client backend' and usename != 'cloudsqladmin';
backend_type     | client backend
postgres=>

Monitorización de transacciones largas

Para identificar las transacciones de larga duración que pueden provocar problemas de rendimiento, consulta la vista dinámica pg_stat_activity. Puedes identificar las consultas de larga duración aplicando los filtros adecuados a columnas como query_start y state.

Monitorización de cerraduras

Puedes monitorizar los bloqueos de bases de datos a través de la vista dinámica pg_locks, que proporciona información en tiempo real sobre cualquier conflicto de bloqueo que pueda provocar problemas de rendimiento.

Alertas

Puedes usar alertas además de la monitorización y el registro. También puedes crear alertas para condiciones.

Escalado

Cloud SQL para PostgreSQL admite opciones de escalado vertical y horizontal.

Para escalar verticalmente, añade más recursos a la instancia de Cloud SQL, como aumentar el número de CPUs y la memoria asignados a la instancia. El rendimiento de la red de tu instancia depende de los valores que elijas para la CPU y la memoria.

Cloud SQL admite hasta 30 TB de espacio de almacenamiento. Al añadir capacidad de almacenamiento, generalmente se aumenta el rendimiento y las IOPS de disco de una instancia. Ten en cuenta que el rendimiento de la red de una instancia de Cloud SQL incluye las lecturas y escrituras de tus datos (rendimiento del disco), así como el contenido de las consultas, los cálculos y otros datos que no se almacenan en tu base de datos. Es importante tener en cuenta estos factores al escalar verticalmente tu instancia de Cloud SQL.

Para escalar horizontalmente, crea réplicas de lectura. Las réplicas de lectura te permiten escalar tus cargas de trabajo de lectura en instancias de Cloud SQL independientes sin que afecte al rendimiento ni a la disponibilidad de la instancia principal.

Copia de seguridad y sistema de recuperación

Hay dos métodos de copia de seguridad de bases de datos en Cloud SQL para PostgreSQL: bajo demanda y automatizado. Puedes crear copias de seguridad bajo demanda en cualquier momento y se conservarán hasta que las elimines. Las copias de seguridad automatizadas se realizan durante un periodo de 4 horas y se conservan durante 7 días.

Puedes restaurar copias de seguridad de bases de datos de Cloud SQL para PostgreSQL en la misma instancia, sobrescribiendo los datos, o en una instancia nueva. Además, Cloud SQL para PostgreSQL te permite restaurar una base de datos de PostgreSQL a un momento específico, siempre que la recuperación a un momento dado esté activada y la opción de copia de seguridad automática esté habilitada.

Cloud SQL para PostgreSQL ofrece funciones de clonación de bases de datos. El clon debe crearse a partir de la instancia principal (es decir, no se puede crear a partir de una réplica). Puedes ejecutar copias de seguridad, restauraciones y clonaciones de bases de datos desde laGoogle Cloud consola o la CLI de gcloud.

Automatización

Puedes usar la API Admin de Cloud SQL para automatizar por completo la administración de una instancia de Cloud SQL para PostgreSQL. La API Admin de Cloud SQL es una API REST que permite controlar diferentes tipos de recursos, como instancias, bases de datos, usuarios, marcas, operaciones, certificados SSL, niveles y BackupRuns. Para obtener más información, consulta la documentación de la API.

Siguientes pasos