将 Redis 和 Valkey 工作负载迁移到 Memorystore for Valkey

本文档介绍了如何自动将自行管理的 Redis 和 Valkey 工作负载迁移到 Memorystore for Valkey。迁移到全代管式环境可消除管理自有基础设施的运营负担,因此您无需处理手动操作系统修补、复制设置或自定义备份脚本。借助此功能,您可以利用内置的自动故障切换、安全的 VPC 连接和零停机伸缩。

通过将自行管理的工作负载迁移到 Memorystore for Valkey,您可以获得以下优势,从而消除运营工作并实现数据库基础设施现代化:

  • 消除运维开销:将手动和耗时的任务(例如操作系统修补、基础架构监控、备份脚本和复制管理)分流到 Google Cloud。因此,您可以专注于应用开发,而不是数据库维护。
  • 实现企业级高可用性:受益于全代管式 99.99% SLA。Memorystore for Valkey 提供自动故障切换以及内置备份和恢复功能。这可以保护您的应用免受意外节点故障的影响,并确保快速灾难恢复。
  • 以接近零的停机时间进行扩缩:动态扩缩实例,以应对不可预测的流量高峰。您可以扩展到数百个节点(最多 250 个分片),而无需使应用离线。
  • 增强安全性:用安全的内置 VPC 连接和基于 Identity and Access Management (IAM) 的精细访问权限控制,取代复杂的手动配置网络规则。这可确保Google Cloud的严格安全边界能够保护您的数据。
  • 整合和升级实例:将分散、孤立且自行管理的实例合并到 Memorystore for Valkey 中的单个高性能部署中。在此迁移过程中,您还可以自动将过时的 Redis 或 Valkey 版本升级到最新支持的版本。
  • 解锁高级实时分析和生成式 AI:过渡到经过优化的环境,为缓存和会话管理提供微秒级延迟。为了助力您的生成式 AI (GenAI) 应用,您可以立即以托管方式使用 Vector Search 等高级功能。

版本支持

本部分中的表格列出了有关源 Redis 和 Valkey 自行管理实例以及 Memorystore for Valkey 中的目标实例的以下信息:

  • 迁移支持的来源实例的类型和版本
  • 可供您迁移工作负载的目标 Memorystore for Valkey 实例的版本
来源实例类型 源实例版本 目标实例版本
Redis 3.2.x - 7.2.x Valkey 7.2、8.0、9.0 和 9.1
Valkey 7.x、8.x 和 9.x Valkey 7.2、8.0、9.0 和 9.1

准备工作

在开始迁移工作负载之前,请先完成本部分中的前提条件。

使用 Google Cloud 控制台、gcloud CLI 和 API

如需使用 Google Cloud 控制台、Google Cloud CLI (gcloud CLI) 和 API,请执行以下操作:

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  2. Verify that billing is enabled for your Google Cloud project.

  3. 安装并初始化 Google Cloud CLI。

    如果您之前安装了 gcloud CLI,请运行 gcloud components update,确保您拥有最新版本。如需访问 Memorystore for Valkey gcloud CLI 命令,您至少需要使用 gcloud CLI 489.0.0 版。

  4. 启用 Memorystore for Valkey API。
    Memorystore for Valkey API
  5. 启用 Network Connectivity API。
    Network Connectivity API
  6. 启用 Service Consumer Management API。
    Service Consumer Management API
  7. 启用 Compute Engine API。
    Compute Engine API

分配角色和权限

如需将自行管理的 Redis 和 Valkey 工作负载迁移到 Memorystore for Valkey,请让管理员为您授予 Google Cloud 项目的 Memorystore Admin (roles/memorystore.admin) IAM 角色。如需详细了解此角色,请参阅预定义角色。

如需创建和查看网络连接,请让管理员针对您的 Google Cloud 项目向您授予 Compute Network Admin (roles/compute.networkAdmin) IAM 角色。如需详细了解此角色,请参阅 Compute Engine 角色。

迁移工作负载的工作流

如需将自行管理的 Redis 和 Valkey 工作负载迁移到 Memorystore for Valkey,请执行以下操作:

  1. 准备源实例:配置自行管理的 Redis 或 Valkey 实例,以允许安全连接和向 Memorystore for Valkey 进行出站复制。
  2. 准备目标实例:确定所需的实例规格,例如分片数量和节点类型。
  3. 创建目标实例:预配 Memorystore for Valkey 实例,以接收迁移的数据。
  4. 配置网络连接:设置网络连接。此连接可让目标实例(位于 Google 管理的 VPC 网络中)发起与源实例(位于您的 VPC 网络中)的连接。这样,复制关系便建立起来了。
  5. 开始迁移:启动同步流程。目标实例会自动连接到源实例,并作为读取副本持续复制数据。
  6. 监控迁移:验证迁移是否顺利进行,以及迁移状态是否为 HEALTHY。
  7. 完成迁移:将应用流量切换到目标实例。

准备源实例

您必须准备好自行管理的 Redis 或 Valkey 实例,以便将工作负载迁移到目标 Memorystore for Valkey 实例。

如需允许从目标实例的节点连接到源实例的节点,请执行以下操作:

  • 如果您在来源节点上启用了保护模式,请将其停用。
  • 如果您使用显式 bind 指令配置了源节点,请更新这些节点,以允许来自目标节点的传入连接。目标节点从网络连接的子网中的 IP 地址发起连接。
  • 更新可能阻止来自目标节点的传入连接的所有防火墙规则。
  • 如果您在源节点上启用了身份验证和传输层安全协议 (TLS),请将其停用。

如需让目标节点与源节点建立复制关系,请执行以下操作:

  • 请勿重命名任何执行数据修改或用于复制的 Valkey 或 Redis 命令(例如 PING、PSYNC 和 HSET)。
  • 如果您对实例使用访问权限控制列表 (ACL),请为 default 用户允许以下命令,以便目标实例可以建立复制:
    • REPLCONF
    • SYNC
    • PSYNC
    • PING
    • INFO
    • CLUSTER | NODES
  • 确保源实例具有足够的内存和 CPU 容量,可以管理来自目标节点的额外复制负载。

准备目标实例

为确保复制过程顺利进行,您必须适当调整目标 Memorystore for Valkey 实例的大小,以处理来自源实例的传入工作负载。为此,请确定目标实例的确切规格。这些规范包括与源实例的兼容性、集群模式、数据库数量、分片数量、实例版本和节点类型。

如需准备目标实例,请遵循以下准则:

  • 与来源实例的兼容性:来源实例和目标实例必须位于同一 Google Cloud 项目和区域中。
  • 集群模式:目标实例的集群模式必须与源实例的集群模式一致。如果源实例已停用集群模式,则目标实例也必须停用集群模式。否则,目标实例必须启用集群模式。
  • 数据库数量:如果目标实例已停用集群模式,则该实例上的逻辑数据库数量必须等于或大于源实例上的数据库数量。
  • 分片数量:如果目标实例已启用集群模式,则该实例上的分片数量必须与源实例上的分片数量一致。不过,源实例和目标实例上的副本数量可以不同。
  • 实例版本:目标实例的版本必须与源实例的版本兼容。如需了解详情,请参阅版本支持。
  • 维护版本:目标实例的维护版本必须为 MEMORYSTORE_20260313_01_00 或更高版本。如需了解详情,请参阅维护简介。
  • 节点类型:目标实例的节点类型必须足够大,才能处理从源节点接收的数据。如需详细了解可为目标实例选择的节点类型以及每种节点类型对应的键空间容量,请参阅节点类型规范。

创建目标实例

如果您没有符合要求的目标实例来接收 Memorystore for Valkey 从来源实例迁移的数据,则必须创建该实例。

如需创建此实例,请使用 Google Cloud 控制台、gcloud CLI 或 REST API。如需详细了解如何创建实例,请参阅创建实例。

配置网络连接

如需将源实例的工作负载迁移到目标实例,目标节点必须连接到源节点。如需启用此连接,您必须使用网络连接。目标节点从来源实例的 VPC 网络中与网络连接关联的子网发起连接。

您可以使用满足以下要求的网络连接:

  • 它必须与目标实例位于同一 Google Cloud 项目和区域中。
  • 其子网必须与源实例位于同一 VPC 网络中。
  • 来源实例的子网必须具有足够的 IP CIDR 范围,该范围至少支持 N+1 个可用 IP 地址(其中 N 是目标实例中的节点数)。例如,如果目标实例有三个分片和一个副本,则它有六个节点:三个节点用于主实例,三个节点用于副本。因此,您至少需要七个 IP 地址。
  • 子网范围不能与 10.0.0.0/23 重叠,因为 Memorystore for Valkey 会预留此范围。

如果您的网络连接不满足这些要求,或者您没有网络连接,则必须创建一个。如需了解详情,请参阅创建网络连接。

开始迁移

通过启动迁移,目标实例会与源实例建立复制关系。目标实例会自动复制应用写入源实例的所有数据。目标实例成为源实例的读取副本。

如需开始迁移,请使用 Google Cloud 控制台、gcloud CLI 或 REST API。

控制台

  1. 在 Google Cloud 控制台中,前往 Memorystore for Valkey 页面。

    Memorystore for Valkey

  2. 点击目标实例的 ID。

  3. 在实例概览页面上,点击开始迁移。

  4. 在迁移自行管理的 Redis 和 Valkey 实例窗口中,执行以下操作:

  5. 在准备标签页上,阅读有关源实例的前提条件和网络连接指南的信息。然后,点击继续。

  6. 在连接标签页中,执行以下操作:

    1. 输入源实例的 IP 地址和端口。您在准备源实例中记下了此信息。
    2. 选择要用于迁移数据的网络连接。
    3. 点击继续。
  7. 在审核标签页上,查看与迁移过程相关的信息。此信息包括目标实例的 ID、来源实例的 IP 地址和端口,以及网络连接的名称。查看这些信息后,点击开始迁移。

  8. 在实例概览页面上,验证是否显示正在迁移状态。

如果目标节点无法连接到源节点,或者源实例无法将数据复制到目标实例,则迁移会失败。

发生这种情况时,Memorystore for Valkey 会将目标实例回滚到您开始迁移过程之前的状态。目标实例的状态会恢复为就绪,并且该实例会再次具有读取和写入功能。

解决导致迁移失败的问题后,您可以重新开始迁移。

gcloud

使用 gcloud memorystore instances start-migration 命令,如下所示:

gcloud memorystore instances start-migration INSTANCE_ID \
--project=PROJECT_ID \
--location=REGION_ID \
--source-ip=SOURCE_IP_ADDRESS \
--source-port=SOURCE_PORT \
--network-attachment=projects/PROJECT_ID/locations/REGION_ID/networkAttachments/NETWORK_ATTACHMENT_ID

进行以下替换:

  • INSTANCE_ID:目标实例的 ID。
  • PROJECT_ID:包含此实例的Google Cloud 项目的 ID 或项目编号。
  • REGION_ID:实例所在区域的 ID。
  • SOURCE_IP_ADDRESS:来源实例的 IP 地址。您在准备源实例中记下了此 IP 地址。
  • SOURCE_PORT:源实例的端口号。您在准备源实例中记下了此端口。
  • NETWORK_ATTACHMENT_ID:网络连接的 ID。

如需确认迁移已成功启动,请使用 gcloud memorystore instances describe 命令,如下所示:

gcloud memorystore instances describe INSTANCE_ID \
--project=PROJECT_ID \
--location=REGION_ID

验证 state 参数旁边是否显示 MIGRATING 状态。

如果目标节点无法连接到源节点,或者源实例无法将数据复制到目标实例,则迁移会失败。

发生这种情况时,Memorystore for Valkey 会将目标实例回滚到您开始迁移过程之前的状态。目标实例的状态会还原为 ACTIVE,并且该实例会再次具有读取和写入功能。

解决导致迁移失败的问题后,您可以重新开始迁移。

REST

如需开始迁移,请使用以下 REST API 命令。

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_ID:包含目标实例的 Google Cloud 项目的 ID 或项目编号。
  • REGION_ID:此实例所在区域的 ID。
  • INSTANCE_ID:实例的 ID。
  • SOURCE_IP_ADDRESS:来源实例的 IP 地址。您已在准备源实例中记下此 IP 地址。
  • SOURCE_PORT:源实例的端口号。您在准备源实例中记下了此端口。
  • NETWORK_ATTACHMENT_ID:网络连接的 ID。

HTTP 方法和网址:

POST https://memorystore.googleapis.com/v1/projects/PROJECT_ID/locations/REGION_ID/instances/INSTANCE_ID:startMigration

请求 JSON 正文:

{
  "selfManagedSource": {
    "ipAddress": "SOURCE_IP_ADDRESS",
    "port": SOURCE_PORT,
    "networkAttachment": "projects/PROJECT_ID/regions/REGION_ID/networkAttachments/NETWORK_ATTACHMENT_ID"
  }
}

如需发送您的请求,请展开以下选项之一:

您应该收到类似以下内容的 JSON 响应:

{
  "name": "projects/PROJECT_ID/locations/REGION_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.memorystore.v1.OperationMetadata",
    "createTime": "2026-10-26T20:00:00.000000000Z",
    "target": "projects/PROJECT_ID/locations/REGION_ID/instances/INSTANCE_ID",
    "verb": "startMigration",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": false
}

监控迁移

为确保迁移顺利进行,请同时监控来源实例和目标实例。

监控源实例

在源实例上,验证源节点上的客户端输出缓冲区用量是否保持在较低水平。如需检查缓冲区使用情况,请执行以下操作之一:

  • 使用现有的监控信息中心
  • 使用 Redis 或 Valkey 客户端连接到源实例,然后运行 INFO CLIENTS 命令以检查输出缓冲区指标

持续低用量表示延迟极低,并且数据已成功从源实例同步到目标实例。

监控目标实例

您可以监控从源实例到 Memorystore for Valkey 的迁移的健康状况。为此,请检查目标实例的迁移状态 (/instance/migration_status) 指标,以验证实例的当前状态是否为 HEALTHY。此状态表示,在迁移过程中,源实例和目标实例的分片之间的复制链接处于活跃状态且正常运行。

如需使用Google Cloud 控制台检查实例的迁移状态指标,请执行以下操作:

  1. 在 Google Cloud 控制台中,前往 Metrics Explorer 页面。

    Metrics Explorer

  2. 从指标菜单中,选择迁移状态指标。为此,请依次选择 Memorystore 实例 > 实例 > 迁移状态,然后点击应用。

  3. 在过滤条件字段中,添加以下过滤条件:instance_id = (equals) INSTANCE_ID。

    将 INSTANCE_ID 替换为目标实例的 ID。

  4. 在结果部分中,查看实例的当前状态。如果显示 HEALTHY 状态,则表示实例正常运行,您可以完成迁移。

    如果未显示 HEALTHY 状态,则可以使用目标实例的主节点的迁移状态指标。通过监控这些节点,您可以确定是否有任何特定节点运行状况不佳。

    如需对实例节点使用迁移状态指标,请执行以下操作:

    1. 从指标菜单中,选择迁移状态指标。为此,请依次选择 Memorystore 实例节点 > 实例 > 迁移状态,然后点击应用。

    2. 在过滤条件字段中,添加以下过滤条件:role = (equals) primary。

    3. 在结果部分中,验证所有主节点的当前状态是否为运行状况良好。如果状态为 HEALTHY,则表示节点正常运行,您可以完成迁移。

完成迁移

如需完成迁移,请使用 Google Cloud 控制台、gcloud CLI 或 REST API。

控制台

  1. 在 Google Cloud 控制台中,前往 Memorystore for Valkey 页面。

    Memorystore for Valkey

  2. 点击目标实例的 ID。

  3. 在实例概览页面上,点击完成迁移。

  4. 在完成迁移对话框中,执行以下操作:

    1. 如果您想确保目标实例复制源实例中的所有数据,请选择标准。

    2. 在实例 ID 文本字段中,输入目标实例的 ID。

    3. 点击完成迁移。

  5. 在实例概览页面上,验证是否显示已迁移状态。

gcloud

使用 gcloud memorystore instances finish-migration 命令,如下所示:

gcloud memorystore instances finish-migration INSTANCE_ID \
--project=PROJECT_ID \
--location=REGION_ID

进行以下替换:

  • INSTANCE_ID:目标实例的 ID
  • PROJECT_ID:包含此实例的Google Cloud 项目的 ID 或项目编号
  • REGION_ID:实例所在区域的 ID

如需确认迁移成功完成,请使用 gcloud memorystore instances describe 命令,如下所示:

gcloud memorystore instances describe INSTANCE_ID \
--project=PROJECT_ID \
--location=REGION_ID

验证 state 参数旁边是否显示 MIGRATED 状态。

REST

如需完成迁移,请使用以下 REST API 命令。

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_ID:包含目标实例的 Google Cloud 项目的 ID。
  • REGION_ID:此实例所在区域的 ID。
  • INSTANCE_ID:实例的 ID。
  • FORCE_BOOLEAN:可选。此参数决定 Memorystore for Valkey 是否强制立即完成迁移。

    • 如果您将此参数设置为 true,则 Memorystore for Valkey 会立即完成迁移,以便您可以将应用流量切换到目标实例。不过,Memorystore for Valkey 可能无法将来源实例中的所有数据复制到目标实例中。
    • 如果您将此参数设置为 false,则 Memorystore for Valkey 会将来源实例中的所有数据复制到目标实例,直到您完成迁移。

HTTP 方法和网址:

POST https://memorystore.googleapis.com/v1/projects/PROJECT_ID/locations/REGION_ID/instances/INSTANCE_ID:finishMigration

请求 JSON 正文:

{
  "force": FORCE_BOOLEAN
}

如需发送您的请求,请展开以下选项之一:

您应该收到类似以下内容的 JSON 响应:

{
  "name": "projects/PROJECT_ID/locations/REGION_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.memorystore.v1.OperationMetadata",
    "createTime": "2026-10-26T20:00:00.000000000Z",
    "target": "projects/PROJECT_ID/locations/REGION_ID/instances/INSTANCE_ID",
    "verb": "finishMigration",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": false
}