您可以通过在源数据库和目标数据库的专用 IP 地址之间建立连接,通过专用网络迁移数据。您可以使用以下两种方法之一来配置目标数据库的专用 IP 地址:使用专用服务访问通道和 VPC 对等互连,或使用 Private Service Connect。
每种连接方法都有各自的优势和权衡。请务必选择最适合您情况的方法。如需详细了解 Cloud SQL 中的专用服务访问通道和 Private Service Connect,请参阅 Cloud SQL 文档中的专用 IP 概览。
使用 VPC 对等互连配置连接
VPC 对等互连的工作原理是配置 VPC 以相互通信。如果您的来源位于 Cloud SQL 或 Compute Engine 中的同一 Google Cloud 项目内,则此设置允许目标直接与来源通信。 如果您的来源位于 VPN 中(例如在 AWS 中或您自己的本地 VPN 中),请配置来源 VPN 和 Google Cloud VPN,以使其能够相互配合使用。如需了解详情,请参阅 通过 VPN 连接 VPC。不支持 VPC 链接。如果您的来源位于其他 Google Cloud 项目中,请参阅共享 VPC 概览,了解如何将多个项目中的资源连接到一个公用 VPC 网络以实现 VPC 对等互连。
源数据库服务器的防火墙必须配置为允许为 Cloud SQL 目标实例将要使用的 VPC 网络的专用服务连接分配的整个内部 IP 地址范围。
如需查找为专用服务访问通道分配的内部 IP 范围,请执行以下操作:
控制台
在 Google Cloud 控制台中打开“虚拟私有云网络”页面。
选择要使用的 VPC 网络。
依次选择专用服务访问通道 > 为服务分配的 IP 范围。
找到与 servicenetworking-googleapis-com 创建的连接关联的内部 IP 范围。
gcloud
将 PROJECT_ID 变量替换为包含您的虚拟私有云网络的项目标识符。
gcloud compute addresses list \
--global \
--filter="purpose=VPC_PEERING" \
--project=PROJECT_ID
Compute Engine 和自行管理的实例的来源配置
如果源数据库托管在同一虚拟私有云或对等互连的虚拟私有云中的 Compute Engine 实例上:
在虚拟私有云网络中创建防火墙规则,以允许从分配的 IP 范围到源数据库端口(PostgreSQL 的默认端口为
5432,MySQL 的默认端口为3306)的入站流量:gcloud compute firewall-rules create FIREWALL_RULE_NAME \ --network=VPC_NETWORK_NAME \ --direction=INGRESS \ --priority=1000 \ --action=ALLOW \ --rules=tcp:5432 \ --source-ranges=ALLOCATED_PEERING_RANGE \ --target-tags=SOURCE_VM_TAG \ --project=PROJECT_ID替换以下内容:
- FIREWALL_RULE_NAME:防火墙规则的名称(例如
allow-cloudsql-dms-ingress)。 - VPC_NETWORK_NAME:源数据库所在的虚拟私有云网络的名称。
- ALLOCATED_PEERING_RANGE:为专用服务访问通道分配的内部 IP 地址范围(例如
10.102.0.0/16)。 - SOURCE_VM_TAG:应用于源 Compute Engine 虚拟机实例的网络标记。
- PROJECT_ID:包含您的虚拟私有云网络的项目的标识符。
- FIREWALL_RULE_NAME:防火墙规则的名称(例如
在
pg_hba.conf文件中配置客户端身份验证。 更新源服务器上的/etc/postgresql/<version>/main/pg_hba.conf,以允许来自分配的 IP 范围的连接和复制:host all all ALLOCATED_PEERING_RANGE md5 host replication all ALLOCATED_PEERING_RANGE md5将 ALLOCATED_PEERING_RANGE 替换为为专用服务访问通道分配的内部 IP 地址范围(例如
10.102.0.0/16)。重新加载配置。运行以下命令:
sudo -u postgres psql -c "SELECT pg_reload_conf();"。验证
postgresql.conf中的listen_addresses配置。 确保该属性包含内部接口或设置为'*':listen_addresses = '*'
VPC 对等互连使用专用服务访问通道,必须为使用 VPC 对等互连的每个项目配置一次。建立 private services access 后,测试迁移作业以验证连接。
为 Database Migration Service 配置专用服务访问通道
如果您为任何 Database Migration Service 实例使用专用 IP,则只需为每个具有或需要连接到 Database Migration Service 实例的 Google Cloud 项目配置一次专用服务访问通道。
建立专用服务访问通道需要 compute.networkAdmin IAM 角色。为您的网络建立专用服务访问通道后,您不再需要 compute.networkAdmin IAM 角色即可将实例配置为使用专用 IP。
如需使用专用服务访问通道,您必须先分配内部 IP 地址范围,然后创建专用连接,再导出自定义路由。
分配的范围是预留的 CIDR 块,不能在您的本地 VPC 网络中使用。创建专用连接时,您需要指定分配。专用连接将您的 VPC 网络与底层(“服务提供方”)VPC 网络相链接。
创建专用连接后,VPC 网络和服务提供方网络仅交换子网路由。您必须导出 VPC 网络的自定义路由,以便服务提供方的网络可以导入这些路由,并将流量正确路由到您的本地网络。
对等互连配置可确立连接到另一个 VPC 网络的意图。在您的网络和另一个网络没有针对对方的对等互连配置之前,它们不会连接。当另一个网络具有与您的网络对等互连的相应配置后,两个网络中的对等互连状态都会变为“有效”,并且这两个网络会连接起来。如果另一个网络中没有匹配的对等互连配置,则对等互连状态保持为“不活跃”,这表示您的网络未连接到另一个网络。
连接后,这两个网络将始终交换子网路由。如果对等互连的网络配置为导出静态和动态自定义路由,则可以选择从该网络导入这些路由
专用服务访问通道的配置过程分为两个部分:
- 分配 IP 地址范围。此范围涵盖您的所有实例。
- 创建从 VPC 网络到服务提供方网络的专用连接。
分配 IP 地址范围
控制台
- 前往 Google Cloud 控制台中的 VPC 网络页面。
- 选择要使用的 VPC 网络。
- 选择专用服务连接标签页。
- 选择为服务分配的 IP 范围标签页。
- 点击分配 IP 范围。
对于已分配的范围的名称,请指定
google-managed-services-VPC_NETWORK_NAME,其中VPC_NETWORK_NAME是要连接的 VPC 网络的名称(例如google-managed-services-default)。说明为可选字段。点击分配以创建分配的范围。
gcloud
执行下列其中一项操作:
如需指定地址范围和前缀长度(子网掩码),请使用
addresses和prefix-length标志。例如,若要分配 CIDR 块192.168.0.0/16,请将地址指定为192.168.0.0,并将前缀长度指定为16。gcloud compute addresses create google-managed-services-[VPC_NETWORK_NAME] \ --global \ --purpose=VPC_PEERING \ --addresses=192.168.0.0 \ --prefix-length=16 \ --network=[VPC_NETWORK_NAME]若只指定前缀长度(子网掩码),请仅使用
prefix-length标志。如果您省略地址范围,则 Google Cloud会自动选择您的 VPC 网络中未使用的地址范围。以下示例选择的是前缀长度为16位的未使用的 IP 地址范围。gcloud compute addresses create google-managed-services-[VPC_NETWORK_NAME] \ --global \ --purpose=VPC_PEERING \ --prefix-length=16 \ --network=[VPC_NETWORK_NAME]
将 [VPC_NETWORK_NAME] 替换为您的 VPC 网络的名称,例如 my-vpc-network。
以下示例会分配一个 IP 范围,该范围允许 VPC 网络 my-vpc-network 中的资源使用专用 IP 连接到 Database Migration Service 实例。
gcloud compute addresses create google-managed-services-my-vpc-network \
--global \
--purpose=VPC_PEERING \
--prefix-length=16 \
--network=my-vpc-network \
--project=my-project
创建专用连接
控制台
- 前往 Google Cloud 控制台中的 VPC 网络页面。
- 选择要使用的 VPC 网络。
- 选择专用服务连接标签页。
- 选择连到服务的专用连接标签页。
- 点击创建连接以在您的网络与服务提供方之间创建专用连接。
- 对于指定的分配范围,请选择一个或多个未被其他服务提供方占用的现有已分配的范围,然后点击确定。
- 点击连接以创建连接。
gcloud
创建专用连接。
gcloud services vpc-peerings connect \ --service=servicenetworking.googleapis.com \ --ranges=google-managed-services-[VPC_NETWORK_NAME] \ --network=[VPC_NETWORK_NAME] \ --project=[PROJECT_ID]将
[VPC_NETWORK_NAME]替换为您的 VPC 网络的名称,并将[PROJECT_ID]替换为包含您的 VPC 网络的项目的 ID。该命令会启动一个长时间运行的操作,并返回操作名称。
检查操作是否成功。
gcloud services vpc-peerings operations describe \ --name=[OPERATION_NAME]将
[OPERATION_NAME]替换为从上一步返回的操作名称。
创建专用连接时,您可以指定多个分配范围。举例来说,如果一个范围已用尽,则您可以分配额外的分配范围。该服务会按您指定的顺序使用所提供的所有范围中的 IP 地址。
导出自定义路由
更新现有 VPC 网络对等互连连接,以更改 VPC 网络是向对等 VPC 网络导出还是从对等 VPC 网络导入自定义路由。
仅当对等互连网络也导出自定义路由时,您的网络才会导入自定义路由,并且仅当对等互连网络导入自定义路由时,才会接收自定义路由。
控制台
- 前往 Google Cloud 控制台中的“VPC 网络对等互连”页面。
前往“VPC 网络对等互连”页面 - 选择要更新的对等互连连接。
- 点击修改。
- 通过选择或取消选择导入自定义路由或导出自定义路由来更新自定义路由设置。
- 点击保存。
gcloud
更新对等互连连接,以更改自定义路由的导入或导出设置。
gcloud compute networks peerings update [PEERING-NAME] \
--network=[MY-LOCAL-NETWORK] \
[--[no-]import-custom-routes] \
[--[no-]export-custom-routes]
授予 roles/servicenetworking.serviceAgent 角色
gcloud beta services identity create \
--service=servicenetworking.googleapis.com \
--project=project-id
gcloud projects add-iam-policy-binding project-id \
--member="service-account-prefix@service-networking." \
--role="roles/servicenetworking.serviceAgent"
使用 Private Service Connect 接口配置连接
对于同构迁移,Cloud SQL 可以使用 Private Service Connect 接口通过专用网络建立连接,而不会消耗虚拟私有云对等互连配额。只有在迁移到现有实例时,才能使用此连接方法。
如需使用 Private Service Connect 接口,请执行以下操作:
创建一个启用了 Private Service Connect 的 Cloud SQL 实例。 请参阅 Cloud SQL 文档中的创建启用了 Private Service Connect 的实例。
为目标实例上的出站连接配置 Private Service Connect:
在源数据库所在的虚拟私有云网络中创建网络连接。请注意,为网络连接预留的子网范围必须在 RFC 1918 范围内:
gcloud compute network-attachments create NETWORK_ATTACHMENT_NAME \ --region=REGION \ --subnets=NETWORK_ATTACHMENT_SUBNET \ --connection-preference=ACCEPT_AUTOMATIC \ --project=PROJECT_ID替换以下内容:
- NETWORK_ATTACHMENT_NAME:网络连接的名称(例如
dms-psc-attachment)。 - REGION:子网和目标 Cloud SQL 实例所在的区域。
- NETWORK_ATTACHMENT_SUBNET:为网络连接预留的子网的名称。
- PROJECT_ID:包含您的虚拟私有云网络的项目的标识符。
- NETWORK_ATTACHMENT_NAME:网络连接的名称(例如
将网络连接分配给目标 Cloud SQL 实例。如需了解详情,请参阅 Cloud SQL 文档中的配置出站连接。
仅限自行管理的来源:确保源数据库允许来自网络连接子网的入站流量。检查防火墙规则。确保存在防火墙规则,以允许从网络连接 CIDR 在数据库端口 5432 上入站。
在源实例的
pg_hba.conf中,确保存在允许从与网络连接相关联的子网的 CIDR 范围建立连接的条目。如需查找与网络连接关联的子网及其 CIDR 范围,请参阅 Virtual Private Cloud 文档中的描述网络连接和描述子网。创建迁移作业时,请为连接方法选择 PSC 接口。