VPC 中的 DocumentDB 集群 - Amazon DocumentDB

VPC 中的 DocumentDB 集群

您的 Amazon DocumentDB 集群位于虚拟私有云(VPC)中。VPC 是一个虚拟网络,在逻辑上与 AWS 架构 中的其他虚拟网络相互隔离。借助 Amazon VPC,您能够将 AWS 资源(例如,Amazon DocumentDB 集群或 Amazon EC2 实例)启动到 VPC 中。VPC 可以是您的账户附带的默认 VPC,也可以是您创建的 VPC。所有 VPC 均与您的 AWS 账户关联。

默认 VPC 具有可用来隔离 VPC 内资源的三个子网。默认 VPC 还具有一个互联网网关,可用来从 VPC 外部访问 VPC 内部的资源。

有关涉及 VPC 内外的 Amazon DocumentDB 集群的场景,请参阅 访问 VPC 中的 Amazon DocumentDB 集群

使用 VPC 中的集群

下面是有关使用 VPC 中的集群的一些提示:

  • 您的 VPC 必须至少有两个子网。这些子网必须位于要部署集群的 AWS 区域 中的两个不同的可用区。子网是 VPC 的 IP 地址范围段,您可以指定子网,利用子网并根据安全和操作需要对集群进行分组。

  • 如果要让 VPC 中的集群实现公开访问,请确保开启 VPC 属性 DNS hostnamesDNS resolution

  • 您的 VPC 必须具有您创建的子网组。您可通过指定创建的子网来创建子网组。Amazon DocumentDB 选择子网及该子网组中的 IP 地址,以与集群中的主实例关联。主实例使用包含该子网的可用区。

  • 您的 VPC 必须具有允许访问集群的 VPC 安全组。

    有关更多信息,请参阅 访问 VPC 中的 Amazon DocumentDB 集群

  • 每个子网必须包含足够大的 CIDR 数据块,以便在维护活动(包括失效转移和扩展计算)期间有可供 Amazon DocumentDB 使用的备用 IP 地址。例如,诸如 10.0.0.1.0/24 和 10.0.1.0/24 的范围通常足够大。

  • VPC 可以具有 instance tenancy 属性值 defaultdedicated。所有默认 VPC 的 instance tenancy 属性设置为“default”,则默认的 VPC 可以支持任何实例类。

    如果您选择将集群放在 instance tenancy 属性设置为 dedicated 的专用 VPC 中,则集群的实例类必须是已批准的 Amazon EC2 专用实例类型之一。例如,r5.large EC2 专用实例对应于 db.r5.large 实例类。有关 VPC 中实例租赁的信息,请参阅《Amazon Elastic Compute Cloud 用户指南》中的 Amazon EC2 实例

    有关可位于专用实例中的实例类型的更多信息,请参阅 Amazon EC2 定价页上的 Amazon EC2 专用实例

    注意

    当您为集群将 instance tenancy 属性设置为 dedicated 时,不能保证集群将在专属主机上运行。

使用子网组

子网是您指定的用来根据安全和操作需要对资源进行分组的 VPC 的 IP 地址范围段。子网组是您在 VPC 中创建并随后指定给集群的子网(通常为私有子网)的集合。通过使用子网组,您可以在使用 AWS CLI 或 Amazon DocumentDB API 创建集群时指定特定的 VPC。如果您使用控制台,则可以选择要使用的 VPC 和子网组。

每个子网组应包含给定 AWS 区域 中至少两个可用区的子网。在 VPC 中创建集群时,为其选择子网组。对于子网组,Amazon DocumentDB 选择子网及该子网中的 IP 地址,以与集群中的主实例关联。数据库使用包含该子网的可用区。DocumentDB 始终从具有可用 IP 地址空间的子网中分配 IP 地址。

子网组中的子网可以是公有子网或私有子网,这取决于您为网络访问控制列表(网络 ACL)和路由表设置的配置。对于希望可公开访问的集群,其子网组中的所有子网必须均为公有子网。如果与可公开访问的集群关联的子网从公有更改为私有,则可能会影响集群的可用性。

要创建支持双堆栈模式的子网组,请确保添加到该子网组的每个子网都有一个与之关联的互联网协议版本 6(IPv6)CIDR 数据块。有关更多信息,请参阅《Amazon Virtual Private Cloud 用户指南》中的 Amazon DocumentDB IP 寻址VPC 的 IPv6 支持

当 Amazon DocumentDB 在 VPC 中创建集群时,使用子网组中的 IP 地址将网络接口分配给集群。但是,我们强烈建议您使用域名系统(DNS)名称来连接到集群。之所以建议这样做,是因为底层 IP 地址在失效转移期间会发生变化。

注意

对于在 VPC 中运行的每个集群,请确保子网组的每个子网中预留至少一个地址,以供 Amazon DocumentDB 用来执行恢复操作。

共享子网

您可以在共享 VPC 中创建集群。

使用共享 VPC 时需要记住的一些注意事项:

  • 您可以将集群从共享 VPC 子网移动到非共享 VPC 子网,反之亦然。

  • 共享 VPC 中的参与者必须在 VPC 中创建安全组,才能允许他们创建集群。

  • 共享 VPC 中的拥有者和参与者可以使用 DocumentDB 查询访问数据库。但是,只有资源的创建者才能对该资源进行任何 API 调用。

Amazon DocumentDB IP 寻址

IP 地址使 VPC 中的资源能够相互通信以及与 Internet 上的资源进行通信。Amazon DocumentDB 同时支持 IPv4 和 IPv6 寻址协议。默认情况下,Amazon DocumentDB 和 Amazon VPC 使用 IPv4 寻址协议。您无法关闭这种行为。创建 VPC 时,请确保指定 IPv4 CIDR 块 (一系列私有 IPv4 地址)。您可以选择将 IPv6 CIDR 数据块分配给您的 VPC 和子网,并将来自该数据块的 IPv6 地址分配给子网中的集群。

注意

双堆栈模式(IPv6 寻址)仅在 Amazon DocumentDB 版本 4.0 和 5.0 中受支持。

对 IPv6 协议的支持扩展了支持的 IP 地址数量。通过使用 IPv6 协议,您可以确保有足够的可用地址来应对 Internet 的未来发展。新的和现有的 DocumentDB 资源可以在 VPC 内使用 IPv4 和 IPv6 地址。在应用程序不同部分使用的两个协议之间配置、保护和转换网络流量可能会产生运营开销。您可以对 Amazon DocumentDB 资源的 IPv6 协议进行标准化,以简化网络配置。

IPv4 地址

创建 VPC 时,您必须以 CIDR 块(如 10.0.0.0/16)的形式为 VPC 指定一个 IPv4 地址范围。子网组定义此 CIDR 数据块中可供集群使用的 IP 地址范围。这些 IP 地址可以是私有地址,也可以是公有地址。

私有 IPv4 地址是指无法通过 Internet 访问的 IP 地址。您可以使用私有 IPv4 地址在同一 VPC 中的集群和其他资源(如 Amazon EC2 实例)之间进行通信。每个集群都有一个用于在 VPC 中通信的私有 IP 地址。

公有 IP 地址是指可通过 Internet 访问的 IPv4 地址。您的 DocumentDB 集群不允许使用公有 IP 寻址。任何公有 IP 地址都应通过互联网网关和公有子网中的 EC2 进行解析。

要了解如何创建您可用于常见 Amazon DocumentDB 场景的 VPC(只有私有 IPv4 地址),请参阅 创建仅 IPv4 的 VPC 以用于 DocumentDB 集群

IPv6 地址

您可以选择向 VPC 和子网关联 IPv6 CIDR 块,然后将此块中的 IPv6 地址分配给 VPC 中的资源。每个 IPv6 地址都是全局唯一的。

我们将自动从 Amazon 的 IPv6 地址池中为您的 VPC 分配 IPv6 CIDR 块。您不能自行选择范围。

连接到 IPv6 地址时,请确保满足以下条件:

  • 客户端配置为允许通过 IPv6 进行客户端到数据库的通信。

  • 集群使用的 DocumentDB 安全组已正确配置,允许通过 IPv6 进行客户端到数据库的通信。

  • 客户端操作系统堆栈允许 IPv6 地址上有流量,操作系统驱动程序和库已配置为选择正确的默认集群端点(IPv4 或 IPv6)。

有关 IPv6 的更多信息,请参阅《Amazon Virtual Private Cloud 用户指南》中的 IP 寻址

双堆栈模式

当集群可以通过 IPv4 和 IPv6 寻址协议进行通信时,将在双堆栈模式下运行。因此,资源可以通过 IPv4 和/或 IPv6 与集群进行通信。DocumentDB 禁用互联网网关访问私有双堆栈模式集群的 IPv6 端点。DocumentDB 这样做是为了确保您的 IPv6 端点是私有端点,并且只能从您的 VPC 内部对其进行访问。

双堆栈模式和子网组

要使用双堆栈模式,请确保与集群关联的子网组中的每个子网都具有与之关联的 IPv6 CIDR 数据块。您可以创建新的子网组或修改现有的子网组来满足此要求。当集群处于双堆栈模式后,客户端可以与其正常连接。确保准确配置客户端安全防火墙和 DocumentDB 集群安全组,以允许通过 IPv6 的流量。要进行连接,客户端需要使用集群的端点。客户端应用程序可以指定连接到数据库时首选哪种协议。在双堆栈模式下,集群会检测客户端的首选网络协议(IPv4 或 IPv6),并使用该协议进行连接。

如果某子网组因子网删除或 CIDR 断开关联而停止支持双堆栈模式,则与该子网组关联的集群存在网络状态不兼容的风险。此外,创建新的双堆栈模式集群时,您不能使用子网组。

要使用 AWS 管理控制台 确定子网组是否支持双堆栈模式,请查看子网组的详细信息页面上的网络类型。要使用 AWS CLI 确定子网组是否支持双堆栈模式,请运行 describe-db-subnet-groups 命令并查看输出中的 SupportedNetworkTypes

只读副本被视为独立的集群,并且可以具有与主集群不同的网络类型。如果您更改只读副本的主集群的网络类型,则只读副本不会受到影响。当您恢复集群时,可以将其恢复为支持的任何网络类型。

使用双堆栈模式集群

创建或修改集群时,您可以指定双堆栈模式,以允许您的资源通过 IPv4 和/或 IPv6 与集群进行通信。

当您使用 AWS 管理控制台 创建或修改集群时,可以在网络类型部分中指定双堆栈模式。下图显示了控制台中的网络类型部分:

控制台中的网络类型部分,已选中双堆栈模式。

当您使用 AWS CLI 创建或修改集群时,请将 --network-type 选项设置为 DUAL 以使用双堆栈模式。当您使用 DocumentDB API 创建或修改集群时,请将 NetworkType 参数设置为 DUAL 以使用双堆栈模式。如果指定的 DocumentDB 引擎版本或子网组不支持双堆栈模式,则返回 NetworkTypeNotSupported 错误。

有关创建集群的更多信息,请参阅 创建 Amazon DocumentDB 集群。有关修改集群的更多信息,请参阅 修改 Amazon DocumentDB 集群

要使用控制台确定集群是否处于双堆栈模式,请查看集群的连接和安全选项卡上的网络类型

修改仅限 IPv4 的集群以使用双堆栈模式

您可以修改仅限 IPv4 的集群以使用双堆栈模式。为此,请更改集群的网络类型。

建议您在维护时段内更改 Amazon DocumentDB 集群的网络类型。您可以使用 modify-db-cluster 命令手动设置网络类型。

在修改集群以使用双堆栈模式之前,请确保其子网组支持双堆栈模式。如果与集群关联的子网组不支持双堆栈模式,请在修改集群时指定支持该模式的其他子网组。修改集群的子网组可能会导致停机。

如果在将集群更改为使用双堆栈模式之前修改集群的子网组,请确保该子网组在更改前后对集群有效。

我们建议您在仅将 NetworkType 参数设置为 DUAL 的情况下运行 ModifyDBCluster 调用,以将网络更改为双堆栈模式。在同一 API 调用中将其他参数与 NetworkType 一起添加可能会导致停机。要修改多个参数,请确保网络类型修改已成功完成,然后使用其他参数发送另一个 ModifyDBCluster 请求。

如果更改后无法连接到集群,请确保已准确配置客户端和数据库安全防火墙和路由表,以允许流量流向选定网络(IPv4 或 IPv6)上的数据库。您可能还需要修改操作系统参数、库或驱动程序才能使用 IPv6 地址进行连接。

修改仅限 IPv4 的集群以使用双堆栈模式

  1. 修改子网组以支持双堆栈模式,或者创建支持双堆栈模式的子网组:

    1. 将 IPv6 CIDR 块与 VPC 关联。

      有关说明,请参阅《Amazon VPC 用户指南》中的将 CIDR 数据块添加到 VPC 或从中删除

    2. 将 IPv6 CIDR 数据块附加到子网组中的所有子网。

      有关说明,请参阅《Amazon Virtual Private Cloud 用户指南》中的将 IPv6 CIDR 数据块添加到子网或从中删除

    3. 确认子网组支持双堆栈模式。

      如果您使用 AWS 管理控制台,请选择子网组,并确保支持的网络类型值为

      如果您使用 AWS CLI,请运行 describe-db-subnet-groups 命令,并确保集群的 SupportedNetworkType 值为 Dual

  2. 修改与集群关联的安全组以允许与数据库建立 IPv6 连接,或者新建允许 IPv6 连接的安全组。

    有关说明,请参阅《Amazon Virtual Private Cloud 用户指南》中的安全组规则

  3. 修改集群以支持双堆栈模式。为此,请将 Network type(网络类型)设置为 Dual-stack mode(双堆栈模式)。

    如果您使用控制台,请确保以下设置正确:

    • 网络类型双堆栈模式

      控制台中的网络类型部分,已选中双堆栈模式。
    • 子网组 – 在上一步中配置的子网组

    • 安全组 – 在上一步中配置的安全组

    如果您使用 AWS CLI,请确保以下设置正确:

    • --network-typedual

    • --db-subnet-group-name – 在上一步中配置的子网组

    • --vpc-security-group-ids – 在上一步中配置的 VPC 安全组

    例如:

    aws docdb modify-db-cluster --db-cluster-identifier <cluster-name> --network-type "DUAL"
  4. 确认集群支持双堆栈模式。

    如果您使用控制台,针对集群选择连接和安全选项卡,并确保网络类型值为双堆栈模式

    如果您使用 AWS CLI,请运行 describe-db-cluster 命令,并确保集群的 NetworkType 值为 dual

    在集群端点上运行 dig 命令,以标识与其关联的 IPv6 地址:

    dig <db-cluster-endpoint> AAAA

    使用集群端点(而不是 IPv6 地址)连接到集群。

双堆栈模式区域和版本可用性

功能可用性和支持因 AWS 区域 而异。

区域支持

以下列表列出了支持双堆栈模式的 AWS 区域:

  • 美国东部(俄亥俄州)

  • 美国东部(弗吉尼亚州北部)

  • 美国西部(俄勒冈州)

  • 非洲(开普敦)

  • 南美洲(圣保罗)

  • 亚太地区(香港)

  • 亚太地区(海得拉巴)

  • 亚太地区(马来西亚)

  • 亚太地区(孟买)

  • 亚太地区(大阪)

  • 亚太地区(首尔)

  • 亚太地区(新加坡)

  • 亚太地区(悉尼)

  • 亚太地区(泰国)

  • 亚太地区(东京)

  • 加拿大(中部)

  • 中国(北京)

  • 中国(宁夏)

  • 欧洲地区(法兰克福)

  • 欧洲地区(爱尔兰)

  • 欧洲地区(伦敦)

  • 欧洲地区(米兰)

  • 欧洲地区(巴黎)

  • 欧洲地区(西班牙)

  • 欧洲地区(斯德哥尔摩)

  • 以色列(特拉维夫)

  • 墨西哥(中部)

  • 中东(阿联酋)

  • AWS GovCloud(美国西部)

  • AWS GovCloud(美国东部)

版本支持

双堆栈模式在 Amazon DocumentDB 版本 4.0 和 5.0 上受支持。如果您无法在上述任一版本中访问双堆栈模式,请确保您的集群上运行的是最新引擎补丁版本。

双堆栈网络集群的限制

以下限制适用于双堆栈网络集群:

  • 集群不能仅使用 IPv6 协议。它们可以仅使用 IPv4,也可以同时使用 IPv4 和 IPv6 协议(双堆栈模式)。

  • Amazon DocumentDB 不支持本机 IPv6 子网。

  • 使用双堆栈模式的集群必须是私有的。它们不可公开访问。

在 VPC 中创建集群

以下过程帮助您在 VPC 中创建集群。要使用默认 VPC,可以从步骤 2 开始,并使用已经为您创建的 VPC 和子网组。您还可以根据需要创建额外的 VPC。

注意

如果要让 VPC 中的集群实现公开访问,则必须通过启用 VPC 属性 DNS hostnamesDNS resolution 更新 VPC 的 DNS 信息。有关更新 VPC 实例的 DNS 的信息,请参阅《Amazon Virtual Private Cloud 用户指南》中的查看和更新 VPC 的 DNS 属性

要在 VPC 中创建集群,请执行以下步骤:

第 1 步:创建 VPC

创建一个 VPC,该 VPC 具有的子网位于至少两个可用区内。您在创建子网组时将使用这些子网。如果您拥有默认 VPC,则系统会在该 AWS 区域中的每个可用区中自动为您创建子网。

有关更多信息,请参阅 创建仅 IPv4 的 VPC 以用于 DocumentDB 集群,或者请参阅《Amazon Virtual Private Cloud 用户指南》中的创建 VPC

第 2 步:创建一个子网组

子网组是您在 VPC 中创建并随后指定给集群的子网(通常为私有子网)的集合。子网组可让您在使用 AWS CLI 或 DocumentDB API 创建集群时指定特定的 VPC。如果您使用 AWS 管理控制台,您就只能选择要使用的 VPC 和子网。每个子网组必须至少包含 AWS 区域 中至少两个可用区的一个子网。作为最佳实践,每个子网组应至少包含 AWS 区域 中每个可用区的一个子网。

对于希望可公开访问的集群,子网组中的子网必须具有互联网网关。有关子网的互联网网关的更多信息,请参阅《Amazon Virtual Private Cloud 用户指南》中的使用互联网网关为 VPC 启用互联网访问

注意

本地区域的子网组只能有一个子网。

在 VPC 中创建集群时,您可以选择子网组。Amazon DocumentDB 选择要与集群关联的子网及该子网中的 IP 地址。如果不存在子网组,Amazon DocumentDB 会在您创建集群时创建默认子网组。DocumentDB 使用该 IP 地址创建弹性网络接口并将其关联到您的集群。集群使用包含该子网的可用区。

在此步骤中,您创建一个子网组,然后添加为 VPC 创建的子网。

创建子网组

  1. 登录到 AWS 管理控制台 并打开 Amazon DocumentDB 控制台,网址:https://console.aws.amazon.com/docdb

  2. 在导航窗格中,选择子网组

  3. 选择创建

  4. 对于名称,键入您的子网组的名称。

  5. 对于描述,键入您的子网组的描述。

  6. 添加子网部分中,对于 VPC,选择默认 VPC 或您创建的 VPC。然后,从可用区中选择包含子网的可用区,并从子网中选择子网。

  7. 选择创建。

    您的新子网组显示在 DocumentDB 控制台的子网组列表中。您可以选择该子网组,在窗口底部的详细信息窗格中查看详细信息,其中包括与该组关联的所有子网。

步骤 3:创建 VPC 安全组

在创建集群之前,请先创建要与之关联的 VPC 安全组。如果您不创建 VPC 安全组,则可以在创建集群时使用默认安全组。有关如何为集群创建安全组的说明,请参阅 创建仅 IPv4 的 VPC 以用于 DocumentDB 集群,或者请参阅《Amazon Virtual Private Cloud 用户指南》中的使用安全组控制到 AWS 资源的流量

步骤 4:在 VPC 中创建集群

在此步骤中,创建一个集群,并使用您在之前的步骤中创建的 VPC 名称、子网组和 VPC 安全组。

注意

如果要让 VPC 中的集群实现公开访问,则必须启用 VPC 属性 DNS hostnamesDNS resolution。有关更多信息,请参阅《Amazon Virtual Private Cloud 用户指南》中的查看和更新 VPC 的 DNS 属性

有关如何创建集群的详细信息,请参阅 创建 Amazon DocumentDB 集群

连接部分中出现提示时,输入 VPC 名称、子网组和 VPC 安全组。

注意

DocumentDB 集群当前不支持更新 VPC。