设置 Cloud SQL for PostgreSQL 以用于生产

本文档介绍如何设置 Cloud SQL for PostgreSQL 以用于生产。Cloud SQL for PostgreSQL 是一种与 Google Cloud 生态系统集成的全托管式 RDBMS 服务。Cloud SQL for PostgreSQL 有许多关键特性和功能:

  • 通过使用 Google Cloud 的代管式安全功能(包括 VPC)以及自动加密静态数据和传输中的数据,在全球范围内为多个应用和用户提供服务。
  • 支持使用主实例和备用实例以及两者之间的自动故障切换实现高可用性架构。
  • 支持分布式数据库工作负载:通过允许在同一数据库集群下的主节点和读取副本之间的读/写分离。
  • 支持与 Cloud Storage 集成的自动备份和自动数据库维护。
  • 支持多种在线事务处理 (OLTP) 工作负载。

创建 Cloud SQL for PostgreSQL 实例

您可通过 Google Cloud 控制台或 Google Cloud CLI 执行几个步骤来设置 Cloud SQL for PostgreSQL 实例。本文介绍了两种方法。

控制台

  1. 在 Google Cloud 控制台中,转到 SQL>实例页面。

    转到实例

  2. 点击创建实例,然后点击选择 PostgreSQL

  3. 创建 PostgreSQL 实例页面中,提供以下详细信息:

    • 实例 ID:输入实例的名称。此实例名称是永久性的,以后无法更改。
    • 默认用户密码:选择 postgres 用户密码作为默认管理员账号。(您可以在部署 PostgreSQL 实例后创建其他用户。)
    • 区域可用区:选择区域和可用区。最佳做法是在关联的 Google Cloud 服务(例如应用)所在的区域中或靠近用户的地理位置处部署 PostgreSQL 实例,以降低数据处理的延迟时间。一旦选择区域,之后便无法再更改。
    • 数据库版本:选择最新版本,或者如果需要,选择最近提供的版本。
  4. 点击创建以部署 PostgreSQL 实例。或者,点击显示配置选项设置其他配置。

    创建 PostgreSQL 实例。

    • 其他配置选项

      • 连接:通常情况下,您通过公共 IP 地址、专用 IP 地址和已获授权的网络将 PostgreSQL 实例连接到网络。已获授权的网络是可设置来建立远程连接的允许连接(例如,批准来自客户端的特定 IP 地址的连接)。

        设置网络连接。

      • 机器类型和存储:根据分配的资源(vCPU、RAM)、存储类型(SSD 或 HDD)和存储空间容量选择机器类型。增加存储空间容量还会增加支持的数据库的磁盘吞吐量 (MB/s) 和读写 IOPS。根据预期磁盘吞吐量和 IOPS 要求调整存储空间容量。

        存储空间容量为 10 GB。存储空间容量为 100 GB。

      • 自动备份和高可用性:使用自动备份功能(默认启用)定义可执行自动备份的时间范围。此外,使用预写式日志的时间点恢复选项也是创建只读副本所必需的。这些日志会定期更新,并且会占用一定的存储空间。为避免出现意外的存储问题,我们建议您在使用时间点恢复时启用存储空间自动扩容。高可用性默认处于停用状态(多可用区)。如需启用自动故障切换,请选择高可用性(区域级)选项。

      • 标志:此设置指定了用于控制实例的设置和参数的 Cloud SQL 方法;与非代管式 PostgreSQL 实例的 postgresql.conf 文件等效。如需完整列表,请参阅产品文档。更改标志的值或设置新标志可能需要重启实例。

      • 维护:本部分指定了执行维护任务的首选时段,包括 bug 修复和次要版本升级。请注意,维护操作通常需要重启实例,并且可能会导致短暂的服务中断。您可以注册以接收有关即将进行维护事件的电子邮件通知。

      • 标签:在本部分中,您可以定义键值对以对 PostgreSQL 实例进行分类,例如:

        定义键值对以对 PostgreSQL 实例进行分类。

gcloud

  1. 创建 PostgreSQL 实例:

    gcloud sql instances create postgresql01 \
        --cpu=2 \
        --memory=7680MB \
        --region=us-central1 --zone=us-central1-a
    
  2. 为 PostgreSQL 默认用户分配密码(语法示例):

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

    您可以指定以下其他选项:

    • 数据库版本:支持的 PostgreSQL 版本之一。
    • 存储类型:SSD 或 HDD 作为存储类型。
    • 存储容量:实例的初始存储设置。
    • 存储空间自动扩容:Cloud SQL 自动化,以在可用空间不足时,添加额外的存储空间。
    • 高可用性:Cloud SQL 高可用性。
    • 自动备份:备份的开始时间段。
    • 时间点恢复:时间点恢复和预写式日志记录。
    • 维护期:Cloud SQL 可执行中断性维护的时间范围(时长为一小时)。
    • 维护时间:设置对 PostgreSQL 实例执行更新的首选时间。对于提前更新,可以指定预览版,对于延后更新,可以指定正式版
    • 数据库标志:用于控制设置和参数的 PostgreSQL 数据库标志。

    以下 gcloud 命令会使用一些附加选项创建 Cloud SQL for PostgreSQL 实例:

    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
    

    如需了解详情,请参阅创建实例

实例选择

选择实例或调整实例的大小时,应选择可在 Cloud SQL for PostgreSQL 上支持您的 Oracle® 工作负载的机器类型。实例类型分为两大组:

  • 共享核心机器:经济实惠。
  • 专用核心实例:支持多个 vCPU 和内存比率。

如需详细了解实例类型,请参阅 Cloud SQL 价格

要调整实例的大小,请从分析分配给来源数据库且为其所用的资源开始。可以从 V$OSSTAT 系统视图或 Oracle AWR 报告中获取 Oracle 数据库资源设置(请参阅以下示例):

物理内存(数据库服务器中的物理内存总字节数):

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

分配的内存

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

CPU 核心数(可用的 CPU 核心数):

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

CPU 核心数(由 Oracle 实例使用 V$LICENSE 视图识别):

SQL> SELECT CPU_CORE_COUNT_CURRENT FROM V$LICENSE;

Oracle AWR 报告资源示例(Oracle AWR 报告可以提供有关特定 Oracle 实例工作负载特征的额外的数据洞见):

Oracle AWR 报告资源示例。

如果您有来源数据库的资源信息,则建议您选择最匹配的 Cloud SQL 实例类型并运行一些基准测试。基准测试的结果可帮助您确定实例选择。

高可用性配置

为了实现与 Oracle 的 Data Guard 类似的灾难恢复解决方案,Cloud SQL for PostgreSQL 提供高可用性功能,其提供从集群的主实例到备用实例的自动故障切换。备用实例与主实例位于同一区域内的不同可用区中。通过主实例和备用实例的永久性磁盘之间同步复制,备用实例保持同步。此方法可确保对主实例的所有数据修改也应用于备用实例。

如果主实例发生故障(例如实例无响应或区域级层故障),Cloud SQL 将执行自动故障切换。通过一秒钟出现一次的检测信号对主实例进行监控,在主实例未发出信号检测大约 60 秒后激活故障切换。此时,主实例故障切换到备用实例,以透明的方式向应用或客户端提供数据访问权限,而现有的读取副本仍保持运行状态。请注意,与 Active Data Guard 不同,备用实例在用作备用时不会开放读取;使用 Cloud SQL,只能将读取副本用于从主实例分流读取。

您可以在创建实例时启用 Cloud SQL for PostgreSQL 高可用性 (HA) 功能,也可以为现有 PostgreSQL 实例启用该功能。具体步骤如下所示:

控制台

  1. 在实例创建页面上,点击显示配置选项 > 自动备份和高可用性 > 可用性,然后选择高可用性(区域级)选项。
  2. 对于现有 PostgreSQL 实例,请按照上一步修改 PostgreSQL 实例。这需要重新启动数据库。
  3. 如需启动故障切换以进行测试,请转到 Cloud SQL 页面,然后点击故障切换

    启动故障切换以进行测试。

    您可以采用相同的方式来启用故障恢复。

gcloud

  1. 通过将 availability-type 参数设置为 regional 来启用高可用性:

    gcloud sql instances create postgresql01 \
        --cpu=2 \
        --memory=7680MB \
        --region=us-central1 \
        --zone=us-central1-a \
        --availability-type=regional
    
  2. 检查现有 PostgreSQL 实例是否配置了高可用性:

    gcloud sql instances describe INSTANCE_NAME
    

    如果此命令的输出包含 availabilityType: REGIONAL,则表示已启用高可用性。如果输出包含 availabilityType: ZONAL,则未配置高可用性,可以使用 patch 命令启用:

    gcloud sql instances patch INSTANCE_NAME --availability-type REGIONAL
    
  3. 启动从主实例到备用实例的故障切换测试:

    gcloud sql instances failover PRIMARY_INSTANCE_NAME
    

    如需执行故障恢复,请在新的主实例上运行相同的故障切换命令。

管理员用户和账号

任何 Cloud SQL for PostgreSQL 安装都附带提供两个默认的 PostgreSQL 用户账号。这两个账号为 postgrescloudsqlimportexport

postgres 账号

postgres 账号是管理员账号,相当于 Cloud PaaS 下的 Oracle SYSSYSTEM 用户。由于 Cloud SQL for PostgreSQL 是一项托管式服务,因此与 Oracle SYSSYSTEM 用户不同,postgres 用户被限制对需要高级权限的特定系统过程和表的访问。

postgres 用户是 cloudsqlsuperuser 角色的一部分,拥有以下特性(权限):CREATEROLECREATEDBLOGIN。它没有 SUPERUSERREPLICATION 特性。

cloudsqlimportexport 账号

cloudsqlimportexport 账号是使用 CSV 导入/导出操作所需的一组最低权限创建的。您可以选择自行创建用户来执行这些操作,如果未创建,则系统将使用默认 cloudsqlimportexport 用户。cloudsqlimportexport 用户是系统用户,您无法直接使用。

账号管理(添加、删除或更改密码)

账号管理涉及创建新的用户账号、修改现有账号的密码以及删除不再需要的账号。可以通过 Google Cloud 控制台、gcloud 工具或 PostgreSQL 客户端执行这些账号操作。

控制台

  1. 从 Google Cloud 控制台中列出现有账号:转到 Cloud SQL 控制台>选择 PostgreSQL 实例>用户

    列出现有账号。

  2. 通过点击相应账号旁边的三个点(更多)图标,修改该账号密码或完全删除该账号。

    在此屏幕中,您可以点击创建用户账号来创建一个新的 PostgreSQL 用户。

    修改密码并删除账号。

gcloud

  1. 列出现有用户账号:

    gcloud sql users list --instance=postgresql01
    

    输出类似于以下内容:

    NAME       HOST
    Postgres
    
  2. 创建 appuser 用户账号,设置密码,然后删除 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

  • 直接通过标准 PostgreSQL 客户端执行相同的操作,例如:

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

    您可以通过 PostgreSQL 客户端,使用 GRANT/REVOKE 命令配置 PostgreSQL 数据库级层权限(例如,从特定表或视图读取)。

监控和提醒

Cloud Logging 是 Google Cloud 上的主要日志记录工具。它用于收集和查看 Cloud SQL for PostgreSQL 等资源的各种监控日志。

借助 Cloud Logging,您可以查看按事件级别(例如,严重、错误或警告)、事件时间范围和自由文本搜索过滤的 Cloud SQL for PostgreSQL 的日志,如以下屏幕截图所示。

查看 Cloud Logging 中的日志

PostgreSQL 数据库实例监控

Oracle 的主要监控工具是 Enterprise Manager 和 Grid/Cloud Control。借助这些工具,您可以在数据库会话和 SQL 语句级层进行实时数据库实例监控。

Cloud SQL for PostgreSQL 通过 Google Cloud 控制台提供类似的监控功能。然后,可以获取数据库实例的摘要视图,其中包括 CPU 利用率、存储空间用量、内存用量、读取/写入操作、活跃连接数、每秒事务数以及入站/出站流量字节数。请注意,Google Cloud Observability 为 Cloud SQL for PostgreSQL 提供了其他监控指标,例如自动故障切换请求数以及主实例与只读副本之间的复制延迟。

以下示例图表显示了过去 6 小时内的每秒事务数:

过去 6 小时内的每秒事务数图表。

监控读取副本

您可以通过 Google Cloud 控制台监控读取副本,方式与监控主实例相同。有一些用于检查主实例与读取副本实例之间的复制状态的特定指标。这些指标用于填充 Google Cloud 控制台中的读取副本实例概览页面。

或者,您可以从命令行检查复制状态:

gcloud sql instances describe REPLICA_NAME

第三个方案是通过 PostgreSQL 客户端检查复制状态。以下 PostgreSQL 命令会检查读取副本状态:

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=>

PostgreSQL 数据库监控

本部分介绍一些视为 PostgreSQL DBA 日常安排的额外的监控任务。

会话监控

Oracle 会话通过查询称为“V$”视图的动态性能视图进行监控。V$SESSIONV$PROCESS 视图通常用于通过 SQL 语句来获取当前数据库活动的相关实时数据洞见。您可以通过 PostgreSQL 命令和 SQL 语句以类似方式来监控 PostgreSQL 中的会话活动。

PostgreSQL pg_stat_activity 动态视图会提供有关当前数据库会话活动的详细信息:

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=>

长时间运行的事务监控

为了识别可能会导致性能问题的长时间运行的事务,请查询 pg_stat_activity 动态视图。如需确定长时间运行的查询,您可以对 query_startstate 等列应用适当的过滤条件。

锁定监控

您可以使用 pg_locks 动态视图来监控数据库锁定情况,该视图提供有关任何可能导致性能问题的锁争用的实时信息。

提醒

除了监控和日志记录之外,您还可以使用提醒。您还可以为条件创建提醒。

扩缩

Cloud SQL for PostgreSQL 同时支持纵向和横向扩缩选项。

您可以向 Cloud SQL 实例添加更多资源,例如增加实例分配的 CPU 和内存数量,从而进行纵向扩缩。实例的网络吞吐量取决于您为 CPU 和内存选择的值。

Cloud SQL 可支持高达 30 TB 的存储空间容量。添加存储空间容量通常会增加实例的吞吐量和磁盘 IOPS。请注意,Cloud SQL 实例的网络吞吐量包括读写的数据(磁盘吞吐量),以及查询、计算的内容和并非存储在数据库中的其他数据。在纵向扩容 Cloud SQL 实例时,请务必考虑这些因素。

通过创建只读副本进行横向扩缩。您可以通过只读副本将读取工作负载扩展到单独的 Cloud SQL 实例,而不会影响主实例的性能和可用性。

备份与恢复

Cloud SQL for PostgreSQL 提供了两种数据库备份方法:按需备份和自动备份。您可以随时执行按需备份,此类备份会保留到您将其删除为止。自动备份使用一个 4 小时的备份时段,并保留 7 天。

您可以将 Cloud SQL for PostgreSQL 数据库备份恢复到同一实例并覆盖现有数据,也可以将该备份恢复到新实例。此外,只要开启了时间点恢复功能并启用了自动备份选项,Cloud SQL for PostgreSQL 就可以让您将 PostgreSQL 数据库恢复到特定时间点

Cloud SQL for PostgreSQL 提供数据库克隆功能。必须从主实例创建克隆(即,无法从副本创建克隆)。可通过 Google Cloud 控制台或 gcloud CLI 运行数据库备份、恢复和克隆。

自动化

您可以使用 Cloud SQL Admin API 完全自动管理 Cloud SQL for PostgreSQL 实例。Cloud SQL Admin API 是一个 REST API,用于控制不同类型的资源,例如实例、数据库、用户、标志、操作、SslCert、层级和 BackupRun。如需了解详情,请参阅 API 文档

后续步骤