管理转移代理

Storage Transfer Service 代理是在 Docker 容器内运行的应用,它们与 Storage Transfer Service 进行协调,以便从 POSIX 文件系统源读取数据,和/或将数据写入 POSIX 文件系统接收器。

如果您的转移作业不涉及到 POSIX 文件系统,则无需设置代理。

本文档介绍如何在服务器上管理转移代理。

概览

  • 代理进程是动态的。运行转移时,可以添加代理以提高性能。新启动的代理会加入分配的代理池,并通过现有转移作业执行工作。您可以使用此功能调整正在运行的代理数量,或调整转移性能以适应不断变化的转移需求。

  • 代理进程是容错的集合。如果其中一个代理停止运行,则其余代理将继续工作。如果所有代理都停止,则在重启代理时,转移会从代理停止的位置继续进行。这样您就无需监控代理、重试转移或实现恢复逻辑。通过协调代理与 Google Kubernetes Engine,您可以修补、迁移和动态扩缩您的代理池,而无需停止转移。

    例如,您在两个代理运行时提交两个转移作业。如果其中一个代理由于机器重启或操作系统修补而停止运行,则其余的代理将继续工作。两个转移作业仍在运行,但由于单个代理正在移动数据,速度会较慢。如果剩余的代理也停止,则所有转移作业会停止进行,因为没有代理正在运行。重启代理进程时,转移会从中断位置恢复。

  • 代理进程在一个池中。它们会以并行方式集体迁移数据。 因此,池中的所有代理都必须对您要转移的所有数据源具有相同的访问权限。

    例如,如果要从特定文件系统转移数据,则必须将文件系统装载到托管代理池中的代理的每台机器上。如果池中的某些代理可以访问某一数据源,而其他代理无法访问,那么您将无法从该数据源成功转移。

准备工作

在配置转移作业之前,请确保您已配置相应的访问权限:针对用户和服务帐号

如果您要使用 gcloud 命令,请安装 gcloud CLI

安装并运行转移代理

如需安装并运行转移代理,请执行以下操作:

Google Cloud 控制台

  1. 在控制台中,进入代理池页面。

    转到“代理池”

  2. 选择要向其添加新代理的代理池。

  3. 点击安装代理

  4. 按照相关说明安装并运行代理。

    如需详细了解代理的命令行选项,请参阅代理命令行选项

gcloud CLI

如需使用 gcloud CLI 安装一个或多个代理,请运行 gcloud transfer agents install

gcloud transfer agents install --pool=POOL_NAME --count=NUM_AGENTS

该工具将引导您完成安装代理所需的所有步骤。此命令会在您的机器上安装 NUM_AGENTS 个代理,将这些代理映射到指定为 POOL_NAME 的池名称,并使用您的 gcloud 凭据对这些代理进行身份验证。池名称必须存在,否则会返回错误。

如需使用服务帐号密钥运行代理,请使用 --creds-file 选项:

gcloud transfer agents install --pool=POOL_NAME --count=NUM_AGENTS \
  --creds-file=/relative/path/to/service-account-key.json

如需查看可选标志的完整列表,请运行 gcloud transfer agents install --help 或参阅 gcloud transfer 参考文档

我们建议为每台机器上安装多个代理。如需详细了解如何确定要运行的代理数量,请参阅最大限度地提高转移代理性能

确认代理连接

安装转移代理后,您可以验证它们是否已连接到您的代理池。

如需确认代理是否已连接,请执行以下操作:

  1. 在控制台中,进入代理池页面。

    转到“代理池”

    系统会显示您的代理池以及已连接的代理数量。

  2. 选择一个代理池,以查看有关连接的代理的详细信息。

如果新代理在创建后 10 分钟内未显示在代理池页面中,请参阅代理未连接

监控代理活动

您可以使用 Cloud Monitoring 提醒来监控代理活动。

您可以通过 projectagent_poolagent_id 维度进行监控。

利用此监控数据,您可以设置提醒,以便在您的转移出现潜在问题时接收通知。为此,请针对以下任一 Google Cloud 指标创建提醒

指标名称 所描述的内容 建议用途
storagetransfer.googleapis.com/agent/transferred_bytes_count 测量特定代理在某个时间点跨其服务的所有作业移动数据的速度。 性能下降提醒。
storagetransfer.googleapis.com/agent/connected Google Cloud 近期收到过检测信号消息的各个代理的 True 布尔值。
  • 代理故障提醒
  • 未达到您认为合理性能所需的代理数量
  • 发出代理机器有问题的信号

停止代理

如需停止代理,请在代理的 Docker 容器 ID 上运行 docker stop。如需查找 ID 并停止代理,请执行以下操作:

  1. 在控制台中,进入代理池页面。

    转到“代理池”

  2. 选择包含要停止的代理的代理池。

  3. 从列表中选择代理。使用过滤条件字段搜索前缀、代理状态、代理存在时间等。

  4. 点击停止代理。系统会显示包含特定容器 ID 的 docker stop 命令。

  5. 在运行代理的机器上运行该命令。成功的 docker stop 命令会返回容器 ID。

停止后,代理将在代理池列表中显示为已断开连接

删除代理

如需删除特定代理,请列出机器上运行的代理:

docker container list --all --filter ancestor=gcr.io/cloud-ingest/tsop-agent

然后,将代理 ID 传递给 transfer agents delete

gcloud transfer agents delete --ids=id1,id2,…

如需删除机器上运行的所有代理,请使用 --all 标志或 --uninstall 标志。这两个标志都会删除机器上的所有代理;--uninstall 标志还会卸载代理 Docker 映像。

gcloud transfer agents delete --all
gcloud transfer agents delete --uninstall

文件系统转移详情

增量转移

Storage Transfer Service 通过计算源和目标位置的数据来确定自上次转移后新增、更新或删除的源文件,开始所有转移。我们这样做是为了减少从机器发送的数据量,有效利用带宽以及减少转移时间。

为了检测文件是否已更改,我们使用类似于 gsutil rsync 的算法:检查源文件的最后修改时间和大小,并将其与最后一次复制文件时记录的修改时间和大小进行比较。当我们检测到新文件或更改后的文件时,我们会将整个文件复制到目标位置。如需了解文件新鲜度的详情,请参阅数据一致性详细信息

默认情况下,我们会检测在来源上删除的文件,但不会对其进行操作。如果在创建修改时选择同步选项删除源位置中也不存在的目标文件,您的转移将删除目标位置的相应对象。

如果选择同步选项删除源位置中也不存在的目标文件,则在源中意外删除的文件也会在目标位置中删除。为防止意外删除造成数据丢失,如果您选择使用此选项,我们建议您在目标存储分区中启用对象版本控制。如果不小心删除了某个文件,则可以将 Cloud Storage 中的对象恢复为旧版本。

数据一致性详情

成功的转移操作将转移在操作的整个运行期间存在且未修改过的所有源文件。在转移期间创建、更新或删除的源文件可能会也可能不会在目标数据集中反映这些更改。

Storage Transfer Service 会使用文件的上次修改时间和大小来确定其是否已更改。如果更新文件时没有更改其上次修改时间或大小,并且您启用了 delete-objects-from-source 选项,则您可能会丢失此更改中的数据。

使用 delete-objects-from-source 功能时,我们强烈建议您在传输期间冻结对来源的写入,以防止数据丢失。

如需冻结对来源的写入,请执行以下操作之一:

  • 克隆要转移的目录,然后使用克隆的目录作为转移来源。
  • 停止写入源目录的应用。

如果必须捕获转移期间发生的更改,您可以重新运行转移,或者在操作运行时将源文件系统设置为只读。

由于 Cloud Storage 没有目录概念,因此不会转移空的源目录。