注意:
- 本教程需要访问 Oracle Cloud。要注册免费账户,请参阅开始使用 Oracle Cloud Infrastructure 免费套餐。
- 它对 Oracle Cloud Infrastructure 身份证明、租户和区间使用示例值。完成实验室后,请使用特定于云环境的那些值替换这些值。
使用同步在 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 的同步时:
-
s3fs (OCI Object Storage) 写入性能可能是一个瓶颈:与本地磁盘相比,使用 s3fs 直接写入 OCI Object Storage 更慢。
-
大型文件的同步速度可能会很慢:直接从 OCI 对象存储写入和读取大型文件可能需要几分钟而不是几秒钟。
-
块级同步优势丢失:由于 OCI 对象存储需要全对象写入,因此 Syncthing 的块级同步效率降低。
-
优秀实践:先在本地同步,然后将文件移动到 OCI 对象存储。
何时同步是一个好主意?
-
最适合实时同步,尤其适用于跨区域的高频小文件更改。
-
与 OCI Functions 不同,它是双向同步的理想选择,它需要额外的逻辑来进行双向更新。
-
非常适合混合云或本地部署到 OCI 同步,因为 OCI 对象存储直接集成不可行。
-
同步本地 VM 存储时效果最佳:避免使用 s3fs 挂载的存储桶进行直接同步。
-
不适合大型批处理文件传输: OCI Functions 可通过每个对象处理更有效地处理这些数据。
目标
-
在两个区域中部署 OCI 资源管理器堆栈,以自动预配预安装了 Syncthing 的两个 OCI 计算实例。
-
在两个 VM 上配置同步,以便在多个区域中实时、分散地同步本地存储和 OCI Object Storage 挂载的目录。
先决条件
-
访问具有两个启用区域以实现跨区域同步的 OCI 租户。
-
创建和管理 OCI 计算实例、OCI 对象存储存储桶和网络资源的权限。
-
用于 VM 部署的每个区域中具有公共子网的现有 VCN。
-
这两个区域中的现有 OCI Object Storage 存储桶将用于同步。
-
S3 文件系统 (s3fs) 的客户密钥,用于在 VM 上装载 OCI 对象存储存储桶。
任务 1:为 VM 部署准备必要的信息
-
下载 OCI 资源管理器堆栈。此堆栈自动部署在 VM.Standard.E5 上运行 Oracle Linux 8 的 VM。弹性配置。它使用 CloudInit 安装 Syncthing,挂载现有 OCI 存储桶,并使用 s3fs 配置访问。VM 预配了 SSH 访问权限、公共 IP 和标记,以便于识别。有关详细信息,请参阅 OCI 资源管理器堆栈。
-
创建在两个目标区域中具有公共子网的 VCN。
将在两个位置部署堆栈,以预配具有同步的 VM,从而实现双向跨区域存储同步。部署后,可以使用 VM 的公共 IP 在浏览器中访问同步。
-
确保将在每个区域中执行测试的 OCI 对象存储存储桶。存储桶的可见性可以是专用。
-
为 s3fs 挂载创建客户密钥。客户密钥将用于访问 OCI 对象存储。
-
登录到 OCI 控制台,导航到概要信息,单击您的用户名和客户密钥。
-
单击生成密钥并输入名称,例如
s3fs-access
。 -
确保复制生成的密钥,因为稍后将在任务 2 中使用它。
-
单击访问键并复制值,因为稍后将在任务 2 中使用该值。
-
从时段详细信息页复制名称空间,稍后将在任务 2 中使用。
-
任务 2:应用堆栈
-
登录到 OCI 控制台,导航到开发人员服务、资源管理器,然后单击堆栈。
-
创建 Terraform OCI 资源管理器堆栈。有关更多信息,请参见 Creating a Stack from a Zip File 。
-
单击创建堆栈。
-
选择
.zip
文件并添加堆栈。 -
输入 Tag key 。
-
单击下一步。
-
-
在配置变量页中,输入以下信息。
- 区间:输入区间。
- VCN 和子网:选择现有 VCN 和公共子网。
- 修改 vm display name(如果需要)。
- 公共 SSH 密钥:输入 VM 的公共 SSH 密钥。
- 可用性域:选择可用性域。
- 客户密钥 OCID 和客户密钥访问密钥:输入在任务 1 中创建的客户密钥 OCID 和客户密钥访问密钥。
- 组名称:输入组名称。
- 对象存储名称空间:选择对象存储名称空间。
-
单击下一步并复核信息。如果一切正常,则选择运行应用并单击创建。
应用作业成功完成后,应返回新创建的 VM 的公共和专用 IP。
-
在辅助区域中重复这些步骤以在辅助区域中创建第二个 VM。
-
通过使用以下命令通过 SSH 进行连接,确认 OCI Object Storage 存储桶已挂载到 VM 级别的
/home/opc/logging
。mount | grep s3fs
如果存储桶成功挂载,您应该会看到类似于以下内容的输出:
这确认 s3fs 已将存储桶挂载到任何 VM 上的
/home/opc/logging
。
任务 3:配置同步
两个 VM 部署在两个区域中后,按照以下步骤在每个 VM 上配置同步,以在它们之间同步存储。
-
复制第一个区域中 VM 的公共 IP,并在浏览器中使用它来访问同步界面。输入以下 URL。
http://<vm1-public-ip>:8384
-
访问该接口后,您将看到同步接口,该接口将与以下图像类似。文件夹和远程设备是您将在下一步中配置为同步的区域。
注:您可以在 GUI 部分的 Settings 中设置 username 和 password 以删除警告。
-
在 Folders(文件夹)部分中,单击 Add Folder(添加文件夹)以在同步管理界面中创建或包含本地 VM 文件夹。
-
输入以下信息以配置本地文件夹,然后单击保存。
- 文件夹标签:用于标识文件夹的用户友好名称。例如,
local_VM1
。 - 文件夹路径:本地文件夹的目录路径。例如,
~/local_VM1
。
您可以在 VM 终端中检查新文件夹
local_VM1
是否已创建。 - 文件夹标签:用于标识文件夹的用户友好名称。例如,
-
从辅助区域重复 VM 中的步骤 1 到 4,并在 VM2 同步界面中添加
local_VM2
文件夹。 -
配置两个 VM 之间的跨区域同步连接,从 VM1 开始。
-
在第一个同步 VM 的 Remote Devices 部分中,单击 Add Remote Device 以包含第二个区域中的远程文件夹。
-
在常规中,输入以下信息。
-
设备 ID:这是第二个同步设备的 ID。在 VM2 上,打开“同步”界面,导航到操作、显示 ID ,复制显示的值,然后将其粘贴到此字段。
-
设备名称:输入相关名称,例如
remote_VM2
。
-
-
在 Sharing(共享)中,选择要与远程设备共享的
local_VM1
。 -
在 Advanced 中,在 Addresses 中输入
tcp://<vm2-public-ip>:22000
,22000
是用于同步数据的 TCP 端口。 -
单击保存。
-
-
此时,在 VM1 Syncthing 上,本地文件夹
local_VM1
应显示为绿色 Up to Date ,远程设备remote_VM2
将显示 Disconnected 。要完成连接,请使用从 VM1 Syncthing 收集的等效数据对 VM2 Syncthing 执行相同的步骤,输入 Device ID 、
tcp://<vm1-public-ip>:22000
作为地址和 Device name ,例如remote_VM1
。注:请确保端口
22000
在 VCN 的安全列表中处于打开状态。 -
在等效配置之后,应在每个同步界面中提示您接受添加远程文件夹。单击添加。
-
系统会提示您使用特定详细信息在本地保存它,例如,在 VM1 上,系统会提示您保存传入的
local_VM2
,您可以将其在 VM1 上的名称更改为remote_VM2
以获得更清晰的显示。此外,还可以将其映射到本地 VM1 路径。它可以是任何路径;如果新文件夹不存在,则会创建新文件夹。您还可以选择~/local_VM1
,这意味着两个 VM 中的两个文件夹的内容将合并到同一位置。例如,输入路径~/remote_VM2
。 -
对 VM2 执行与传入
local_VM1
文件夹相同的步骤,并将其映射到remote_VM1
。 -
现在,两个 VM 应同步并由 Syncthing 管理;在 VM1 上为
local_VM1
和remote_VM2
;在 VM2 上为local_VM2
和remote_VM1
。
任务 4:本地存储的测试同步
要测试同步,请使用 SSH 登录到每个 VM。在 opc 主目录内,您将找到两个文件夹。
-
本地文件夹 (
local_VM1
):存储此 VM 上的文件。 -
远程文件夹 (
remote_VM2
):反映第二个 VM 中的同步文件。
为了验证同步,我们将在一个 VM 上的本地文件夹中添加或修改文件,并检查更改是否出现在远程 VM 上的相应文件夹中。此外,我们将监视 Syncthing 接口或日志,以确认两个 OCI 区域之间的成功同步。
-
通过 SSH 连接到 VM1。
ssh opc@<vm1-public-ip>
-
运行以下命令以导航到本地同步共享
local_VM1
文件夹。cd ~/local_VM1
-
运行以下命令以创建测试文件。
echo "testing sync" > testVM1.txt
-
打开新终端并将 SSH 连接到 VM2。
ssh opc@<vm2-public-ip>
-
运行以下命令以导航到 VM2 上的共享文件夹。
cd ~/remote_VM1
-
运行以下命令检查文件是否出现。
ls -l cat testVM1.txt
-
Perform the same steps on VM2 and check that a file appears on VM1 in
remote_VM2
folder. -
验证同步界面中的同步状态。在浏览器中打开
http://<vm1-public-ip>:8384
和http://<vm2-public-ip>:8384
以检查日志和同步状态。
任务 5:测试 OCI 对象存储存储存储桶内容的同步
存储桶挂载在 /home/opc/logging
目录中部署的 VM 上。要测试和同步位于已挂载存储桶中的文件,需要重做前面的步骤以将 logging
VM 目录添加为本地文件夹,然后从远程设备共享该目录。将会看到类似的情况:
-
VM1:
接下来,在 logging
目录中创建文件,使其显示在 OCI 存储桶中,如果配置正确,则同步到 VM2 logging
目录,因此也同步到跨区域的第二个存储桶中。
任务 6:执行更多测试
有两点可以轻松使用之前配置的相同文件夹和共享设备进行进一步测试。
-
使用新大文件进行测试:这将快速同步。在
local_VM1
/local_VM2
文件夹中的 VM 本地创建大文件,然后创建logging
目录,这意味着 s3fs 用于跨区域 OCI 对象存储同步。-
在 VM1 上创建大文件。
cd local_VM1 dd if=/dev/urandom of=~/local_VM1/testfile1 bs=1M count=500
-
验证 VM2 上的同步。
ls -lh ~/local_VM2/
还要在 VM 同步界面中验证。
-
对 s3fs 挂载的目录 (
logging
) 重复。cd ~/logging dd if=/dev/urandom of=~/logging/testfile2 bs=1M count=500
-
在
logging
目录、Syncthing 接口以及第二个区域存储桶中验证对 VM2 的同步,以确定文件的显示速度。 -
然后,您可以使用几 GB 的文件继续执行相同的测试。还应考虑将大型文件直接上载到第一个存储桶,并监视与第二个存储桶同步的速度。
-
-
使用已修改的大文件进行测试:这还将有效地检测和同步更改。修改
local_VM1
/local_VM2
目录中的本地文件以及挂载到logging
目录下的 VM 的 OCI Object Storage 存储桶中的现有文件。-
修改现有文件。
echo "New content" >> ~/local_VM1/testfile1
-
验证 VM2 上的更新。
-
对 OCI 对象存储文件重复步骤 1 和 2。
echo "Modified content" >> ~/logging/testfile2
-
相关链接
确认
- 作者 — Adina Nicolescu(高级云工程师)
更多学习资源
浏览 docs.oracle.com/learn 上的其他实验室,或者访问 Oracle Learning YouTube 渠道上的更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 成为 Oracle Learning Explorer。
有关产品文档,请访问 Oracle 帮助中心。
Perform Cross-Region Bidirectional Synchronization in Oracle Cloud Infrastructure using Syncthing
G29472-01
Copyright ©2025, Oracle and/or its affiliates.