注意:

使用同步在 Oracle Cloud Infrastructure 中执行跨区域双向同步

简介

跨区域对象存储同步对于各种云工作负载至关重要,包括数据备份、灾难恢复和多区域访问。虽然 Oracle Cloud Infrastructure (OCI) 为 OCI Object Storage 提供复制功能,但它不提供原生双向同步解决方案。这种限制意味着用户必须依靠自定义实施来跨区域同步文件。

Syncthing 是一个开源的去中心化文件同步工具,提供连续的双向同步,也可以实时运行。与基于事件驱动模型进行对象复制的 OCI Functions 不同,Syncthing 可在虚拟机 (VM) 之间高效同步整个文件结构,同时支持本地和 OCI Object Storage 挂载的目录。

在本教程中,我们将使用 OCI 资源管理器堆栈在两个区域的 OCI 计算实例上部署同步,从而在本地 VM 存储与 OCI 对象存储装载的目录之间实现自动双向同步。

注意事项

使用 s3fs 装载与 OCI Object Storage 的同步时:

何时同步是一个好主意?

目标

先决条件

任务 1:为 VM 部署准备必要的信息

  1. 下载 OCI 资源管理器堆栈。此堆栈自动部署在 VM.Standard.E5 上运行 Oracle Linux 8 的 VM。弹性配置。它使用 CloudInit 安装 Syncthing,挂载现有 OCI 存储桶,并使用 s3fs 配置访问。VM 预配了 SSH 访问权限、公共 IP 和标记,以便于识别。有关详细信息,请参阅 OCI 资源管理器堆栈

  2. 创建在两个目标区域中具有公共子网的 VCN。

    将在两个位置部署堆栈,以预配具有同步的 VM,从而实现双向跨区域存储同步。部署后,可以使用 VM 的公共 IP 在浏览器中访问同步。

  3. 确保将在每个区域中执行测试的 OCI 对象存储存储桶。存储桶的可见性可以是专用

  4. 为 s3fs 挂载创建客户密钥。客户密钥将用于访问 OCI 对象存储。

    1. 登录到 OCI 控制台,导航到概要信息,单击您的用户名和客户密钥

      配置文件 - 客户密钥

    2. 单击生成密钥并输入名称,例如 s3fs-access

    3. 确保复制生成的密钥,因为稍后将在任务 2 中使用它。

      客户密钥访问密钥

    4. 单击访问键并复制值,因为稍后将在任务 2 中使用该值。

      客户密钥访问密钥

    5. 时段详细信息页复制名称空间,稍后将在任务 2 中使用。

      对象存储桶名称空间

任务 2:应用堆栈

  1. 登录到 OCI 控制台,导航到开发人员服务资源管理器,然后单击堆栈

    OCI 资源管理器堆栈数

  2. 创建 Terraform OCI 资源管理器堆栈。有关更多信息,请参见 Creating a Stack from a Zip File

    1. 单击创建堆栈

    2. 选择 .zip 文件并添加堆栈。

    3. 输入 Tag key

    4. 单击下一步

  3. 配置变量页中,输入以下信息。

    • 区间:输入区间。
    • VCN 和子网:选择现有 VCN 和公共子网。
    • 修改 vm display name(如果需要)
    • 公共 SSH 密钥:输入 VM 的公共 SSH 密钥。
    • 可用性域:选择可用性域。
    • 客户密钥 OCID 和客户密钥访问密钥:输入在任务 1 中创建的客户密钥 OCID 和客户密钥访问密钥。
    • 组名称:输入组名称。
    • 对象存储名称空间:选择对象存储名称空间。
  4. 单击下一步并复核信息。如果一切正常,则选择运行应用并单击创建

    OCI ORM 应用堆栈

    应用作业成功完成后,应返回新创建的 VM 的公共和专用 IP。

    ORM 堆栈输出

  5. 在辅助区域中重复这些步骤以在辅助区域中创建第二个 VM。

  6. 通过使用以下命令通过 SSH 进行连接,确认 OCI Object Storage 存储桶已挂载到 VM 级别的 /home/opc/logging

    mount | grep s3fs
    

    如果存储桶成功挂载,您应该会看到类似于以下内容的输出:

    装载存储桶信息

    这确认 s3fs 已将存储桶挂载到任何 VM 上的 /home/opc/logging

任务 3:配置同步

两个 VM 部署在两个区域中后,按照以下步骤在每个 VM 上配置同步,以在它们之间同步存储。

  1. 复制第一个区域中 VM 的公共 IP,并在浏览器中使用它来访问同步界面。输入以下 URL。

    http://<vm1-public-ip>:8384
    
  2. 访问该接口后,您将看到同步接口,该接口将与以下图像类似。文件夹远程设备是您将在下一步中配置为同步的区域。

    同步屏幕

    注:您可以在 GUI 部分的 Settings 中设置 usernamepassword 以删除警告。

  3. Folders(文件夹)部分中,单击 Add Folder(添加文件夹)以在同步管理界面中创建或包含本地 VM 文件夹。

    正在同步添加文件夹

  4. 输入以下信息以配置本地文件夹,然后单击保存

    • 文件夹标签:用于标识文件夹的用户友好名称。例如,local_VM1
    • 文件夹路径:本地文件夹的目录路径。例如,~/local_VM1

    正在同步本地文件夹

    您可以在 VM 终端中检查新文件夹 local_VM1 是否已创建。

  5. 从辅助区域重复 VM 中的步骤 1 到 4,并在 VM2 同步界面中添加 local_VM2 文件夹。

  6. 配置两个 VM 之间的跨区域同步连接,从 VM1 开始。

    1. 在第一个同步 VM 的 Remote Devices 部分中,单击 Add Remote Device 以包含第二个区域中的远程文件夹。

      添加远程设备

    2. 常规中,输入以下信息。

      • 设备 ID:这是第二个同步设备的 ID。在 VM2 上,打开“同步”界面,导航到操作显示 ID ,复制显示的值,然后将其粘贴到此字段。

        远程设备 - 显示 ID

      • 设备名称:输入相关名称,例如 remote_VM2

        远程设备 - 常规选项卡

    3. Sharing(共享)中,选择要与远程设备共享的 local_VM1

      远程设备 - 共享标签页

    4. Advanced 中,在 Addresses 中输入 tcp://<vm2-public-ip>:2200022000 是用于同步数据的 TCP 端口。

    5. 单击保存

  7. 此时,在 VM1 Syncthing 上,本地文件夹 local_VM1 应显示为绿色 Up to Date ,远程设备 remote_VM2 将显示 Disconnected

    要完成连接,请使用从 VM1 Syncthing 收集的等效数据对 VM2 Syncthing 执行相同的步骤,输入 Device IDtcp://<vm1-public-ip>:22000 作为地址Device name ,例如 remote_VM1

    注:请确保端口 22000 在 VCN 的安全列表中处于打开状态。

  8. 在等效配置之后,应在每个同步界面中提示您接受添加远程文件夹。单击添加

    接受远程文件夹

  9. 系统会提示您使用特定详细信息在本地保存它,例如,在 VM1 上,系统会提示您保存传入的 local_VM2 ,您可以将其在 VM1 上的名称更改为 remote_VM2 以获得更清晰的显示。此外,还可以将其映射到本地 VM1 路径。它可以是任何路径;如果新文件夹不存在,则会创建新文件夹。您还可以选择 ~/local_VM1,这意味着两个 VM 中的两个文件夹的内容将合并到同一位置。例如,输入路径 ~/remote_VM2

  10. 对 VM2 执行与传入 local_VM1 文件夹相同的步骤,并将其映射到 remote_VM1

  11. 现在,两个 VM 应同步并由 Syncthing 管理;在 VM1 上为 local_VM1remote_VM2 ;在 VM2 上为 local_VM2remote_VM1

    已同步文件夹

任务 4:本地存储的测试同步

要测试同步,请使用 SSH 登录到每个 VM。在 opc 主目录内,您将找到两个文件夹。

为了验证同步,我们将在一个 VM 上的本地文件夹中添加或修改文件,并检查更改是否出现在远程 VM 上的相应文件夹中。此外,我们将监视 Syncthing 接口或日志,以确认两个 OCI 区域之间的成功同步。

  1. 通过 SSH 连接到 VM1。

    ssh opc@<vm1-public-ip>
    
  2. 运行以下命令以导航到本地同步共享 local_VM1 文件夹。

    cd ~/local_VM1
    
  3. 运行以下命令以创建测试文件。

    echo "testing sync" > testVM1.txt
    
  4. 打开新终端并将 SSH 连接到 VM2。

    ssh opc@<vm2-public-ip>
    
  5. 运行以下命令以导航到 VM2 上的共享文件夹。

    cd ~/remote_VM1
    
  6. 运行以下命令检查文件是否出现。

    ls -l
    cat testVM1.txt
    
  7. Perform the same steps on VM2 and check that a file appears on VM1 in remote_VM2 folder.

  8. 验证同步界面中的同步状态。在浏览器中打开 http://<vm1-public-ip>:8384http://<vm2-public-ip>:8384 以检查日志和同步状态。

    已同步的文件

任务 5:测试 OCI 对象存储存储存储桶内容的同步

存储桶挂载在 /home/opc/logging 目录中部署的 VM 上。要测试和同步位于已挂载存储桶中的文件,需要重做前面的步骤以将 logging VM 目录添加为本地文件夹,然后从远程设备共享该目录。将会看到类似的情况:

接下来,在 logging 目录中创建文件,使其显示在 OCI 存储桶中,如果配置正确,则同步到 VM2 logging 目录,因此也同步到跨区域的第二个存储桶中。

存储桶同步

任务 6:执行更多测试

有两点可以轻松使用之前配置的相同文件夹和共享设备进行进一步测试。

确认

更多学习资源

浏览 docs.oracle.com/learn 上的其他实验室,或者访问 Oracle Learning YouTube 渠道上的更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 成为 Oracle Learning Explorer。

有关产品文档,请访问 Oracle 帮助中心