亚马逊AWS官方博客

在 Amazon RDS for SQL Server 中使用区域内只读副本

Original URL:https://aws.amazon.com/blogs/database/using-in-region-read-replicas-in-amazon-rds-for-sql-server/
Amazon RDS for SQL Server 现在支持区域内只读副本,这些副本能够让您将主数据库实例的只读工作负载卸载到副本。只读副本利用内置的分布式可用性组功能,可用于企业版。分布式可用性组是一个跨越两个独立可用性组的可用性组。分布式可用性组的成员是这些可用性组自身。Amazon RDS 对此架构使用独立于域的 Windows Server 故障转移群集 (WSFC)。本文将介绍只读副本的架构、如何创建只读副本以及如何监控只读副本。

在企业版的 SQL Server 2016 Service Pack 2 累积更新 3 (13.00.5216.0.v1) 或更高版本的多可用区配置中,支持只读副本。

具有只读副本的多可用区配置

在具有只读副本的多可用区配置中,为了保证高可用性,主数据库实例上提交的交易会同步复制到辅助副本中,并异步发送给只读副本以实现读取扩展。只读副本包含来自主数据库实例的近乎实时的数据,您可以使用它们卸载来自主数据库实例的只读工作负载,例如可容忍适当数据更新延迟的分析型或报告型查询。此外,在除主数据库实例或辅助数据库实例以外的其他可用区中,您还可以将只读副本用作温备用解决方案,在这些可用区中,您可以根据您的业务需求将副本提升为单可用区实例。您可以使用透明数据加密 (TDE) 或 AWS KMS 来确保静态数据的安全。有关更多信息,请参阅 Amazon Relational Database Service (Amazon RDS) 如何使用 AWS KMS。您可以使用安全套接字层 (SSL) 或本地网络加密 (NNE) 来确保传输中的数据的安全。

下图概述了使用始终在线可用性组的多可用区配置中的 RDS SQL Server。主数据库实例和辅助数据库实例由同一个 AWS 区域内的不同可用区托管,当发生中断时,主数据库实例会自动故障转移至辅助数据库实例。您的数据库是被称为“RDSAG0”的始终在线可用性组的一部分。主数据库实例的数据变化将同步复制到辅助数据库实例。您可以使用侦听器终端节点连接到主数据库实例。

当您创建只读副本时,Amazon RDS 会生成主数据库实例的一个快照,并根据此快照创建一个新的只读实例。当创建或删除只读副本时,无需将主数据库实例停机。您最多可以创建五个只读副本。

下图显示了用于添加一个只读副本的多可用区配置。此分布式可用性组设置具有三个数据库实例,这些实例由同一个 AWS 区域内的不同可用区托管。主数据库实例和辅助数据库实例都是被称为“RDSAG0”的可用性组的一部分。只读副本具有自己的可用性组,名为“READ REPLICA AG”。这些可用性组都是一个名为“DISTRIBUTED AG”的分布式可用性组的成员。数据变化会异步提交给只读副本。主数据库实例和只读副本都有它们自己的唯一终端节点。

注意:请注意,不能将指向主数据库实例的侦听器终端节点用作读取连接字符串,用于将流量路由到只读副本。

下图显示了具有两个只读副本的多可用区配置。这里为两个只读副本各创建了一个分布式可用性组。可用性组“RDSAG0”是这两个分布式可用性组和来自相应只读副本的可用性组的成员。主数据库实例和这两个只读副本都有它们自己的唯一终端节点。

主数据库实例是唯一一个能够接受读/写流量的数据库副本;只读副本只能接受只读流量。当在 Amazon RDS 中使用始终在线可用性组时,应用程序不能将指向主数据库实例的侦听器终端节点用作读取连接字符串,用于将流量路由到只读副本。

先决条件

在开始进行此演练之前,请确保您符合以下先决条件:

  • 只读副本与主数据库实例位于同一个区域。
  • 您的数据库实例运行在 2016 Service Pack 2 累积更新 3 或更高版本上。
  • 您的数据库实例正在使用企业版。
  • 您的数据库实例处于使用始终在线可用性组的多可用区配置中。
  • 对于主数据库实例,您必须启用自动备份(例如,备份保留期必须大于 0 天)。
  • 源数据库实例及其所有只读副本的 SQL Server 数据库引擎版本必须相同。在升级只读副本之后,无论只读副本的维护窗口期是什么时候,Amazon RDS 都会立即升级源数据库实例。有关升级数据库引擎版本的更多信息,请参阅升级 Microsoft SQL Server 数据库引擎

此外,您还应注意以下事项:

  • 您的只读副本的数据库实例系列或大小可能不同于主数据库实例(例如,您的主数据库实例是一个 r5.2xlarge,而您的只读副本可能是一个 t3.xlarge)。
  • 您无法在只读副本上创建新的数据库。当您在主数据库实例上创建任何新数据库时,会自动在只读副本上创建这些数据库。
  • 当您创建只读副本时,存在于主数据库实例上的登录名、自定义服务器角色和 SQL 作业都会复制到只读副本中。如果您稍后在主数据库实例上创建任何此类服务器级对象,则您必须在每个只读副本上手动重新创建这些对象。
  • 您可以在只读副本上创建其他的登录名和 SQL 作业。当从主数据库实例中删除并重新创建只读副本时,这些更改将丢失。
  • 只读副本配置不支持本地恢复。但您可以删除所有只读副本、执行本地恢复和重新创建只读副本。
  • 只读副本最初的存储大小与主数据库实例相同。但当您在主数据库实例上扩展存储时,还必须在副本上扩展存储。

创建 RDS SQL Server 只读副本

您可以通过 AWS 管理控制台或 AWS CLI 创建 RDS SQL Server 只读副本。

创建 SQL Server 只读副本不会导致主数据库实例中断。您可以从同一个主数据库实例创建一个以上的只读副本(最多五个)。每个只读副本都要连接到它们各自的终端节点。

AWS 管理控制台

要通过控制台创建 RDS SQL Server,请完成以下步骤:

  1. 在 Amazon RDS 控制台上,选择数据库。
  2. 搜索您的源实例。 数据库实例必须处于使用始终在线可用性组的多可用区配置中。
  3. 选择您的源实例。
  4. 对于操作,选择创建只读副本。
  5. 在实例规格部分中,对于数据库实例类,选择m5.xlarge。
  6. 对于存储类型,选择预置 IOPS (SSD)。
  7. 对于预置 IOPS,输入5000。 如果选择了一个比源实例更大的 IOPS 值,则可能会影响性能,直到完成此操作为止。
  8. 在网络和安全性下方,对于可用区,选择无偏好。
  9. 对于可公开访问,选择否。
  10. 在加密下方,选择禁用加密。 您无法从未加密的主数据库实例创建加密的只读副本。
  11. 在设置下方,对于只读副本源,选择rds-sql-prod-inst-01。
  12. 对于数据库实例标识符,输入rds-sql-prod-inst-01-replica-01。
  13. 在数据库选项下方,对于数据库端口,保留默认值 (1433)。
  14. 在Microsoft SQL Server Windows 身份验证下方,对于目录,选择无。
  15. 在监控下方,选择禁用增强监控。
  16. 在日志导出下方,选择错误日志。
  17. 对于IAM 角色,输入用于将日志发布到 Amazon CloudWatch Logs 的 IAM 角色(如果尚未选择此角色)。
  18. 在性能详情下方,选择启用性能详情。 您不必启用性能详情,但可以免费保留最多 7 天,因此建议为此演练启用此功能。
  19. 审查配置值,然后选择创建只读副本。

AWS CLI

您还可以通过 AWS CLI 创建只读副本。请参见如下代码:

aws rds create-db-instance-read-replica 
      --db-instance-identifier <SOURCE INSTANCE NAME>
      --source-db-instance-identifier <READ REPLICA NAME>
      --region us-west-2 
      --publicly-accessible 

连接到新创建的只读副本

您可以利用终端节点和端口号连接到主数据库实例和只读副本实例。Amazon RDS 为只读副本提供了两组终端节点:一组节点指向主数据库实例,另一组节点指向只读副本。主数据库实例是唯一一个能够接受读/写流量的数据库副本。只读副本只能接受只读流量。

如下屏幕截图显示了终端节点信息以及如何在 SQL Server Management Studio (SSMS) 中利用这些信息连接到数据库实例。

将 RDS SQL Server 只读副本提升为独立实例

您可以将只读副本提升为独立数据库实例。将只读副本提升为单可用区实例后,不会对任何其他只读副本(如果有)产生任何影响,也不会影响多可用区配置中的主数据库实例或其同步副本。

您可以使用控制台或 AWS CLI 将只读副本提升为单可用区数据库实例。

AWS 管理控制台

要使用控制台提升只读副本,请完成以下步骤:

  1. 在 Amazon RDS 控制台上,选择数据库。
  2. 搜索您的只读副本实例。
  3. 选择只读副本实例。
  4. 对于操作,选择提升。
  5. 在首选项下方,对于启用自动备份,选择是。
  6. 对于备份保留期,选择7 天。
  7. 对于备份窗口期,选择无偏好。
  8. 选择继续。

AWS CLI

您也可以通过 AWS CLI 将只读副本提升为单可用区实例。请参见如下代码示例:

aws rds promote-read-replica 
   --db-instance-identifier <READ REPLICA NAME> 

监控只读副本

只读副本的复制状态可以是以下状态之一:

  • 正在复制 – 正在正常复制只读副本。
  • 复制已降级 – 副本正在从主数据库实例接收数据,但一个或多个数据库目前可能未接收更新。例如,当副本正在设置新创建的数据库时,就会出现这种情况。除非在降级状态期间出现错误,否则状态不会从复制已降级转换为错误。
  • 错误 – 复制发生了错误。要确定确切的错误,请检查 Amazon RDS 控制台或事件日志中的复制错误字段。

要查看复制状态,请完成以下步骤:

  1. 在 Amazon RDS 控制台上,选择数据库。
  2. 搜索您的只读副本实例。
  3. 选择您的只读副本实例。
  4. 查看复制状态列下方的状态。

Amazon CloudWatch 中提供了有关主数据库实例与只读副本之间的复制延迟的信息。您可以通过控制台或 AWS CLI 访问这些信息。您也可以对主数据库实例运行 SQL 查询,以确定目前的复制延迟。

只有当复制状态为正在复制或复制已降级时,复制延迟才有效。

AWS 管理控制台

要通过控制台监控只读副本延迟指标,请完成以下步骤:

  1. 在 Amazon RDS 控制台上,选择数据库。
  2. 搜索您的只读副本实例。
  3. 选择您的只读副本实例。
  4. 选择监控选项卡。
  5. 找到名为副本延迟的图形。

AWS CLI

您也可以使用 AWS CLI 从 CloudWatch 查询副本延迟,例如:

aws cloudwatch get-metric-statistics 
   --namespace "AWS/RDS" 
   --metric-name ReplicaLag 
   --start-time 2020-03-30T00:00:00Z 
   --end-time 2020-04-01T00:00:00Z 
   --period 3600 
   --dimensions Name=DBInstanceIdentifier,Value=<READ REPLICA NAME>
   --statistics Maximum 

有关可用命令的更多信息,请参阅 CloudWatch

SQL 查询

您也可以通过对主数据库实例执行 SQL 查询来监控只读副本延迟,例如:

SELECT AR.replica_server_name
	, DB_NAME (ARS.database_id) '<DATABASE NAME>'
	, AR.availability_mode_desc
	, ARS.synchronization_health_desc
	, ARS.last_hardened_lsn
	, ARS.last_redone_lsn
	, ARS.secondary_lag_seconds
FROM sys.dm_hadr_database_replica_states ARS
INNER JOIN sys.availability_replicas AR ON ARS.replica_id = AR.replica_id
WHERE DB_NAME(ARS.database_id) = '<DATABASE NAME>'
ORDER BY AR.replica_server_name;

总结

对于 Amazon RDS for SQL Server 上的只读副本,您可以创建最多五个副本,以扩展读取工作负载。本文说明了如何创建和监控只读副本。要详细了解只读副本,请参阅使用只读副本。立即试用 Amazon RDS for SQL Server 只读副本。如果您有任何想法或问题,请在评论中留言。

 

本篇作者

Junu Thankappan

Amazon Web Services 的一名数据库工程师。他与 AWS RDS 团队合作,专注于商用数据库引擎和 SQL Server。