部署 RIOT Live Migration 以迁移到 Redis Enterprise Cloud

Last reviewed 2024-01-29 UTC

本文档介绍如何部署 RIOT Live Migration 以迁移到 Redis Enterprise Cloud。数据库架构师、DevOps 和 SRE 团队或网络管理员可以使用此架构为其团队提供近乎零停机时间的迁移。本文档假定您熟悉使用 Google Cloud CLI 和 Compute Engine。

架构

下图展示了使用 RIOT Live Migration Service 将与 Redis 兼容的来源迁移到 Redis Enterprise Cloud 的参考架构。

与 Redis 兼容的来源通过 RIOT 迁移到 Redis Enterprise Cloud。

如需详细了解此架构,请参阅用于迁移到 Redis Enterprise Cloud 的 RIOT Live Migration

本文档中的示例部署使用以下架构,其中来源是 Compute Engine 虚拟机上的 Redis OSS:

Redis OSS 通过 RIOT 和 VPC 对等互连迁移到 Redis Enterprise Cloud。

在该图中,为简单起见,Redis OSS 实例和 RIOT 已合并到单个 Compute Engine 虚拟机中。在生产环境中,我们建议 RIOT 始终在其自己的虚拟机上运行,以帮助确保更好的性能。

示例部署架构包含以下组件:

  • 来源:在 Compute Engine 虚拟机上运行的 Redis OSS 实例。
  • 目标:在 Redis 托管式 VPC 中运行的 Redis Enterprise Cloud。
  • 迁移服务:在 Redis OSS 所在的 Compute Engine 虚拟机上运行的 RIOT。
  • 网络设置:托管 VPC 与 Redis 托管 VPC 之间的 VPC 对等互连。

RIOT 迁移工具的停机时间接近于零。在从 Redis OSS(来源)迁移到 Redis Enterprise Cloud(目标)期间,您的应用仍可以访问 Redis OSS,而不会受到影响或中断服务。在迁移过程中,从 Redis OSS 初始加载数据后,RIOT Live Migration 会在 Redis OSS 发生更改时继续迁移更改。

目标

  • 通过创建和加载数据来设置 Redis OSS 来源。
  • 在 Redis Enterprise Cloud 中设置迁移目标集群。
  • 使用 RIOT Live Migration 将数据从 Redis OSS 迁移到 Redis Enterprise Cloud。
  • 了解测试、切换和后备策略。

费用

此架构的部署使用 Google Cloud 的以下收费组件:

准备工作

完成以下步骤以设置迁移环境。

  1. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  2. 确保您的 Google Cloud 项目已启用结算功能

  3. 启用 BigQuery, Pub/Sub, Dataflow, and Compute Engine API。

    启用 API

  4. 如需获得完成此部署所需的权限,请让您的管理员为您授予组织的 Billing Administrator (roles/billing.admin) IAM 角色。如需详细了解如何授予角色,请参阅管理访问权限

    您也可以通过自定义角色或其他预定义角色来获取所需的权限。

设置 Redis OSS 实例

如需开始部署,请在 Compute Engine 虚拟机上安装 Redis OSS 实例。该实例充当源实例。

安装 Redis OSS 实例

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

    激活 Cloud Shell

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

  2. 在 Cloud Shell 中,创建一个 Ubuntu 虚拟机:

    gcloud compute instances create redis-oss-riot-vm \
      --image-family=ubuntu-2004-lts \
        --image-project=ubuntu-os-cloud \
        --zone=us-central1-a \
        --machine-type=e2-medium \
        --network=VPC_NETWORK_NAME \
        --subnet=VPC_SUBNETWORK_NAME \
      --metadata=startup-script='#! /bin/bash
        apt-get update -y
        apt-get install redis-tools -y
        snap install redis'
    

    替换以下内容:

    • VPC_NETWORK_NAME:您的 VPC 网络的名称。
    • VPC_SUBNETWORK_NAME:您的 VPC 子网的名称。
  3. 使用 SSH 连接登录运行 Redis OSS 实例的 Compute Engine 实例:

    PROJECT_ID=$(gcloud info --format='value(config.project)')
    
    gcloud compute ssh redis-oss-riot-vm --project $PROJECT_ID --zone us-central1-a
    
  4. 为实时迁移启用键空间通知(这是 RIOT 的要求):

    redis-cli config set notify-keyspace-events KEA
    

验证 Redis OSS 实例是否正常运行

  1. 在 Cloud Shell 中,启动 Redis CLI

    redis-cli
    
  2. 设置和获取简单的键值对:

    set my_key my_value
    get my_key
    unlink my_key
    

    输出如下所示:

    OK
    "my_value"
    (integer) 1
    

    现在,您已创建并访问 Redis OSS 实例,并确认其可正常运行。

插入示例数据

在本部分中,您将示例数据插入 Redis OSS 实例并验证数据是否已成功插入。

  1. 在 Cloud Shell 中,启动 Redis CLI:

    redis-cli
    
  2. 添加以下六个键值对作为初始数据集。单独输入每个命令,等待输出 OK 然后再输入下一个键值对。

    set tennis federer
    
    set soccer ronaldo
    
    set basketball curry
    
    set football montana
    
    set golf woods
    
    set swimmer phelps
    
  3. 验证您是否已成功添加六个键值对:

    SCAN 0
    

    输出如下所示:

    "swimmer"
    "soccer"
    "football"
    "golf"
    "tennis"
    "basketball"
    

设置并启动 RIOT 迁移后,数据将迁移到目标 Redis Enterprise Cloud 实例。

在 Redis OSS 实例虚拟机上安装 RIOT

为了运行 RIOT,您需要确保 Compute Engine 虚拟机的大小合理。通常,我们建议您将虚拟机大小调整为 8 个 vCPU 或更大的 vCPU,具体取决于要传输的数据量和更新频率。如需了解详情,请参阅机器系列资源和比较指南

  1. 在 Cloud Shell 中,使用 SSH 连接登录运行 Redis OSS 实例的 Compute Engine 实例:

    PROJECT_ID=$(gcloud info --format='value(config.project)')
    
    gcloud compute ssh redis-oss-riot-vm --project $PROJECT_ID --zone us-central1-a
    
  2. 为 RIOT 安装 JDK:

    sudo apt install default-jre -y
    
  3. 下载并安装 RIOT:

    sudo apt-get install unzip
    
    wget https://github.com/redis-developer/riot/releases/download/v2.19.0/riot-redis-2.19.0.zip
    
    unzip riot-redis-2.19.0.zip
    
  4. 验证 RIOT 是否已正确安装:

    ./riot-redis-2.19.0/bin/riot-redis -V
    

    输出类似于以下内容,其中显示了 RIOT 徽标和版本号:

    RIOT 徽标和版本号。

您现在已在 Redis OSS 实例上安装了 RIOT 迁移工具并确认它可以正常运行。

创建 Redis Enterprise Cloud 实例

Redis Enterprise Cloud 可通过 Cloud Marketplace 获取。如果您没有将 Redis Enterprise 集群设置为目标 Redis Enterprise 实例,请按照本部分中的步骤操作。如果您已将 Redis Enterprise 集群设置为目标数据库,则可以跳过此部分并转到开始 RIOT 实时迁移

  1. 在 Cloud Marketplace 中,转到 Redis Enterprise Cloud Flexible - 随用随付

    转到 Marketplace 中的 Redis Enterprise

    如需了解详情,请参阅 Redis 文档通过 Cloud Marketplace 灵活订阅中的说明。

  2. 使用您在订阅 Redis Enterprise Cloud Flexible 时提供的 Redis 账号信息登录 Redis 控制台

  3. 按照 Redis 文档创建灵活订阅中的说明创建灵活订阅。选择 Google Cloud 作为您的云服务商,并使用所有默认设置创建一个数据库。

  4. 按照 Redis 文档启用 VPC 对等互连中的说明,在 Google Virtual Private Cloud 和 Redis 托管 VPC 之间创建 VPC 对等互连。

  5. Redis 控制台中,转到订阅,然后找到您的 Redis Enterprise 数据库连接字符串

    1. 记下专用端点 IP 地址和端口,格式如下:

      ENDPOINT_IP:ENDPOINT_PORT
      

      其中的值代表以下内容:

      • ENDPOINT_IP:Redis Enterprise 数据库的专用端点 IP 地址。
      • ENDPOINT_PORT:Redis Enterprise 数据库的专用端点端口号。
    2. 记下数据库密码。

开始 RIOT 实时迁移

如需将数据从 Redis OSS(来源)迁移到 Redis Enterprise Cloud(目标)实例,请执行以下操作:

  1. 在 Cloud Shell 中,使用 SSH 连接登录运行 Redis OSS 实例的 Compute Engine 实例:

    PROJECT_ID=$(gcloud info --format='value(config.project)')
    
    gcloud compute ssh redis-oss-riot-vm --project $PROJECT_ID --zone us-central1-a
    
  2. 在源实例和目标实例之间启动实时迁移。如果您的 Redis OSS 实例使用 Redis 7.2,您需要使用基于类型的复制。如需了解如何使用 --type 选项,请参阅 Redis 文档基于类型的复制

    ./riot-redis-2.19.0/bin/riot-redis -u redis://localhost:6379 replicate  \
    -u redis://ENDPOINT_IP:ENDPOINT_PORT \
      -a REDIS_ENTERPRISE_DB_PASSWORD \
      --mode live
    

    将以下内容替换为您在上一部分记下的值:

    • ENDPOINT_IP:Redis Enterprise 集群数据库的专用端点 IP 地址。
    • ENDPOINT_PORT:Redis Enterprise 集群数据库的专用端点端口号。
    • REDIS_ENTERPRISE_DB_PASSWORD:Redis Enterprise 集群数据库的密码。

    输出类似于以下内容:

    Listening  ? % ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━0/? (0:00:00 / ?) ?/s\
    Scanning 100% ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6/6 (0:00:00 / 0:00:00) ?/s
    

验证数据库迁移

设计和实施数据库迁移验证策略以确认数据库迁移成功非常重要。虽然您使用的验证策略取决于您的特定用例,但我们建议您对所有迁移执行以下检查:

  • 完整性检查:验证初始键值对是否已成功从 Redis OSS 迁移到 Redis Enterprise(初始加载)。
  • 动态检查:验证源中的更改是否正转移到目标实例(正在进行迁移)。

初始加载

  1. 在 Cloud Shell 中,使用 SSH 连接登录运行 Redis OSS 实例的 Compute Engine 实例:

    PROJECT_ID=$(gcloud info --format='value(config.project)')
    $ gcloud compute ssh redis-oss-riot-vm --project $PROJECT_ID --zone us-central1-a
    
  2. 启动 Redis CLI

    redis-cli -u redis://ENDPOINT_IP:ENDPOINT_PORT \
    -a REDIS_ENTERPRISE_DB_PASSWORD
    
  3. 验证六个键值对是否已成功从 Redis OSS 迁移到 Redis Enterprise 实例:

    SCAN 0
    

    输出如下所示:

    "swimmer"
    "soccer"
    "football"
    "golf"
    "tennis"
    "basketball"
    
  4. 获取网球键的值:

    get tennis
    

    输出如下所示:

    [return federer]
    
  5. 退出 Redis CLI:

    exit
    

正在进行迁移

验证对源 Redis OSS 的持续更改是否反映在目标 Redis Enterprise 实例中:

  1. 在 Cloud Shell 中,使用 SSH 连接登录 Redis OSS 虚拟机。
  2. 启动 Redis CLI:

    redis-cli
    
  3. 添加新的键值对:

    1. 添加新的 runner bolt 对:

      set runner bolt
      
    2. 更新/插入新的 tennis alcaraz 对:

      set tennis alcaraz
      

    这些命令的输出如下所示:

    OK
    
  4. 在 Redis Enterprise 实例中,观察系统是否添加了新的键值对:

    get runner
    

    输出如下所示:

    [return bolt]
    
  5. 如需验证所有键值对都存在,请检查键数:

    redis-cli info keyspace and redis-cli -u <REMOTE> info keyspace
    

    输出如下所示:

    # Keyspace
    db0:keys=7,expires=0,avg_ttl=0
    

现在,您已验证 RIOT Live Migration 已自动迁移源 Redis OSS 实例中的所有键值对,以及正在对源实例进行的任何更改。

从源实例切换到目标实例

验证数据库迁移后,您可以执行从源 Redis OSS 实例到目标 Redis Enterprise 实例的切换:

  1. 使用 Redis 访问控制列表暂停客户端对源 Redis OSS 实例的写入访问。
  2. 除非您需要为后备策略保留源数据库,否则请通过移除虚拟机实例来停用源 Redis OSS。
  3. 将客户端迁移到 Redis Enterprise 数据库实例所在的区域。如需了解详情,请参阅客户端主机的相关文档。
  4. Redis 控制台中,找到 Redis Enterprise 数据库实例的专用端点,并更新客户端与专用端点的 Redis 连接。如需了解详情,请参阅 Redis 文档中的查看和修改数据库
  5. 在 Cloud Shell 中,按 Ctrl+C 停止 RIOT 过程。

准备后备策略

切换完成后,目标 Redis Enterprise 实例即为记录系统;源 Redis OSS 实例已过时,最终将被移除。但是,当新的目标 Redis Enterprise 实例发生严重故障时,您可能希望回退到源 Redis OSS 实例。

为了从此类失败回退,您可能需要使原始源 Redis OSS 实例与目标数据库更改保持同步。如果您确信新的目标实例可靠,则可以关停源实例。

清理

以下部分介绍了如何避免 Google Cloud 项目以及您在本部署中使用的 Redis 资源日后产生费用。

删除项目

  1. 在 Google Cloud 控制台中,进入管理资源页面。

    转到“管理资源”

  2. 在项目列表中,选择要删除的项目,然后点击删除
  3. 在对话框中输入项目 ID,然后点击关闭以删除项目。

删除 Redis Enterprise 数据库

如需删除 Redis Enterprise 数据库,请参阅 Redis 文档中的删除数据库

后续步骤

贡献者

作者:

其他贡献者: