在Amazon RDS for SQL Server中,您可以使用单可用区的只读副本来减轻主数据库实例的负担,以便更高效地处理分析和读取密集型工作负载。此功能在2024年4月1日发布,允许在同一地区内或跨地区创建只读副本。
在Amazon关系数据库服务Amazon RDS中,地区内只读副本和跨地区只读副本是两种流行的读取扩展选项。Amazon RDS的用户可以利用只读副本将其分析或以读取为目的的事务工作负载从主数据库实例中卸载。之前,只读副本要求主数据库实例必须采用多可用区配置。然而,一些客户对于主数据库实例的高可用性关注较少,而是希望以较低的成本实现近实时数据复制,以支持其分析应用程序。对主实例执行分析查询通常会占用较长时间,这可能导致其他事务型OLTP查询的阻塞和超时。通过将读取导向的分析查询从主实例中卸载,可以减少锁定、阻塞、查询超时等问题,从而提高主实例的性能。考虑到客户的这种需求,Amazon RDS SQL Server于2024年4月1日宣布了单可用区实例的只读副本功能。
新推出的单可用区只读副本功能使您能够创建单可用区实例的可读副本,无需在主可用区设置辅助实例。您可以在同一AWS区域或跨区域创建单可用区的只读副本,并且也可以将其用于跨区域灾难恢复。
本文将解释单可用区只读副本的架构、创建和监控方法。
使用单可用区只读副本的优势包括:
优势说明工作负载卸载可将分析或以读取为目的的工作负载从单可用区主实例中卸载。灾难恢复可将只读副本提升为单可用区实例,用于地区内或跨区域灾难恢复。成本效益单可用区的只读副本实例总成本较多可用区的只读副本实例低。副本数量单个单可用区实例最多可以创建15个只读副本。使用单可用区只读副本时需考虑以下限制:
尽管可以创建多个只读副本,但只有主单可用区实例可以接受插入、更新和删除操作。不能自动故障转移到只读副本,但在需要时可以提升只读副本为独立的单可用区实例。一旦提升后,该只读副本将无法重新与原主单可用区实例配对。由于可用性组的数据同步模式为异步,因此在特定条件下,特别是资源竞争的情况下,可能会在只读副本中出现同步延迟。因为SQL Server的设计原因,在只读副本中不会反映数据更改,直到重做线程将相应的日志记录应用于只读副本。无法对只读副本中的数据库进行备份。在主单可用区实例中创建的数据库级对象例如表和数据库用户将自动复制到只读副本中。但是,在创建只读副本实例后,在主单可用区实例中添加的服务器或实例级对象如登录帐户和SQL Agent作业必须手动在只读副本实例中创建。单可用区实例与只读副本的架构由主可用区中的一个节点和辅助可用区中的第二个节点组成。每个节点都有自己的Always On可用性组。创建一个跨这两个实例可用性组的分布式可用性组。主单可用区实例中提交的事务会以异步方式复制到只读副本中。主单可用区实例和只读副本实例各自拥有RDS端点,可以用于前端应用程序的连接字符串。
以下图展示了同一地区中单可用区实例的只读副本架构。
您也可以在与单可用区实例不同的区域中创建只读副本。以下图展示了具有跨区域只读副本的单可用区实例架构。
同一个单可用区实例最多可以创建15个只读副本。如果您有业务需要创建更多只读副本,请注意监控主实例的资源使用情况,因为背景线程负责读取日志记录、压缩日志流并将数据传输到每个副本,可能会遇到资源竞争CPU、线程、网络等,导致性能下降。以下示例显示了具有两个只读副本的单可用区实例。RDS自动化为您创建的每个只读副本实例创建一个分布式可用性组。
使用这种架构,可以将OLTP类型的事务工作负载指向单可用区端点,而分析或以读取为目的的工作负载可以指向只读副本端点。
在突发情况下,如果读副本的单可用区实例发生故障,变得不可恢复或无法访问,您可以将只读副本提升为单可用区实例,以减少应用程序的停机时间。然后,您可以从单可用区实例已提升的只读副本创建新的只读副本实例,并重新配置分析应用程序指向新的只读副本。
如果您的应用程序具有多个连接字符串指向同一RDS单可用区实例或只读副本实例,您可以考虑创建一个DNS记录,指向相应的RDS端点。在发生故障时,可以更新DNS记录以指向适当的RDS端点,从而避免在一个或多个应用程序服务器上更新多个连接字符串的开销。
尽管可以为单可用区实例创建多个只读副本,但关键是适当地设置实例实例类别、存储IOPS和吞吐量等,以避免资源竞争,因为一个或多个只读副本中的同步延迟可能导致SQL Server保留主数据库副本中的日志记录。定期的事务日志备份无法截断日志记录,直到它们在只读副本中被传输和提交。如果无法截断日志,日志文件将自动增长如果设置了,并最终填满磁盘空间,从而导致主实例发生故障。
要设置此解决方案,您应满足以下先决条件:
对Microsoft SQL Server中的分布式可用性组有基本了解。一台正在运行的独立单可用区实例,其版本为支持的SQL Server企业版有关支持的次要版本的详细信息,请参见跨区域只读副本的RDS for SQL Server。标准版目前不支持只读副本。有关说明,请参见创建DB实例。在主单可用区实例中启用自动备份,并设置备份保留期大于0天。
您可以通过控制台创建只读副本,请完成以下步骤:
在Amazon RDS控制台上,选择导航窗格中的“数据库”。选择您的源单可用区实例。在“操作”菜单中,选择“创建只读副本”。注意: DB实例必须是运行SQL Server 2016企业版或更高版本的单可用区实例。有关支持的次要版本的详细信息,请查看链接。
在“DB实例标识符”中,为新的只读副本实例输入名称。
在“实例配置”部分,选择适合只读副本的实例类例如,dbm5xlarge。 对于给定的可用性组,所有副本应运行在可处理相同工作负载的相应实例类别和卷类型上,以避免任何资源竞争或同步延迟。如需更多信息,请参见托管可用性副本的计算机建议。
在“AWS区域”中,根据应用程序的业务需求选择合适的区域。
在“存储类型”中,选择合适的存储类型GP2/GP3/IO1/IO2。您还可以选择启用/禁用存储自动扩展以避免存储不足的情况。 如果选择IO1/IO2,请提供相应的“预配置IOPS”值。 如果选择GP3,请提供适当的“预配置IOPS”和“存储吞吐量”。建议使用与源实例相似或更高的存储配置,以避免I/O延迟导致的查询运行或同步延迟。
在“连接性”部分,选择适当的DB子网组公共可访问性VPC安全组和可用区的值。您可以根据需求选择默认或现有的选项。默认端口号为1433。如果要使用不同的端口号,可以在“其他配置”中更改该设置。
根据需要选择Microsoft Windows身份验证来配置实例有关详细信息,请查看使用AWS管理的Active Directory与RDS for SQL Server互动。如果源单可用区实例已经成为Windows Active Directory域的一部分,您可以选择相应的目录。
如果您的单可用区实例是加密的,请为只读副本实例选择“启用加密”。您不能从未加密的单可用区实例中创建加密的只读副本实例。
在“性能洞察”下,您可以在创建新只读副本时启用Amazon RDS性能洞察,或稍后启用。性能洞察在7天的保留期内是免费的。有关更多信息,请参见通过性能洞察监控数据库负载。
您现在可以选择“启用增强监控”,也可以稍后启用。增强监控捕获与操作系统相关的指标,可用于分析服务器资源消耗、容量规划等。有关更多详细信息,请查看增强监控概述。增强监控在7天的保留期内是免费的。
有商业原因可能需要延长期限以保留日志记录。在“日志导出”下,选择“代理日志”和“错误日志”,以便将其导出到Amazon CloudWatch。
在“IAM角色”下,输入您用于将日志发布到CloudWatch的AWS身份和访问管理IAM角色。
检查配置值,然后选择“创建只读副本”。
您也可以通过AWS CLI使用createdbinstancereadreplica命令创建单可用区的只读副本。以下是语法示例:
bashaws rds createdbinstancereadreplica dbinstanceidentifier ltRRINSTANCENAMEgt sourcedbinstanceidentifier ltSOURCESINGLEAZINSTANCENAMEgt region uswest2
例如,针对地区内的单可用区只读副本,使用以下代码:
npv加速器安卓bashaws rds createdbinstancereadreplica dbinstanceidentifier singleazinst1rr1 sourcedbinstanceidentifier singleazinst1 region uswest2
对于跨区域的单可用区只读副本,使用以下代码:
bashaws rds createdbinstancereadreplica dbinstanceidentifier singleazinst1rr2 sourcedbinstanceidentifier arnawsrdsuswest2ltCUSTOMERIDgtdbsingleazinst1 endpointurl https//rdssitebuseast1amazonawscom region useast1 sourceregion uswest2
与其他类型的只读副本类似,监控资源消耗CPU、内存、I/O并适当调整实例的资源至关重要。您可以利用历史基线消耗和未来工作负载预测进行容量规划。您可以使用增强监控和性能洞察等工具,或使用第三方工具或使用SQL Server的内置动态管理视图和动态管理函数构建自定义监控脚本。除了监控资源利用率外,我们还建议定期监控同步延迟。您可以通过查看Amazon RDS的ReplicaLag指标,或使用TSQL查询定期收集延迟信息来监控复制延迟:
sqlSELECT ARreplicaservername DBNAME (ARSdatabaseid) databasename ARavailabilitymodedesc ARSsynchronizationhealthdesc ARSlastcommittime ARSlasthardenedlsn ARSlastredonelsn ARSsecondarylagseconds ARSredoqueuesizeFROM sysdmhadrdatabasereplicastates ARSINNER JOIN sysavailabilityreplicas AR ON ARSreplicaid = ARreplicaidWHERE islocal ltgt 1 AND DBNAME(ARSdatabaseid) = ltREPLACE WITH SPECIFIC DB NAMEgtORDER BY ARreplicaservername
使用只读副本时请注意以下几点:
可以为单可用区实例及其只读副本实例使用不同的实例类别和卷类型。尽管可以对只读副本实例进行资源不足配置,但必须定期监控资源消耗,并适当调整实例类别和存储类型,以避免因CPU或内存压力或I/O延迟造成的查询性能下降或数据同步问题。当首次创建只读副本时,RDS自动化会对附加到单可用区实例的Amazon弹性块存储Amazon EBS卷进行快照备份。基于此快照创建新卷,并将其附加到只读副本实例。新创建的只读副本在初始几个小时可能会有略高的I/O延迟,因而导致更高的Always On复制延迟和查询运行延迟,因为底层存储经过一个称为S3水合的