自动对亚马逊 Aurora PostgreSQL 进行基准测试 — 第 2 部分

作者: 安德鲁·洛 夫、 安德烈·哈斯 迈克·帕克斯 | 2023 年 5

这篇文章是 亚马逊 Aurora PostgreSQL 自动基准测试的 延续。

总而言之,优化数据库是新的和现有的应用程序工作负载的一项重要活动。您需要考虑成本、运营、性能、安全性和可靠性。进行基准测试有助于解决这些问题。使用 兼容 Amazon Aurora PostgreSQL 的版本 ,您可以运行多个基准测试,这些基准测试具有与您的数据访问模式相匹配的不同交易特征。

在这篇文章中,我们为您提供了一个用于自动化解决方案的 亚马逊云科技 CloudF ormation 模板,在A mazon Aurora PostgreSQL Serverless v2 上进行演示 ,并向您展示如何在基准测试运行时监控性能。

解决方案概述

该解决方案提供了跨 亚马逊弹性计算云 (Amazon EC2) 实例运行基准测试的能力,并且可以同时运行多个基准测试。例如,一个基准测试在 Aurora 写入器节点上执行选择、更新、插入和删除。同时,另一个基准测试在 Aurora 读取器节点上执行选择语句。下图说明了这种架构。

Architecture Diagram

  1. CloudFormation 模板部署了 亚马逊云科技 Systems Manager 文档(SSM 文档)。
  2. 创建了定义亚马逊 Linux 2 映像和配置设置的 Amazon EC2 启动模板。实例按标签分为 “读取” 或 “写入” 类别。
  3. 亚马逊 EC2 实例是使用启动模板和亚马逊 EC2 Auto Scaling 组配置的。
  4. 用户通过选择系统管理器文档、使用系统管理器运行命令并指定标签来启动基准测试。
  5. Amazon EC2 实例接收命令,检索数据库密钥,并在规定的时间内在用户的数据库上运行。
  6. Amazon CloudWatch 性能洞察 捕捉了数据库活动。

先决条件

在本演练中,您应该具备以下先决条件:

  • 一个 亚马逊云科技 账户
  • 具有三个@@ 私有子网的亚马逊虚拟私有云 (亚马逊 VPC)
  • 一个 EC2 密钥对
  • A urora PostgreSQL 无服务器 v2 数据库集群 版本 13.7 或更高版本
  • 亚马逊云科技 Secrets Manager 的 秘密
  • EC2 和 RDS 安全组
  • 亚马逊云科技 System s Manager 配置为对您的实例执行操作
  • 可以连接到您的 Aurora 集群的 psql 客户端
  • 熟悉 PostgreSQL、亚马逊 Aurora、亚马逊 VPC、亚马逊 EC2 和 IAM
  • 本文 第 1 部分中定义的 数据库架构

创建数据库架构

为了演示如何根据您的架构和数据访问模式自定义基准测试,我们使用三个表和三个序列而不是默认的 pgbench TPC-B 基准测试。按照 本文 第 1 部分 中的步骤创建数据库架构。

部署解决方案

您可以使用本文中提供的CloudFormation模板来部署解决方案。在此解决方案中,我们在您的账户中创建的资源是:

  • EC2 实例启动模板
  • IAM 实例配置文件
  • EC2 自动扩展组
  • IAM 角色
  • 系统管理器文档(SSM 文档)

选择 L aunch Stack 在美国 东部 1 地区部署 CloudFormation 模板:

Launch Stack Button

或者,你可以手动创建堆栈:

  1. 在 亚马逊云科技 CloudFormation 控制台上,选择 创建堆栈
  2. 输入堆栈的 亚马逊 Simple Storage Servic e (亚马逊 S3)位置:
    
    https://aws-blogs-artifacts-public.s3.amazonaws.com/artifacts/DBBLOG-2592/database_DBBLOG-2592_AutomatedBenchmarkTests_Part_II.yaml 
     
    
  3. 选择 “ 下一步” 。
    输入堆栈名称。记下堆栈名称,稍后在运行 Systems Manager 命令文档时将需要它。Stack Name Field
  4. 提供数据库连接的参数:
    • 数据库名称 — 输入 PostgreSQL 数据库的名称。
    • 数据库密钥 ARN — 输入您用于数据库 的 亚马逊云科技 Secrets Manager 密钥 ARN。主机、端口、用户名和密码是在基准测试运行时从密钥中检索的。
    • 数据库读取器主机端点 -输入数据库读取器端点。这是一个可选参数,如果未提供,则默认为 Secrets Manager 密钥中定义的编写器主机。
      Database Parameters Fields
  5. 提供 EC2 实例启动的参数:
    • EC2 实例类型 — 输入运行基准测试的 EC2 实例类型。默认为 t3.micro。
    • EC2 实例安全密钥名称 — 选择您的 EC2 安全密钥名称。
    • 基准 EC2 实例的安全组 ID — 选择要分配给 EC2 实例的安全组。安全组必须提供 EC2 实例和您的数据库之间的访问权限。
    • 基准 EC2 实例的 subnetID — 选择启动实例的 VPC 中的子网 ID。子网必须有数据库的网络路径。
    • 用于读取的基准实例数 — 在基准测试中生成读取交易的 EC2 实例数量。
    • 用于写入的基准实例数 — 在基准测试中生成写入交易的 EC2 实例数量。
      Launch EC2 Parameters
  6. 提供用于模拟多个客户端读取和写入 PostgreSQL 数据库的 pgbench 参数:与数据库
    • 的客户端连接 数 — 每个 EC2 实例读取器/写入器对 PostgreSQL 数据库的客户端连接数。
    • 每个连接
    • 的线程数 — 每个连接在 PostgreSQL 数据库上运行的线程数。
    • 基准测试持续时间 -基准测试的运行时长,以秒为单位。
      Benchmark EC2 Configuration Fields
  7. 指定所有参数后,选择 Nex t 继续。
  8. 在 “ 配置堆栈选项 ” 页面上,选择 “ 下一步 ” 继续。
  9. 审核 页面上,选择 我承认 亚马逊云科技 CloudFormation 可能会创建 IAM 资源, 然后选择 提交。
    CloudFormation Acknowledgement在 亚马逊云科技 CloudFormation 事件 选项卡上,等待大约 5 分钟,直到看到 C REATE _COMPLETE 状态。正确的事件是逻辑 ID 与 CloudFormation 模板名称相匹配的事件。CloudFormation Events List
  10. 在 亚马逊云科技 CloudFormation 的 输出 选项卡上,您可以查看运行基准测试时使用的标签。
    CloudFormation Outputs

运行基准测试

使用 CloudFormation 模板部署资源后,您将拥有两个 EC2 Auto Scaling 组,一个用于读取,一个用于写入,每个组有一个 EC2 实例。EC2 实例预先配置了脚本和相应的参数,可以使用 pgbench 运行基准测试。

要运行这些命令,请使用系统管理器命令功能。此功能允许您使用命令文档对目标 EC2 实例运行命令。系统管理器文档(SSM 文档)定义了系统管理器对您的托管实例执行的操作。

在早期步骤中用于部署资源的 CloudFormation 模板部署了一个 SSM 文档,其中包含的操作包括 pgbench 命令和 CloudFormation 堆栈部署期间提供的参数。我们使用 SSM 文档在目标 Aurora PostgreSQL 数据库上运行基准测试。

要运行基准测试,请完成以下步骤:

  1. 在 Systems Manager 控制台上, 在导航窗格的 “ 共享资源” 下,选择 “ 文档” 。
    Shared Resources > Documents
  2. 选择 “我 所有”,按所有者筛选结果 。
    Systems Manager Documents Owned By Me
  3. 堆栈名称将添加到命令文档名称的末尾。选择 SSM 文档超链接 postgreSQLBenchmarkCommanddocumnedBlog-Sample 。
    Command Document Selection
  4. 在 “ 内容 ” 选项卡上查看命令文档的详细信息。
    Review Command Document
  5. 选择 “ 运行命令” 。
    Run Command Document
  6. SSM 文档将时长、连接和线程默认设置为您在启动 CloudFormation 模板时指定的值。在运行 SSM 文档之前,您可以更改这些值。
    Command Parameters
  7. 对于 目标选择 ,选择 指定实例标签

实例标签用于选择要在其上运行 SSM 命令文档的实例。标签用于标识 EC2 实例的 读取 写入 组。我们添加了标签 b enchmark-{堆栈名称} 和以下值:

  • 读取 — 具有此标签值的 EC2 实例使用 SQL 选择语句运行 pgbench 命令。
  • 写入 — 具有此标签值的 EC2 实例使用插入、删除和更新 SQL 语句运行 pgbench。
  1. 输入标签键 基准-{堆栈名称} 读取值 ,然后选择 添加
    我们在这篇文章中使用了 基准博客样本。
    Target Selection
  2. 添加第二个实例标签密钥作为 基准测试博客样本,写入值。
    Second Target Selection
  3. 添加实例标签后,向下滚动到页面末尾并选择 Run
  4. 现在,您有一组发送读取流量的 EC2 实例和另一组发送写入流量的实例。
    Command Running
  5. 基准测试完成 后,状态更改为 “ 成功”。
    Command Successful
  6. 选择实例 ID 以查看基准测试脚本的输出。
    Script Output

故障排除

如果您的 EC2 实例未出现在系统管理器控制台的托管实例下:

  • 对于私有子网,您的实例必须能够使用 NAT 网关访问互联网,或者您可以配置 VPC 终端节点以访问 Systems Manager。
  • 检查您的安全组是否提供了 EC2 实例和数据库之间的访问权限。
  • 检查分配给您的 VPC 私有子网的 NACL 允许网络流量。
  • 查看 亚马逊云科技 Systems Manager 快速设置 文档。
  • 如 需更多帮助,请参阅 https://repost.aws/knowledge-center/systems-manager-ec2-instance-not-appear

命令状态 不 是 “ 成功” 时,你需要对错误进行故障排除 。以下是常见错误,可以帮助解决:

  • 访问被拒绝 — 启动命令的 亚马逊云科技 身份和访问管理 (IAM) 用户或角色无权访问 EC2 实例。检查 分配给该角色 的 权限
  • 失败 -基准测试脚本报告了一个错误。查看基准测试脚本输出以了解有关错误的详细信息。
    • 连接超时 -验证您选择了正确的子网,并且安全组提供了 EC2 实例和数据库之间的访问权限。 有关解决连接问题的帮助,请参阅 https://aws.amazon.com/premiumsupport/knowledge-center/rds-cannot-connect/ ...
    • 服务器名称未知 SQL 错误 -验证 Secrets Manager 密钥的用户名、密码、主机和端口的密钥/值是否正确。
    • 权限被拒绝 SQL 错误 -验证在 Secrets Manager 密钥中定义的数据库用户名是否具有对数据库表的读取、写入和删除权限,以及使用序列的权限。
    • 关系不存在 SQL 错误 — 验证您是根据 本文 第 1 部分 创建架构的 。检查您在 CloudFormation 参数数据库名称中提供的数据库名称是否正确。

监控

在进行基准测试时,有多种工具可用于 监控 数据库,包括 亚马逊 RDS 性能洞察、亚马逊 RDS 增强监控 、 亚马逊 RD S 数据库日志 CloudWatch

要获得详细的监控和日志记录,您可以启用增强监控并将 PostgreSQL 日志导出到 CloudWatch。使用这些设置,您可以从一个地方搜索、创建警报和所有数据库日志的统一详细视图。将日志导出到 CloudWatch 可确保您的日志存储在高度耐用的存储空间中。要了解更多信息,请参阅 增强监控 概述 以及将 Aurora PostgreSQL 日志 发布到亚马逊 CloudWatch Logs。

在以下屏幕截图中,您将看到运行此基准测试期间的监控示例。它基于 Aurora Serverless v2,具有一个写入器和一个读取器,两者的配置均为 1-16 个 Aurora 计算单元 ( ACU)。

与 ACU 相关的指标仅适用于 Aurora 无服务器。如果你使用非无服务器数据库关注这篇文章,你将看不到 ACU 指标。

要启用增强监控,请在数据库配置中选择 启用增强监控

Additional Configuration > Enhanced Monitoring

Enhanced Monitoring Settings

要启用日志导出,请在数据库配置 中的日志导出 下选择 PostgreSQL 志。

Database Log Exports Selection

借助 Performance Insights,你可以以图形形式看到开箱即用的各种指标,例如 db.transactions. xact_commit.avg 和 d b.transactions.actions.avg,它们可以表明数据库的负载正在增加。

性能见解:

Performance Insights Graph Example

可以在创建数据库时启用此功能,也可以在以后在配置中启用此功能。有关更多信息,请参阅开启 和 关闭性能洞察

Performance Insights Enablement Selection

要了解有关绩效洞察及其指标的更多信息,请参阅绩 效洞察仪表板 概述 和 绩 效洞察计数器指标

捕获数据库负载的另一种方法是使用 CloudWatch。您可以查看自定义指标,这有助于可视化您的数据库正在使用的 ACU 数量。 ServerlessDatabaseCapacity 指标显示了 ACU 数量的使用情况。

Database Usage Graph in ACUs

另一个需要考虑的指标是 Acu Ulisitation ,它以百分比形式显示 ACU 利用率与数据库的最大预配置 ACU 的比率。这有助于对无服务器数据库进行基准测试和调整其规模。此外,您可以根据这些指标配置警报。有关更多信息,请参阅 基于静态阈值 创建 CloudWatch 警报

Alarm Creation Window Based On Metrics

有关通过 亚马逊云科技 命令行接口 (亚马逊云科技 CLI) 进行监控的信息或有关本文中列出的指标的更多详细信息,请参阅 A urora Serverless v2 的重要亚马逊 CloudWatch 指标

清理

为避免将来产生费用,请删除您在关注这篇文章时创建的资源。从 CloudFormation 控制台 中选择您的堆栈,然后选择删除。

CloudFormation Rollback And Deletion Selection

堆栈删除完成后,堆栈状态更改为 DELETE_COMPLETE ,并删除 CloudFormation 模板创建的资源。

如果您为这篇文章创建了先决条件,则还需要将其删除。

结论

在这篇文章中,我们提供了一种使用 亚马逊云科技 CloudFormation和系统管理器在A mazon Aurora PostgreSQL Serverless v2 上自动化和扩展数据库基准测试的解决方案。该解决方案使您可以跨多个 EC2 实例扩展基准测试,并让一组不同的 SQL 语句同时运行。

在针对数据库运行基准测试时,重要的是要 优化成本 遵循最佳实践 并创建与您的工作负载数据访问模式相匹配的相关基准。我们鼓励您尝试和修改 CloudFormation 模板以满足您的基准测试需求。


作者简介

Andrew Bio Picture 安德鲁·洛 夫是 亚马逊云科技 的高级数据实验室解决方案架构师。他热衷于帮助客户构建架构良好的解决方案,以满足他们的业务需求。他喜欢与家人共度时光、下好棋、做家居装修项目和编写代码。

Andre Bio Picture 安德烈·哈斯 是 亚马逊云科技 的高级数据实验室解决方案架构师。他在数据库和数据分析领域拥有20多年的经验。安德烈喜欢在周末或有机会的时候与家人一起露营、徒步旅行和探索新地方。他还喜欢科技和电子产品。

Mike Bio Picture Mike Park s 是一位高级解决方案架构师,专长于 亚马逊云科技 的数据库。他在企业 IT 行业拥有超过 15 年的经验,在他的职业生涯中参与过多次数据库工作。他喜欢为客户解决问题并帮助他们成功完成使命。在业余时间,他喜欢跑步和户外活动。