通过 Azure CLI、REST API 创建和管理只读副本

适用于: Azure Database for PostgreSQL - 单一服务器

重要

Azure Database for PostgreSQL - 单一服务器即将停用。 我们强烈建议升级到 Azure Database for PostgreSQL 灵活服务器。 有关迁移到 Azure Database for PostgreSQL - 灵活服务器的详细信息,请参阅 Azure Database for PostgreSQL 单一服务器会发生什么情况?

本文介绍如何使用 Azure CLI 和 REST API 在 Azure Database for PostgreSQL 中创建和管理只读副本。 若要详细了解只读副本,请参阅概述

Azure 复制支持

只读副本逻辑解码都依赖 Postgres 预写日志 (WAL) 来获取信息。 这两个功能需要来自 Postgres 的不同级别的日志记录。 逻辑解码需要的日志记录的级别比只读副本需要的更高。

若要配置正确的日志记录级别,请使用 Azure 复制支持参数。 Azure 复制支持有三个设置选项:

  • 关闭 - 在 WAL 中包含最少的信息。 大多数 Azure Database for PostgreSQL 服务器上都不提供此设置。
  • 副本 - 比“关闭”详细。 这是运行只读副本所需的最低日志记录级别。 此设置是大多数服务器上的默认设置。
  • 逻辑 - 比“副本”详细。 这是运行逻辑解码所需的最低日志记录级别。 使用此设置时,只读副本也可以运行。

注意

为持久的大量写入密集型主工作负荷部署只读副本时,复制滞后时间可能会持续增长,并且可能永远无法赶上主工作负荷。 这还可能会增加主服务器上的存储使用量,因为 WAL 文件在副本收到它们之前不会被删除。

Azure CLI

可以使用 Azure CLI 创建和管理只读副本。

先决条件

准备主服务器

  1. 检查主服务器的 azure.replication_support 值。 该值至少应该是“REPLICA”,只读副本才能正常工作。

    az postgres server configuration show --resource-group myresourcegroup --server-name mydemoserver --name azure.replication_support
    
  2. 如果 azure.replication_support 并非至少是“REPLICA”,请将其设置为“REPLICA”。

    az postgres server configuration set --resource-group myresourcegroup --server-name mydemoserver --name azure.replication_support --value REPLICA
    
  3. 重启服务器以应用更改。

    az postgres server restart --name mydemoserver --resource-group myresourcegroup
    

创建只读副本

az postgres server replica create 命令需要以下参数:

设置 示例值 说明
resource-group myresourcegroup 要在其中创建副本服务器的资源组。
name mydemoserver-replica 所创建的新副本服务器的名称。
source-server mydemoserver 要从中进行复制的现有主服务器的名称或资源 ID。 如果希望副本和主服务器的资源组不同,请使用资源 ID。

在下面的 CLI 示例中,副本在主服务器所在的区域中创建。

az postgres server replica create --name mydemoserver-replica --source-server mydemoserver --resource-group myresourcegroup

若要创建跨区域只读副本,请使用 --location 参数。 下面的 CLI 示例在中国北部创建副本。

az postgres server replica create --name mydemoserver-replica --source-server mydemoserver --resource-group myresourcegroup --location chinanorth

注意

若要详细了解可以在哪些区域中创建副本,请访问只读副本概念文章

如果尚未在“常规用途”或“内存优化”主服务器上将 azure.replication_support 参数设置为“REPLICA”并重启服务器,将会收到错误。 请在创建副本之前完成这两个步骤。

重要

查看“只读副本”概述的注意事项部分

将主服务器设置更新为新值之前,请将副本设置更新为一个相等的或更大的值。 此操作可帮助副本与主服务器发生的任何更改保持同步。

列出副本

可以使用 az postgres server replica list 命令查看主服务器的副本列表。

az postgres server replica list --server-name mydemoserver --resource-group myresourcegroup 

停止复制到副本服务器

可以使用 az postgres server replica stop 命令停止主服务器和只读副本之间的复制。

停止复制到主服务器和只读副本后,无法撤消该操作。 只读副本将成为支持读取和写入的独立服务器。 独立服务器不能再次成为副本。

az postgres server replica stop --name mydemoserver-replica --resource-group myresourcegroup 

删除主服务器或副本服务器

若要删除主服务器或副本服务器,请使用 az postgres server delete 命令。

删除主服务器后,将停止复制到所有只读副本的操作。 只读副本将成为支持读取和写入的独立服务器。

az postgres server delete --name myserver --resource-group myresourcegroup

REST API

可以使用 Azure REST API 创建和管理只读副本。

准备主服务器

  1. 检查主服务器的 azure.replication_support 值。 该值至少应该是“REPLICA”,只读副本才能正常工作。

    GET https://management.chinacloudapi.cn/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DBforPostgreSQL/servers/{masterServerName}/configurations/azure.replication_support?api-version=2017-12-01
    
  2. 如果 azure.replication_support 并非至少是“REPLICA”,请将其设置为“REPLICA”。

    PUT https://management.chinacloudapi.cn/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DBforPostgreSQL/servers/{masterServerName}/configurations/azure.replication_support?api-version=2017-12-01
    
    {
     "properties": {
     "value": "replica"
     }
    }
    
  3. 重启服务器以应用更改。

    POST https://management.chinacloudapi.cn/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DBforPostgreSQL/servers/{masterServerName}/restart?api-version=2017-12-01
    

创建只读副本

可以使用创建 API 创建只读副本:

PUT https://management.chinacloudapi.cn/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DBforPostgreSQL/servers/{replicaName}?api-version=2017-12-01
{
  "location": "chinaeast",
  "properties": {
    "createMode": "Replica",
    "sourceServerId": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DBforPostgreSQL/servers/{masterServerName}"
  }
}

注意

若要详细了解可以在哪些区域中创建副本,请访问只读副本概念文章

如果尚未在“常规用途”或“内存优化”主服务器上将 azure.replication_support 参数设置为“REPLICA”并重启服务器,将会收到错误。 请在创建副本之前完成这两个步骤。

副本是通过使用与主服务器相同的计算和存储设置创建的。 创建副本后,可以独立于主服务器更改多项设置:计算代系、vCore 数、存储和备份保留期。 定价层也可以独立更改,但“基本”层除外。

重要

将主服务器设置更新为新值之前,请将副本设置更新为一个相等的或更大的值。 此操作可帮助副本与主服务器发生的任何更改保持同步。

列出副本

可以使用副本列表 API 查看主服务器的副本列表:

GET https://management.chinacloudapi.cn/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DBforPostgreSQL/servers/{masterServerName}/Replicas?api-version=2017-12-01

停止复制到副本服务器

可以使用更新 API 停止主服务器与只读副本之间的复制。

停止复制到主服务器和只读副本后,无法撤消该操作。 只读副本将成为支持读取和写入的独立服务器。 独立服务器不能再次成为副本。

PATCH https://management.chinacloudapi.cn/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DBforPostgreSQL/servers/{replicaServerName}?api-version=2017-12-01
{
  "properties": {
    "replicationRole":"None"  
   }
}

删除主服务器或副本服务器

若要删除主服务器或副本服务器,请使用删除 API

删除主服务器后,将停止复制到所有只读副本的操作。 只读副本将成为支持读取和写入的独立服务器。

DELETE https://management.chinacloudapi.cn/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DBforPostgreSQL/servers/{serverName}?api-version=2017-12-01

后续步骤