部署 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. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

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

  3. Enable the BigQuery, Pub/Sub, Dataflow, and Compute Engine APIs.

    Enable the APIs

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

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

设置 Redis OSS 实例

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

安装 Redis OSS 实例

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  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。如需了解详情,请参阅机器系列资源和比较指南

  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 实例

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

  1. 在 Cloud Marketplace 中,前往 Redis Enterprise Cloud 弹性方案 - 随用随付

    前往 Marketplace 中的 Redis Enterprise

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

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

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

  4. 按照 Redis 文档启用 VPC 对等互连中的说明,在 Google 虚拟私有云和 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. 验证 6 个键值对是否已成功从 Redis OSS 迁移到 Redis Enterprise 实例:

    SCAN 0
    

    输出如下所示:

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

    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. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

删除 Redis Enterprise 数据库

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

后续步骤

贡献者

作者:

其他贡献者: