PostgreSQL
如何在 RDS 上配置 PostgreSQL 数据库
简介
Amazon Web Service 的关系型数据库服务 (RDS) 因其灵活性和强大的功能集而成为数据库托管的热门选择。开发团队可以为个人使用、暂存环境和生产工作负载预置新数据库,并将其与 AWS 的其他产品套件无缝集成。
在本指南中,我们将讨论如何使用 Amazon 的 RDS 配置一个生产级别的 PostgreSQL 数据库。我们将详细介绍创建过程中的重要选项,讨论权衡利弊,并配置一个专为早期生产部署设计的可靠、强大的数据库设置。
为什么选择 Amazon Web Service 的 RDS?
在开始之前,让我们简要谈谈为什么 AWS 的关系型数据库服务可能非常适合许多团队。
RDS 作为一项服务于 2009 年首次发布,是适用于 MySQL 数据库的可配置、托管服务。PostgreSQL 支持于 2013 年添加,这使得该平台有充足的时间在新功能发布和新用例出现时稳定和成熟。
使 RDS 成为有吸引力的选择的一些核心功能包括:
- 部署到不同的物理位置(多可用区):在物理上不同的数据中心创建活动或备用副本,以在发生基于位置的中断时提高可用性和可靠性。
- 与 AWS IAM 安全模型集成:利用现有的访问控制和身份功能来配置数据库和客户端应用程序之间的身份验证、授权和基于角色的访问策略。
- 可配置的备份、加密和监控:使用平台集成的备份、可观察性工具和加密来缩减和集中维护数据库的运营成本。
- 基于使用量的成本:成本直接与数据库的功能和使用量挂钩,减轻了长期容量规划的不确定性。
考虑到这些优势,让我们开始设置一个 PostgreSQL 数据库实例来逐步完成该过程。
开始数据库创建过程
首先,使用您的 AWS 凭证登录到您的Amazon Web Services 控制台。如果您尚未注册 AWS,现在可以通过遵循其注册过程进行注册。
在 AWS 控制台主页上,在服务搜索栏中输入 rds 以找到 RDS 服务。
点击服务下的RDS,进入 Amazon RDS 主页。
向下滚动直到您看到创建数据库部分,然后点击创建数据库。
您将被带到数据库创建页面,您可以在其中选择所需的配置。
我们将在本指南的其余部分介绍各种可用选项,并为生产级配置提供建议。
配置标准 PostgreSQL 部署选项
RDS 创建过程的第一部分决定了您如何配置数据库,以及新数据库的基本属性,例如数据库引擎、部署类型和基本配置。让我们开始吧。
配置创建方法
在 RDS 上预置新数据库的第一步是选择创建方法。
虽然快速创建方法可以帮助您选择一些合理的默认值,但它无法提供您在为环境配置重要数据库时可能需要的灵活性。标准创建选项提供了更多选项,并且仍然是一个相对较短的过程。
选择标准创建,以便您可以完全控制创建过程。
选择 PostgreSQL 引擎和版本
接下来,选择数据库引擎。
对于本指南,我们将配置 PostgreSQL 数据库,因此我们将选择PostgreSQL选项。Amazon 的 Aurora 是一个替代的 PostgreSQL 兼容选项,它提供了 Amazon 自己的扩展和管理功能。然而,在本指南中,我们将重点介绍 PostgreSQL 本机部署。
选择您希望使用的 PostgreSQL 版本。默认选择的版本通常是安全的选择,但您也可以选择最新版本以获取新功能,或选择旧版本,具体取决于与您的应用程序库的兼容性。
选择生产模板
接下来,系统将要求您选择一个模板。
模板旨在提供与典型部署场景匹配的预选选项。由于我们正在预置生产数据库,因此请选择生产模板。
设置数据库可用性
下一部分包括您需要就部署做出的第一个主要决定:数据库的可用性和持久性。
此部分精确地决定了您的数据库将如何在 AWS 环境中部署。这会影响您的设置对故障和中断的抵抗力,包括您的特定实例和 Amazon 基础设施中区域中断。
让我们看看我们可用的各种选项、它们提供什么以及它们适用于哪些场景。对于本指南,我们将推荐单个数据库实例,因此如果您对其他选项不感兴趣,请随意跳过。
多可用区数据库集群
最安全、最健壮且最昂贵的选项是多可用区数据库集群。
这配置了一个 PostgreSQL 集群,由一个主数据库实例和两个只读备用副本组成,每个副本部署到不同的物理位置。此选项有助于防止在发生故障时数据库中断,同时通过副本增加可用的读取吞吐量。
话虽如此,此选项也非常昂贵,因为您必须支付部署到不同可用区的三个独立数据库实例的费用。
如果您的数据库停机时间直接导致收入的显著损失,这可能是一个不错的选择。如果您的典型数据库使用模式是读取密集型的,那么读取 IO 的增加也值得注意。如果这符合您的用例,您可能还需要考虑评估 Amazon Aurora,以获得类似级别的可用性,最终可能成本更低。
多可用区数据库实例
此选项将您的数据库部署为一个活动的,主实例,以及一个在不同可用区中的备用副本。备用副本将保持最新状态,以便在主实例发生中断时,可以触发故障转移,并且备用副本可以承担主实例的职责。
与上面讨论的多可用区数据库集群相比,多可用区数据库实例只有一个备用副本。此外,备用副本只能用于其备用容量。它不支持只读工作负载。
如果您希望获得一定的可用性保护,而无需更大的读取吞吐量,那么此选项是一个不错的选择。您将不得不考虑两个数据库实例的成本,因此价格将高于单个实例。如果停机时间对您的运营来说极其昂贵,这可能是一个不错的选择,可以防止在发生中断时出现可用性中断。
单个数据库实例
单个数据库实例是在一个可用区内单个数据库的标准部署。这不提供额外的可用性,这意味着您的数据库的可用性直接与数据库实例的正常运行时间相关联。如果它出现问题,您的数据库及其管理的所有数据将无法访问,直到服务恢复。
考虑到这一点,此选项也是最便宜的。部署由单个实例组成,因此不会部署您需要额外付费的资源。
此选项存在一定程度的风险,但对于许多用例而言,风险是可以接受的,而减轻风险的成本过高。Amazon RDS 在可靠性方面有着良好的记录,即使在单个可用区内也是如此,因此对于许多用例而言,短时间的停机是可接受的。
对于本指南,我们将选择单个数据库实例,因为它通常足以满足对停机时间不那么敏感的生产部署。但是,如果您的收入和声誉与数据库的正常运行时间密切相关,那么明智的做法是考虑不同的选择。
配置基本设置
下一部分允许您配置部署的基本设置。
首先,您可以通过设置数据库实例标识符来命名您的数据库实例。选择一个独特的名称,这将有助于您在 AWS 控制台中显示时了解数据库的作用和目的。
接下来,配置数据库实例的凭据。首先设置 PostgreSQL 数据库的主用户名。默认情况下,大多数 PostgreSQL 客户端工具假定主用户名为postgres,因此如果合适,您可以保留该用户名。
注意:主用户名是 PostgreSQL 数据库实例中的主要管理帐户。在预置数据库实例后,您应该始终创建并配置具有有限权限的额外应用程序专用用户名。将您的数据库客户端和应用程序配置为使用这些权限较低的身份进行日常操作。仅将主用户名用于初始配置和创建更有限、更窄范围的访问途径。
然后,您可以选择为主用户名设置并确认密码。您可以为帐户选择一个强大且最好是机器生成的密码,或者您可以选中自动生成密码框,让 AWS 自动为您生成一个安全密码。
如果您选择自己的密码,请将其妥善保存,因为您以后将无法找回。同样,如果您自动生成密码,您将只能在创建后第一次在 AWS 控制台中访问凭证时访问该密码。请务必安全记录密码,因为您以后将无法再次找回。
选择数据库实例类
您需要做出的下一个主要决定是您的数据库实例类。
本质上,数据库的实例类决定了您的数据库将部署到的虚拟机的大小以及可用的资源。对于您想要选择的实例类型以及每种类型中的资源组合,您有几种不同的选项。
实例类的三大类别是:
- 标准型:这些包括您可能从 AWS 的 EC2(弹性计算云)实例中熟悉的“m”类。基本上,这些是平衡良好、通用型实例,旨在具有合理的 CPU 与内存比。
- 内存优化型:这些包括 EC2 的“r”和“x”实例类。此类别中的实例具有更高的内存与 CPU 比,这对于涉及一次将大型数据集加载到内存中的数据库操作非常有用。
- 可突增型:这些实例通常性能比其他实例低一些,但对于许多应用程序来说仍然可以占据一个最佳位置。它们提供较低的基线 CPU 性能,但允许在高峰期爆发更高的性能。这使您可以为较低的平均使用量付费,同时仍能偶尔处理额外的负载。
您选择的实例类以及所需的具体资源配置高度依赖于您的应用程序的使用模式。但是,我们可以提供一些通用指导来帮助您做出选择。请记住,如果您的需求发生变化,您可以在以后随时扩展您的数据库。
选择数据库实例类的通用建议
一般来说,对于大多数关系型数据库工作负载,RAM 往往比 CPU 更重要。因此,您不应该因为担心性能低下而完全排除可突增类。它们提供了一些最佳价值,同时仍能提供合理的性能。
具体来说,像db.t3.medium这样的实例,提供 2 个 vCPU 和 4 GiB RAM,对于许多刚开始的用例来说是一个很好的基线选择。CPU 应该能够处理中等水平的活动,同时应对请求高峰。假设硬件性能适合您的项目,您可能遇到的第一个限制是 2,086 Mbps 的网络上限,因此在您做出决定时请记住这一点。
如果您的标准数据库具有大量流量,并且您想要更高水平的 CPU 性能,您可能需要考虑具有 2-4 个 vCPU 和 8-16 GiB RAM 的标准类实例。m6g实例的性价比比旧的m5实例高 40%,因此在考虑标准实例时,它们通常是更好的选择。考虑到这一点,db.m6g.large和db.m6g.xlarge实例是此类实例类型的良好起始选择。
内存优化数据库实例主要在您知道需要将大型数据集加载到内存中时才有用。这可能是因为您的表包含许多记录,或者因为您经常查询大量列。如果您大量使用 PostgreSQL 的 JSON 列,这可能是一个值得考虑的因素。话虽如此,通常最好从更标准的配置开始,如果发现这些资源不足,则更改实例类。
配置存储选项
接下来,您需要为数据库实例配置存储。
选择存储类型
RDS 提供三种不同类型的存储,适用于不同的场景。
- 通用型 SSD (gp2):这是一种标准的固态硬盘选择。您的存储设备可用的 IOPS(每秒输入/输出操作数)直接与您分配的空间大小相关。基线 IOPS 设置为每分配 1 GiB 3 IOPS,并能够在短时间内突增到 3,000 IOPS。
- 预置 IOPS SSD (io1):此选项允许您将存储空间量与分配给数据库的 IOPS 分开。
- 磁性存储:磁性存储使用传统的旋转磁盘而不是 SSD。
通常,几乎总是最好从通用型 SSD选项开始。这允许您设置所需的空间量并将数据库部署到 SSD。磁性选项很少是一个好的选择,因为它速度较慢且仅限于 1000 IOPS。
如果您的应用程序配置文件非常健壮,并且对您的环境在各种工作负载下产生的 IOPS 量有很好的了解,那么预置 IOPS SSD 是一个不错的选择。由于缓存和其他机制可以降低实际到达驱动器的操作量,这通常也比预期的要低。一般来说,将其视为一个高级选择,一旦您随着时间的推移运行确切的配置,它可能就会变得合适。
选择初始存储空间
选择存储类型后,选择要分配的存储量。这也高度依赖于您的应用程序。然而,一般来说,人们倾向于高估他们最初所需的空间量。从低开始,记住您总是可以扩展。
配置自动扩缩
接下来,选择是否启用自动扩缩。此选项允许您的存储空间随着使用量自动扩缩。这通常是一个好主意,因为它允许您以更实惠的价格从较小的初始分配开始,然后随着数据量的增加自动增加存储空间。您可以配置最大扩缩量,以确保您不会超出您能够承受的扩缩范围。
一般来说,通常从 20 到 100 GiB 作为初始分配(通常取决于提供足够 IOPS 的量)开始就足够了,然后将最大存储阈值设置为您愿意支付的最大大小。
决定连接策略
配置存储后,您需要做出的下一个主要决定是关于数据库的连接性。
本节包含许多不同的选项,如果您不熟悉 AWS 的安全和网络模型,这些选项可能会令人困惑。
我们在此处为生产适用的部署推荐的通用策略是创建每个可用选项的新实例,而不是重用现有选项。如果您将数据库部署到应用程序已运行的现有环境中,您可能需要调整此策略,但通用规则为新部署提供了最隔离和最安全的方法。
配置 VPC
当被要求选择部署数据库的虚拟私有云 (VPC) 时,通常最好将其部署到新的 VPC 或包含将访问它的应用程序的 VPC。通常不建议部署到默认 VPC,因为这意味着您的数据库将受您对默认网络环境所做的任何调整的影响。
选择子网组
接下来,您需要选择子网组。这定义了 VPC 中数据库可能部署的 IP 范围。通常,在这里创建一个新组也是一个好主意。
决定是否允许公共访问
您必须做出的最重要的选择之一是是否允许公共访问您的数据库实例。这主要取决于您的安全要求以及您配置对数据库的特殊访问的能力。
最安全的方法是关闭公共访问。这将只允许您的数据库被部署在与数据库相同的网络环境中的实例访问(或通过这些实例访问)。要从外部访问您的数据库,您需要配置一个跳板主机或一个具有外部访问权限的Internet 网关来认证和路由外部连接到您的数据库。如果您不熟悉配置基础设施或管理网络规则,这可能是一项艰巨的任务。
另一种方法是允许公共访问。这将使您的数据库实例可以从公共互联网访问。它的安全性较低,因为任何人都可以尝试连接到您的数据库,但它允许从外部连接进行更简单的访问模型。如果您选择此选项,请确保您的所有数据库密码都非常强大且经常轮换。您可能会在日志中看到外部尝试访问您的服务,因此密码强度至关重要。
是否启用公共访问的选择比最初看起来更复杂。如果您启用公共访问,您仍然可以将访问权限限制为一组特定的外部 IP 地址,并提供其他配置点来过滤掉非法连接尝试。总的来说,最好选择您长期能够支持的最安全配置。
选择 VPC 安全组
VPC 安全组控制用于连接部署在其中的实例的访问规则。这些基本上是防火墙式的访问控制策略,有助于限制可以对数据库实例进行的连接类型。
创建一个新的 VPC 安全组,除非您已经为生产数据库目的配置了一个。选择一个名称,当在 AWS 控制台中显示时,该名称将帮助您记住安全组的重点和作用。
选择可用区和端口
您可以选择当前区域内的可用区,您希望将数据库实例部署到该可用区。如果您没有偏好,请随意选择“无偏好”。
如果您打开“附加配置”选项,您可以选择更改 PostgreSQL 将监听的端口。更改此选项可以帮助减轻开放实例连接日志中的一些噪音,但它不提供任何显著的安全改进,并且可能使连接更加繁琐。
设置数据库认证
接下来,您需要选择要用于数据库实例的身份验证类型。
选项包括:
- 密码认证:使用 PostgreSQL 本机功能的标准密码认证。
- 密码和 IAM 数据库认证:同时使用 PostgreSQL 的本机密码功能和AWS IAM 角色进行认证。作为使用数据库密码的替代方案,您可以使用 IAM 认证令牌对数据库实例进行认证。
- 密码和 Kerberos 认证:同时使用 PostgreSQL 的本机密码功能和使用AWS Directory Service创建的 AWS 托管 Microsoft Active Directory 实例。如果您的组织已经使用 AWS 托管的 AD 实例,这允许您通过票证使用 Kerberos 式认证。
一般来说,除非您需要更复杂的配置,否则只使用密码身份验证是合理的。如果您大量投资于 AWS 生态系统以及基础设施的许多其他部分的基于 IAM 的身份验证,那么 IAM 数据库选项可能具有吸引力。除非您已经将 Kerberos 用于其他目的,否则不值得选择 Kerberos 选项。
配置备份、加密、监控等
如果您展开附加配置部分,您有机会配置一些附加选项。我们将在本节中介绍这些选项。
数据库选项
第一个附加部分允许您配置 PostgreSQL 的一些附加选项。
如果您愿意,您可以选择让 RDS 自动为您的部署创建一个初始数据库。这通常是不必要的,因为您运行的任何迁移或其他设置脚本通常都会在实例中创建必要的数据库结构。
您有时还可以为您的实例选择一个数据库参数组。根据您之前所做的选择以及您是否在创建过程之外配置了参数组,这里可能无法进行多项选择。如果存在,它们允许您更改应用于此实例的 PostgreSQL 参数。
PostgreSQL 不支持选项组,因此该下拉菜单将不会处于活动状态。
备份
接下来您可以配置与自动数据库备份相关的选项。
如果您想启用自动备份,请选中启用自动备份框。这将告诉 AWS 自动为您的数据库实例每日进行时间点快照,您可以使用这些快照进行恢复。值得注意的是,虽然此页面未提及,但备份将存储在 AWS 的简单存储服务 (S3) 中,您将需要为它们占用的空间付费。
默认情况下,备份的保留窗口设置为 7 天,这意味着您将能够恢复过去 7 天内拍摄的数据库快照。如果您正在使用此功能,您可能希望将保留期增加到 14 天,以便给自己更多时间来捕获不需要的更改。但是请记住,增加保留期将导致额外的存储成本。
如果您对备份发生的时间有任何偏好,可以选择一个合适的时间窗口,否则,保留“无偏好”是安全的。
保持“将标签复制到快照”选中状态,以便更轻松地在 S3 中找到适当的快照。
如果您需要额外保护,您还可以选择备份复制以自动将更改复制到不同的 AWS 区域。这将允许您从不同区域快速恢复,但会增加您的 S3 存储成本和数据传输成本。
加密
接下来,您可以配置数据库实例的磁盘上加密。
几乎总是建议为您的实例启用加密以增加安全性。
一般来说,您可以使用默认的 AWS KMS 密钥,除非您有额外的要求,例如加密到由其他 AWS 账户使用的密钥。
性能分析
接下来,配置您的实例的性能分析。
性能分析是一项功能,可帮助您调试 RDS 实例中的性能问题。默认情况下,分析数据将免费保留 7 天。您可以选择长期存储 2 年,具体取决于您的 CPU 实例类型,需要额外费用。
同样,除非您有特殊要求,否则可以保持选中默认的 AWS KMS 密钥进行加密。
监控和日志
接下来,您可以配置数据库的监控和日志。
一般来说,启用监控有助于您更好地了解数据库实例及其性能。
至于导出日志,除非您需要,否则默认禁用通常是安全的。您的应用程序日志通常会根据需要显示特定于数据库的信息,但如果您觉得有用,您也可以随时启用 PostgreSQL 日志导出。日志将导出到AWS CloudWatch Logs。
维护和删除保护
维护和删除保护部分完成了附加配置。
通常认为自动升级 PostgreSQL 的次要版本是安全的。次要版本不应包含破坏性更改,并且升级应相对无缝地执行。如果您有偏好,请选择一个升级窗口。
为生产数据库启用删除保护始终是一个好主意。这可以防止您意外删除数据库实例,因为它要求您在成功处理删除之前恢复此选项。对于大多数用例而言,没有合理的原因选择不使用此选项。
完成
我们终于完成了配置过程。在页面底部,您可以看到您配置的数据库实例的每月成本估算。
请特别注意估算下方的文字,它重申所显示的成本计算不包括备份存储、I/O 或数据传输的成本。这些额外成本如果没有考虑和限制,可能会非常可观,因此请确保您在继续之前对额外收费感到满意。
准备好后,点击页面底部的创建数据库。
您的数据库实例将根据您的配置进行预置。这可能需要几分钟才能完成,具体取决于您选择的实例大小和启用的选项。
当您的实例准备就绪时,它将显示在 RDS 控制面板的数据库部分中。
查看自动生成的密码
如果您配置了 AWS 自动生成密码,您将在屏幕顶部看到如下通知:
点击查看凭证详情以查看密码。
请注意,这是您唯一一次可以访问此密码,如果您丢失了它,您将不得不重新生成。
查看其他连接信息
对于其余的连接信息,请点击实例名称。
在连接和安全选项卡中,您可以在左侧找到数据库的端点和端口号。
在此示例中,我们的端点名称(主机 URL)是production-db1.cddm7tgh3j5j.us-east-1.rds.amazonaws.com,我们的数据库正在监听 PostgreSQL 的标准端口:5432。
要查找您配置的主用户名(如果您未修改,则为postgres),请访问配置选项卡,并在可用性标题下查找主用户名字段。
如果您配置了初始数据库,您也可以在此选项卡的左侧找到其名称。
有了这些信息,您就可以连接到您的 PostgreSQL 实例。例如,要连接到此处显示的实例,您可以使用以下连接 URI:
postgresql://postgres:Pa38iSJWm8qtq90LnmZ8@production-db1.cddm7tgh3j5j.us-east-1.rds.amazonaws.com:5432/postgres
您可以从我们的PostgreSQL 连接 URI指南中了解如何从连接详细信息构造连接 URI。
结论
在本指南中,我们介绍了如何使用 Amazon 的 RDS 托管数据库服务创建生产级 PostgreSQL 数据库实例。尽管有很多选项可供探索,并且您的选择将根据您的项目和环境需求而有所不同,但我们尝试在此处提供一个合理的起点,并提供足够的信息供您做出明智的决策。
随着您的需求变化,请记住您可以扩展您的数据库实例以适应您的新使用模式。使用您从监控信息和扩展日志中收集的数据来决定您的数据库需求如何演变。
在 Amazon RDS 上配置好 PostgreSQL 实例后,您可以使用 Prisma Client 连接和管理它。通过在 PostgreSQL 数据库连接器 设置中将 url 参数设置为指向您的 RDS 实例来配置对数据库实例的访问。


























