本文档介绍了文件系统转移的高级设置选项,包括:
- 复制 CIFS 或 SMB 卷上的数据
- 使用服务账号凭据
- 调整代理内存上限
- 限制代理目录访问权限
- 使用 Kubernetes 协调代理
- 使用转发代理
- 复制到具有保留政策的存储桶
- 获取更多网络带宽的选项
复制 CIFS 或 SMB 卷上的数据
Windows Server 不直接支持转移代理。但是,如需移动存储在任何符合 POSIX 标准的文件系统上的数据,您可以将该文件系统装载到 Linux 服务器或虚拟机上,然后从 Linux 服务器或虚拟机运行代理,以将数据复制到 Cloud Storage。
如需移动 CIFS 或 SMB 卷中的数据,请执行以下操作:
预配 Linux 服务器或虚拟机。
对于受支持的操作系统,请参阅前提条件。
在您预配的 Linux 服务器或虚拟机上运行以下命令以装载卷:
sudo mount -t cifs -o username=WINDOWS-SHARE-USER,password=WINDOWS-SHARE-PASSWORD //IP-ADDRESS/SHARE-NAME /mnt
替换以下内容:
IP-ADDRESS
:CIFS 或 SMB 卷所在的 Microsoft Windows 服务器的 IP 地址。SHARE-NAME
:您正在装载的共享名称。WINDOWS-SHARE-USER
:用于访问 CIFS 或 SMB 卷的授权用户。WINDOWS-SHARE-PASSWORD
:CIFS 或 SMB 卷的授权用户的密码。
运行以下命令,确认已装载 CIFS 卷:
findmnt -l
通过运行以下命令,确认将要运行代理的用户可以在已装载的卷上列出和复制文件:
sudo -u USERNAME cp /mnt/FILE1 /mnt/FILE2
替换以下内容:
USERNAME
:将要运行代理的用户。FILE1
:要复制其内容的文件。FILE2
:要将内容复制到其中的文件名。
使用服务账号凭据
您可以使用服务账号凭据来运行代理。使用服务账号凭据时,无需依赖单个用户账号即可对转移代理进行身份验证。如需详细了解账号类型,请参阅主账号。
创建服务账号密钥。 如需了解详情,请参阅创建和管理服务账号密钥。
将服务密钥位置传递给代理创建命令:
gcloud transfer agents install --pool=POOL_NAME --count=NUM_AGENTS \ --mount-directories=MOUNT_DIRECTORIES \ --creds-file=RELATIVE_PATH_TO/KEY_FILE.JSON
凭据文件由
gcloud transfer
自动装载,不需要使用--mount-directories
标志指定。
调整代理内存上限
转移代理默认使用最多 8 GiB 的系统内存。您可以通过传递 --max-physical-mem=MAXIMUM-MEMORY
(将 MAXIMUM-MEMORY
替换为适合您环境的值)来调整代理使用的最大内存以适合您的环境。
- 最小内存:1 GiB
- 支持高性能上传的最小内存:6 GiB
我们建议默认值为 8GiB。
下表说明了 MAXIMUM-MEMORY
的可接受格式示例:
max-physical-mem 值 |
内存上限设置 |
---|---|
6g |
6 GB |
6gb |
6 GB |
6GiB |
6 GiB |
限制代理目录访问权限
能够创建转移作业的用户可以从代理可访问的任何文件系统目录中检索数据,也可以将数据下载到代理可访问的任何文件系统目录。
如果代理以 root 身份运行且被授予整个文件系统的访问权限,恶意操作者可能会获得接管主机的权限。强烈建议您限制代理的访问权限,以仅允许其访问必要的目录。
如需限制代理对特定目录的访问权限,请执行以下操作:
gcloud
如需指定代理可以在文件系统中访问的目录,请将 --mount-directories
标志与 gcloud transfer agents install
搭配使用:
gcloud transfer agents install --pool=POOL_NAME --count=NUM_AGENTS \
--mount-directories=MOUNT_DIRECTORIES
指定多个目录,各目录之间用英文逗号分隔并且没有空格:
gcloud transfer agents install --pool=POOL_NAME --count=NUM_AGENTS \
--mount-directories=MOUNT_DIRECTORY_1,MOUNT_DIRECTORY_2
如果您使用 --creds-file
标志指定凭据文件,gcloud transfer
会自动装载凭据文件。与凭据文件位于同一目录中的其他文件不会被装载。
docker run
如需指定代理在执行转移时可以访问的目录,请将 -v HOST_DIRECTORY:CONTAINER_DIRECTORY
传递给代理,其中:
HOST_DIRECTORY
是要从中复制数据的主机目录。CONTAINER_DIRECTORY
是映射到代理容器内的目录。
HOST_DIRECTORY
和 CONTAINER_DIRECTORY
必须相同,以便代理找到要复制的文件。
使用此选项时:
- 请勿指定
--enable-mount-directory
。 - 请勿在文件路径前面添加
/transfer_root
。
--enable-mount-directory
选项将整个文件系统装载在容器上的 /transfer_root
目录下。如果指定了 --enable-mount-directory
,则不会应用目录限制。
您可以使用多个 -v
标志指定要从中进行复制的其他目录。例如:
sudo docker run --ulimit memlock=64000000 -d -rm --volumes-from gcloud-config \ -v /usr/local/research:/usr/local/research \ -v /usr/local/billing:/usr/local/billing \ -v /tmp:/tmp \ gcr.io/cloud-ingest/tsop-agent:latest \ --project-id=PROJECT_ID \ --hostname=$(hostname) \ --agent-id-prefix=ID_PREFIX
如果使用的是服务账号,请确保将凭据文件装载到容器中并传递 --creds-file=CREDENTIAL_FILE
。例如:
sudo docker run --ulimit memlock=64000000 -d -rm \ -v HOST_DIRECTORY:CONTAINER_DIRECTORY \ -v /tmp:/tmp \ -v FULL_CREDENTIAL_FILE_PATH:FULL_CREDENTIAL_FILE_PATH \ gcr.io/cloud-ingest/tsop-agent:latest \ --project-id=PROJECT_ID \ --creds-file=CREDENTIAL_FILE \ --hostname=$(hostname) \ --agent-id-prefix=ID_PREFIX
替换以下内容:
HOST_DIRECTORY
:要从中复制数据的主机目录。CONTAINER_DIRECTORY
:映射到代理容器内的目录。FULL_CREDENTIAL_FILE_PATH
:凭据文件的完全限定路径。PROJECT_ID
:托管转移作业以及所创建和计费的资源的项目 ID。CREDENTIAL_FILE
:JSON 格式的服务账号凭据文件。如需详细了解如何生成服务账号凭据文件,请参阅创建和管理服务账号密钥。ID_PREFIX
:附加到代理 ID 的前缀,用于帮助识别 Google Cloud Console 中的代理或其机器。使用前缀时,代理 ID 的格式为prefix + hostname + Docker container ID
。
使用 Kubernetes 协调代理
Docker 是 Kubernetes 支持的容器运行时。您可以使用 Kubernetes 同时编排启动和停止多个代理。从 Kubernetes 的角度来看,代理容器被视为无状态应用,因此您可以遵循 Kubernetes 指令来部署无状态应用。
在 Cloud Interconnect 中使用专用 API 端点
如需在 Cloud Interconnect 中使用专用 API 端点,请执行以下操作:
登录要用来运行代理的本地主机。
配置专用 Google 访问通道。如需了解详情,请参阅配置适用于本地主机的专用 Google 访问通道。
确认您可以连接到 Cloud Storage API:
- 对于 Cloud Storage API,请从转移代理所在的机器上运行以下命令,以测试将文件移入 Cloud Storage 存储分区:
gcloud storage cp test.txt gs://MY-BUCKET
,其中MY-BUCKET
为 Cloud Storage 存储分区的名称。如果转移成功,则测试成功。
- 对于 Cloud Storage API,请从转移代理所在的机器上运行以下命令,以测试将文件移入 Cloud Storage 存储分区:
使用转发代理
通过传递 HTTPS_PROXY
环境变量,转移代理支持使用网络上的转发代理。
例如:
sudo docker run -d --ulimit memlock=64000000 --rm \ --volumes-from gcloud-config \ -v /usr/local/research:/usr/local/research \ --env HTTPS_PROXY=PROXY\ gcr.io/cloud-ingest/tsop-agent:latest \ --enable-mount-directory \ --project-id=PROJECT_ID \ --hostname=$(hostname) \ --agent-id-prefix=ID_PREFIX
替换以下内容:
PROXY
:代理服务器的 HTTP 网址和端口。确保您指定 HTTP 网址(而不是 HTTPS 网址),以避免在 TLS 加密中重复封装请求。重复封装的请求会阻止代理服务器发送有效的出站请求。PROJECT_ID
:托管转移作业以及所创建和计费的资源的项目 ID。ID_PREFIX
:附加到代理 ID 的前缀,用于帮助识别 Google Cloud Console 中的代理或其机器。使用前缀时,代理 ID 的格式为prefix + hostname + Docker container ID
。
复制到具有保留政策的存储桶
如需转移到具有保留政策的存储桶,我们建议您遵循以下过程:
在最终存储分区所在的区域中创建 Cloud Storage 存储分区。确保此临时存储分区没有保留政策。
如需详细了解区域,请参阅存储分区位置。
使用 Storage Transfer Service 将数据转移到您创建的没有保留政策的临时存储桶。
执行存储分区到存储分区转移,以通过保留政策将数据转移到存储分区。
删除您创建的 Cloud Storage 存储分区以临时存储您的数据。
获取更多网络带宽的选项
有多种方式可以为文件系统转移获取更多网络带宽。增加网络带宽有助于减少转移时间,尤其是对于大型数据集。
与 Google 进行对等互连 — 对等互连可让您直接与 Google 进行互连以支持流量交换。我们在全球范围内有直接对等互连地点。如需了解相关福利和政策,请参阅对等互连。
Cloud Interconnect — Cloud Interconnect 类似于对等互连,但您需要使用互连来连接到 Google。有两种类型的互连可供选择:
从 ISP 获取带宽 — 您的互联网服务提供商 (ISP) 可能能够根据您的需求提供更多带宽。可以考虑与他们联系,问他们有哪些选项。