创建可用区级存储分区

通过Rapid Bucket提供的区域存储分区可为需要特定地理区域内数据的应用提供高性能、低延迟的存储服务。

本页面介绍了如何执行以下操作:

在可用区中创建存储桶

准备工作

如果您尚未获取创建存储分区所需的角色,请获取这些角色

控制台

  1. 在 Google Cloud 控制台中,转到 Cloud Storage 存储桶页面。

    进入“存储桶”

  2. 点击 创建
  3. 创建存储桶页面上,输入您的存储桶信息。完成以下每一步后,点击继续以继续执行后续步骤:

    1. 开始使用部分中,执行以下操作:

    2. 选择数据存储位置部分中,执行以下操作:

      1. 选择区域作为位置类型

      2. 使用位置类型的下拉菜单选择一个位置,用于永久存储存储桶中的对象数据。

    3. 选择数据存储方式部分中,系统会选择快速存储作为默认存储类别

    4. 选择如何控制对对象的访问权限部分中,选择存储桶是否强制执行禁止公开访问,然后为存储桶对象选择访问权限控制模型

    5. 选择如何保护对象数据部分中,执行以下操作:

      • 如需选择如何加密对象数据,请点击标有数据加密 展开箭头,然后执行以下操作:

  4. 点击创建

命令行

  1. 在 Google Cloud 控制台中,激活 Cloud Shell。

    激活 Cloud Shell

    Cloud Shell 会话随即会在 Google Cloud 控制台的底部启动,并显示命令行提示符。Cloud Shell 是一个已安装 Google Cloud CLI 且已为当前项目设置值的 Shell 环境。该会话可能需要几秒钟时间来完成初始化。

  2. 在开发环境中,运行 gcloud storage buckets create 命令:

    gcloud storage buckets create \
    gs://BUCKET_NAME --location=BUCKET_LOCATION --placement=BUCKET_ZONE \
    --default-storage-class=RAPID --enable-hierarchical-namespace --uniform-bucket-level-access

    • BUCKET_NAME 替换为您要为自己的存储桶指定的名称(须遵循命名要求),例如 rapid-storage-bucket

    • BUCKET_LOCATION 替换为存储桶区域。 例如 us-east1

    • BUCKET_ZONE 替换为您希望存储桶所在的可用区。例如 us-east1-b

    如果请求成功,该命令将返回以下消息:

    Creating gs://rapid-storage-bucket/...

使用 Cloud Storage FUSE 装载区域级存储桶

准备工作

本部分假设您已获得 Cloud Storage FUSE 的访问权限。如果您尚未获得,请执行以下前提步骤:

  1. 安装 Cloud Storage FUSE。请确保您安装的是 Cloud Storage FUSE 3.4.0 版或更高版本。
  2. 对 Cloud Storage FUSE 请求进行身份验证
  3. 如果您没有创建要装载的存储桶,请获取装载存储桶所需的角色

如需使用 Cloud Storage FUSE 装载地区级存储桶,请使用以下命令:

mkdir MOUNT_POINT
gcsfuse BUCKET_NAME MOUNT_POINT

  • MOUNT_POINT 替换为要将存储桶装载到的本地目录。例如 $HOME/example-bucket

  • BUCKET_NAME 替换为要装载的存储桶的名称。

例如,以下命令会将名为 example-rapid-storage-bucket 的存储桶装载到 source-bucket 装载点:

mkdir $HOME/source-bucket
gcsfuse example-rapid-storage-bucket $HOME/source-bucket

如果您想将对象从现有存储桶转移到区域存储桶,请装载这两个存储桶,然后使用 cp 命令转移对象。

使用 FIO 测试进行性能基准比较

如需对区域存储桶的速度进行基准化分析,请运行 FIO 测试

Google Kubernetes Engine

以下命令会将配置应用于您的 Google Kubernetes Engine 集群,该集群会针对 Cloud Storage 存储桶运行 FIO 测试。该存储桶使用 GKE 的 FUSE CSI 驱动程序装载到容器的文件系统。

$ cat << EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
  name: fio
  namespace: default
  annotations:
    gke-gcsfuse/volumes: "true"
spec:
  containers:
  - name: fio
    image: mayadata/fio
    command: ["/bin/ash", "-c", "--"]
    args:
    - |
      fio --name=read_latency_test --filename=/data/fio --filesize=1G --time_based=1 --ramp_time=10s --runtime=1m --ioengine=libaio --direct=1 --verify=0 --randrepeat=0 --bs=4K --iodepth=1 --rw=randread --disable_slat=1 --disable_clat=1 --lat_percentiles=1 --numjobs=1
    volumeMounts:
    - name: fio-bucket
      mountPath: /data
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: topology.kubernetes.io/zone
            operator: In
            values:
            - ZONE_NAME
  serviceAccountName: default
  volumes:
  - name: fio-bucket
    csi:
      driver: gcsfuse.csi.storage.gke.io
      volumeAttributes:
        bucketName: "BUCKET_NAME"
        gcsfuseLoggingSeverity: warning
  restartPolicy: Never
EOF

其中:

  • ZONE_NAME 是您的存储桶所在的地区。例如 us-east4-a

  • BUCKET_NAME 是您的存储桶的名称。 例如 my-bucket

如果测试成功,系统会输出类似于以下内容的响应:

$ kubectl logs fio
Defaulted container "fio" out of: fio, gke-gcsfuse-sidecar (init)
read_latency_test: (g=0): rw=randread, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=1
fio-3.36
Starting 1 process

read_latency_test: (groupid=0, jobs=1): err= 0: pid=11: Mon Mar  3 20:38:14 2025
  read: IOPS=591, BW=2365KiB/s (2422kB/s)(139MiB/60001msec)
    lat (usec): min=867, max=181966, avg=1685.32, stdev=2695.84
    lat percentiles (usec):
    |  1.00th=[  1074],  5.00th=[  1188], 10.00th=[  1254], 20.00th=[  1336],
    | 30.00th=[  1401], 40.00th=[  1467], 50.00th=[  1549], 60.00th=[  1614],
    | 70.00th=[  1713], 80.00th=[  1844], 90.00th=[  2057], 95.00th=[  2278],
    | 99.00th=[  3064], 99.50th=[  3654], 99.90th=[  8717], 99.95th=[ 73925],
    | 99.99th=[131597]
  bw (  KiB/s): min= 1290, max= 2736, per=100.00%, avg=2365.51, stdev=244.10, samples=120
  iops        : min=  322, max=  684, avg=591.34, stdev=61.10, samples=120
  cpu          : usr=0.81%, sys=1.61%, ctx=36011, majf=0, minf=36
  IO depths    : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
    submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
    complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
    issued rwts: total=35473,0,0,0 short=0,0,0,0 dropped=0,0,0,0
    latency   : target=0, window=0, percentile=100.00%, depth=1

Run status group 0 (all jobs):
  READ: bw=2365KiB/s (2422kB/s), 2365KiB/s-2365KiB/s (2422kB/s-2422kB/s), io=139MiB (145MB), run=60001-60001msec

Compute Engine 虚拟机

以下说明将在 Compute Engine 虚拟机上运行 FIO 测试。

  1. 使用 Cloud Storage FUSE 装载快速存储空间:
mkdir $HOME/rapid-mnt
gcsfuse --max-retry-attempts=5 <bucket-name> PATH

  • PATH 替换为要将存储桶装载到的本地文件系统路径。
  1. 如果您尚未安装 FIO,请进行安装:
sudo apt-get update && sudo apt-get upgrade -y && sudo apt-get install fio -y
  1. 运行 FIO 读取延迟时间测试示例:
fio --name=read_latency_test \
  --filename=BUCKET_PATH/1G --filesize=1G \
  --time_based=1 --ramp_time=10s --runtime=1m \
  --ioengine=libaio --direct=1 --verify=0 --randrepeat=0 \
  --bs=4K --iodepth=1 --rw=randread --numjobs=1

  • BUCKET_PATH 替换为您装载的存储桶的路径。

如果测试成功,系统会输出类似于以下内容的响应:

read_latency_test: (g=0): rw=randread, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=1
fio-3.33
Starting 1 process
Jobs: 1 (f=1): [f(1)][100.0%][eta 00m:00s]
read_latency_test: (groupid=0, jobs=1): err= 0: pid=78399: Tue Feb 11 21:14:35 2025
  read: IOPS=622, BW=2490KiB/s (2550kB/s)(146MiB/60001msec)
    slat (usec): min=108, max=13857, avg=1596.92, stdev=243.32
    clat (nsec): min=1539, max=141717, avg=5872.92, stdev=3230.74
    lat (usec): min=112, max=13866, avg=1602.80, stdev=244.13
    clat percentiles (nsec):
    |  1.00th=[ 2960],  5.00th=[ 3856], 10.00th=[ 4320], 20.00th=[ 4704],
    | 30.00th=[ 4896], 40.00th=[ 5088], 50.00th=[ 5280], 60.00th=[ 5536],
    | 70.00th=[ 5856], 80.00th=[ 6240], 90.00th=[ 7072], 95.00th=[ 8512],
    | 99.00th=[21120], 99.50th=[26240], 99.90th=[40704], 99.95th=[51968],
    | 99.99th=[75264]
  bw (  KiB/s): min= 2024, max= 2672, per=100.00%, avg=2491.15, stdev=105.69, samples=120
  iops        : min=  506, max=  668, avg=622.77, stdev=26.41, samples=120
  lat (usec)   : 2=0.06%, 4=6.21%, 10=89.91%, 20=2.61%, 50=1.15%
  lat (usec)   : 100=0.05%, 250=0.01%
  cpu          : usr=0.67%, sys=1.79%, ctx=37361, majf=0, minf=37
  IO depths    : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
    submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
    complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
    issued rwts: total=37355,0,0,0 short=0,0,0,0 dropped=0,0,0,0
    latency   : target=0, window=0, percentile=100.00%, depth=1

Run status group 0 (all jobs):
  READ: bw=2490KiB/s (2550kB/s), 2490KiB/s-2490KiB/s (2550kB/s-2550kB/s), io=146MiB (153MB), run=60001-60001msec

使用 Storage Transfer Service 转移数据

您可以使用 Storage Transfer Service 在可用区级存储分区和其他 Cloud Storage 存储分区之间转移数据。

所需权限

在 Cloud Storage 存储分区之间转移数据需要无代理转移权限中列出的 IAM 角色。

此外,由于区域存储分区使用分层命名空间,因此必须向 Storage Transfer Service 服务代理授予以下 IAM 权限:

  • 如果来源是可用区级存储桶:

    • 使用无代理转移权限中列出的预定义角色时,无需执行其他操作。 Storage Object Viewer (roles/storage.objectViewer) 角色已包含必要的权限 (storage.folders.list)。
  • 当目标位置为区域存储桶时:

    • 您必须向服务代理授予 Storage Object User (roles/storage.objectUser) 角色。这样即可提供所需的 storage.folders.create 权限。

如需了解如何向服务代理添加角色,请参阅:

限制

  • 支持的转移

    • 支持在区域存储分区与任何其他 Cloud Storage 位置(包括其他区域存储分区)的存储分区之间转移数据。
  • 不支持的功能

    • 事件驱动型转移
    • 跨存储桶复制
    • 基于代理的转移
  • 未最终确定的对象

    • 从区域存储桶转移未最终确定的对象时,目标存储桶中的数据可能无法反映在转移过程中对对象所做的更改。
    • 未最终确定的源对象在目标存储桶中标记为已最终确定。

创建传输作业

如需了解使用入门,请参阅使用 Storage Transfer Service 创建转移作业

后续步骤