巧用 JuiceFS Sync 命令跨雲遷移和同步數據

来源:https://www.cnblogs.com/JuiceData/archive/2022/04/14/16145379.html
-Advertisement-
Play Games

近年來,雲計算已成為主流,企業從自身利益出發,或是不願意被單一雲服務商鎖定,或是業務和數據冗餘,或是出於成本優化考慮,會嘗試將部分或者全部業務從線下機房遷移到雲或者從一個雲平臺遷移到另一個雲平臺,業務遷移涉及到數據的遷移。正好 JuiceFS 已經對接了各種對象存儲的 API ,也實現了數據同步的邏 ...


近年來,雲計算已成為主流,企業從自身利益出發,或是不願意被單一雲服務商鎖定,或是業務和數據冗餘,或是出於成本優化考慮,會嘗試將部分或者全部業務從線下機房遷移到雲或者從一個雲平臺遷移到另一個雲平臺,業務遷移涉及到數據的遷移。正好 JuiceFS 已經對接了各種對象存儲的 API ,也實現了數據同步的邏輯,讓我們來瞭解下 JuiceFS 的 sync 命令。

什麼是 JuiceFS Sync

JuiceFS 的 sync 子命令是功能完整的數據同步實用工具,可以在所有 JuiceFS 支持的對象存儲之間多線程併發同步或遷移數據,既支持在「對象存儲」與「JuiceFS」之間遷移數據,也支持在「對象存儲」與「對象存儲」之間跨雲跨區遷移數據。與 rsync 類似,除了對象存儲也支持同步本地目錄、通過 SSH 訪問遠程目錄、HDFS、WebDAV 等,同時提供全量同步、增量同步、條件模式匹配等高級功能。

基本用法

命令格式

juicefs sync [command options] SRC DST

即把 SRC 同步到 DST,既可以同步目錄,也可以同步文件。

其中:

  • SRC 代表數據源地址及路徑
  • DST 代表目標地址及路徑
  • [command options] 代表可選的同步選項,詳情查看命令參考

地址格式均為 [NAME://][ACCESS_KEY:SECRET_KEY@]BUCKET[.ENDPOINT][/PREFIX]

其中:

  • NAME 是存儲類型,比如 s3oss。詳情查看所有支持的存儲服務
  • ACCESS_KEYSECRET_KEY 是對象存儲的 API 訪問密鑰
  • BUCKET[.ENDPOINT] 是對象存儲的訪問地址
  • PREFIX 是可選的,限定要同步的目錄名首碼。

以下是一個 Amazon S3 對象存儲的地址範例:

s3://ABCDEFG:[email protected]

特別地,SRCDST 如果以 / 結尾將被視為目錄,例如:movies/。沒有以 / 結尾則會被視為「首碼」,將按照首碼匹配的規則進行匹配,例如,當前目錄下有 testtext 兩個目錄,使用以下命令可以將它們同步到目標路徑 ~/mnt/

juicefs sync ./te ~/mnt/te

使用這種方式,sync 命令會以 te 首碼匹配當前路徑下所有包含該首碼的目錄或文件,即 testtext。而目標路徑 ~/mnt/te 中的 te 也是首碼,它會替換所有同步過來的目錄和文件的首碼,在此示例中是將 te 替換為 te,即保持首碼不變。如果調整目標路徑的首碼,例如將目標首碼改為 ab

juicefs sync ./te ~/mnt/ab

目標路徑中同步來的 test 目錄名會變成 absttext 會變成 abxt

資源清單

這裡假設有以下存儲資源:

  1. 對象存儲 A

    • Bucket 名:aaa
    • Endpoint:https://aaa.s3.us-west-1.amazonaws.com
  2. 對象存儲 B

    • Bucket 名:bbb
    • Endpoint:https://bbb.oss-cn-hangzhou.aliyuncs.com
  3. JuiceFS 文件系統

    • 元數據存儲:redis://10.10.0.8:6379/1
    • 對象存儲:https://ccc-125000.cos.ap-beijing.myqcloud.com

所有存儲的訪問密鑰均為:

  • ACCESS_KEYABCDEFG
  • SECRET_KEYHIJKLMN

對象存儲與 JuiceFS 之間同步

將 對象存儲 A 的 movies 目錄同步到 JuiceFS 文件系統:

# 掛載 JuiceFS
sudo juicefs mount -d redis://10.10.0.8:6379/1 /mnt/jfs
# 執行同步
juicefs sync s3://ABCDEFG:[email protected]/movies/ /mnt/jfs/movies/

將 JuiceFS 文件系統的 images 目錄同步到 對象存儲 A:

# 掛載 JuiceFS
sudo juicefs mount -d redis://10.10.0.8:6379/1 /mnt/jfs
# 執行同步
juicefs sync /mnt/jfs/images/ s3://ABCDEFG:[email protected]/images/

對象存儲與對象存儲之間同步

將對象存儲 A的全部數據同步到對象存儲 B:

juicefs sync s3://ABCDEFG:[email protected] oss://ABCDEFG:[email protected]

高級用法

增量同步與全量同步

sync 命令預設以增量同步方式工作,即先對比源路徑與目標路徑之間的差異,然後僅同步有差異的部分。可以使用 --update-u 選項更新文件的 mtime

如需全量同步,即不論目標路徑上是否存在相同的文件都重新同步,可以使用 --force-update-f。例如,將對象存儲 A 的 movies 目錄全量同步到 JuiceFS 文件系統:

# 掛載 JuiceFS
sudo juicefs mount -d redis://10.10.0.8:6379/1 /mnt/jfs
# 執行全量同步
juicefs sync --force-update s3://ABCDEFG:[email protected]/movies/ /mnt/jfs/movies/

模式匹配

sync 命令的模式匹配功能跟 rsync 類似,可以通過規則排除或包含某類文件,並通過多個規則的組合實現任意集合的同步,規則如下:

  • / 結尾的模式會僅匹配目錄,否則會匹配文件、鏈接或設備;
  • 包含 *?[ 字元時會以通配符模式匹配,否則按照常規字元串匹配;
  • * 匹配任意非空路徑組件,在 / 處停止匹配;
  • ? 匹配除 / 外的任意字元;
  • [ 匹配一組字元集合,例如 [a-z][[:alpha:]]
  • 在通配符模式中,反斜杠可以用來轉義通配符,但在沒有通配符的情況下,會按字面意思匹配;
  • 始終以模式作為首碼遞歸匹配。

排除文件/目錄

使用 --exclude 選項設置要排除的目錄或文件。例如,將 JuiceFS 文件系統完整同步到對象存儲 A,但不同步隱藏的文件和文件夾:

在 Linux 系統中所有以 . 開始的名稱均被視為隱藏文件

# 掛載 JuiceFS
sudo juicefs mount -d redis://10.10.0.8:6379/1 /mnt/jfs
# 完整同步,排除隱藏文件和目錄
juicefs sync --exclude '.*' /mnt/jfs/ s3://ABCDEFG:[email protected]/

可以重覆該選項匹配更多規則,例如,排除所有隱藏文件、pic/ 目錄 和 4.png 文件:

juicefs sync --exclude '.*' --exclude 'pic/' --exclude '4.png' /mnt/jfs/ s3://ABCDEFG:[email protected]

包含文件/目錄

使用 --include 選項設置要包含(不被排除)的目錄或文件,例如,只同步 pic/4.png 兩個文件,其他文件都排除:

juicefs sync --include 'pic/' --include '4.png' --exclude '*' /mnt/jfs/ s3://ABCDEFG:[email protected]

在使用包含/排除規則時,位置在前的選項優先順序更高。--include 應該排在前面,如果先設置 --exclude '*' 排除了所有文件,那麼後面的 --include 'pic/' --include '4.png' 包含規則就不會生效。

多線程和帶寬限制

JuiceFS sync 預設啟用 10 個線程執行同步任務,可以根據需要設置 --thread 選項調大或減少線程數。

另外,如果需要限制同步任務占用的帶寬,可以設置 --bwlimit 選項,單位 Mbps,預設值為 0 即不限制。

目錄結構與文件許可權

預設情況下,sync 命令只同步文件對象以及包含文件對象的目錄,空目錄不會被同步。如需同步空目錄,可以使用 --dirs 選項。

另外,在 local、sftp、hdfs 等文件系統之間同步時,如需保持文件許可權,可以使用 --perms 選項。

拷貝符號鏈接

JuiceFS sync本地目錄之間同步時,支持通過設置 --links 選項開啟遇到符號鏈時同步其自身而不是其指向的對象的功能。同步後的符號鏈接指向的路徑為源符號鏈接中存儲的原始路徑,無論該路徑在同步前後是否可達都不會被轉換。

另外需要註意的幾個細節

  1. 符號鏈接自身的 mtime 不會被拷貝;
  2. --check-new--perms 選項的行為在遇到符號鏈接時會被忽略。

多機併發同步

本質上在兩個對象存儲之間同步數據就是從一端拉取數據再推送到另一端,如下圖所示,同步的效率取決於客戶端與雲之間的帶寬。

在同步大量數據時,單機帶寬往往會被占滿出現瓶頸,針對這種情況,JuiceFS Sync 提供多機併發同步支持,如下圖。

Manager 作為主控執行 sync 命令,通過 --worker 參數定義多個 Worker 主機,JuiceFS 會根據 Worker 的總數量,動態拆分同步的工作量並分發給各個主機同時執行。即把原本在一臺主機上處理的同步任務量拆分成多份,分發到多台主機上同時處理,單位時間內能處理的數據量更大,總帶寬也成倍增加。

在配置多機併發同步任務時,需要提前配置好 Manager 主機到 Worker 主機的 SSH 免密登陸,確保客戶端和任務能夠成功分發到 Worker。

Manager 會將 JuiceFS 客戶端程式分發到 Worker 主機,為了避免客戶端的相容性問題,請確保 Manager 和 Worker 使用相同類型和架構的操作系統。

例如,將對象存儲 A 同步到對象存儲 B,採用多主機並行同步:

juicefs sync --worker [email protected],[email protected] s3://ABCDEFG:[email protected] oss://ABCDEFG:[email protected]

當前主機與兩個 Worker 主機 [email protected][email protected] 將共同分擔兩個對象存儲之間的數據同步任務。

如果 Worker 主機的 SSH 服務不是預設的 22 號埠,請在 Manager 主機通過 .ssh/config 配置文件設置 Worker 主機的 SSH 服務埠號。

場景應用

數據異地容災備份

異地容災備份針對的是文件本身,因此應將 JuiceFS 中存儲的文件同步到其他的對象存儲,例如,將 JuiceFS 文件系統中的文件同步到對象存儲 A:

# 掛載 JuiceFS
sudo juicefs mount -d redis://10.10.0.8:6379/1 /mnt/jfs
# 執行同步
sudo juicefs sync /mnt/jfs/ s3://ABCDEFG:[email protected]/

同步以後,在對象存儲 A中可以直接看到所有的文件。

建立 JuiceFS 數據副本

與面向文件本身的容災備份不同,建立 JuiceFS 數據副本的目的是為 JuiceFS 的數據存儲建立一個內容和結構完全相同的鏡像,當使用中的對象存儲發生了故障,可以通過修改配置切換到數據副本繼續工作。需要註意這裡僅複製了 JuiceFS 文件系統的數據,並沒有複製元數據,元數據引擎的數據備份依然需要。

這需要直接操作 JucieFS 底層的對象存儲,將它與目標對象存儲之間進行同步。例如,要把對象存儲 B 作為 JuiceFS 文件系統的數據副本:

juicefs sync cos://ABCDEFG:[email protected] oss://ABCDEFG:[email protected]

同步以後,在對象存儲 B 中看到的與 JuiceFS 使用的對象存儲中的內容和結構完全一樣。

如有幫助的話歡迎關註我們項目 Juicedata/JuiceFS 喲! (0ᴗ0✿)


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文介紹,如何使用Metalama庫對.NET項目添加自定義的代碼分析,即自定義的編譯時警告、錯誤 ...
  • 有沒有想過如果我們自己要設計一門編程語言,要做到什麼樣的標準才能符合在.Net平臺下運行的條件呢?.Net在官方描述過一段話,大體的意思變成白話是:只要你的語言在編譯後能夠轉換成CIL代碼,那麼你的語言就可以在.Net平臺下進行開發和運行。 CIL語言之所以能夠在.Net平臺下運行,實際上它是符合了 ...
  • 介紹指令集的指令格式、定址方式、指令類型,介紹了一些著名的指令集。 ...
  • 佈置的Linux作業裡面有個配置yum和安裝telnet和嘗試命令:telnet 127.0.0.1,並記錄結果,寫作業中間一直報錯,搞了五六個小時才完成。分享一下安裝telnet過程。 虛擬機VMware16 光碟 CentOS 7 阿裡鏡像:阿裡雲開源鏡像站資源目錄 下載DVD-2009.iso ...
  • bat文件是dos下的批處理文件。批處理文件是無格式的文本文件,它包含一條或多條命令。它的文件擴展名為 .bat 或 .cmd。 ...
  • 鏡像下載、功能變數名稱解析、時間同步請點擊 阿裡雲開源鏡像站 一、Zabbix 簡介 Zabbix 可以用來監控各種網路參數,來保證伺服器和系統的安全運行。並且 Zabbix 還提供了靈活的通知機制,以此來讓系統管理員快速定位/解決存在的各種問題。是一個基於 Web 界面提供的分散式系統監控以及網路監控功能 ...
  • 1. 什麼是資料庫 資料庫是“按照數據結構來組織、存儲和管理數據的倉庫”。是一個長期存儲在電腦內的、有組織的、可共用的、統一管理的大量數據的集合。簡單的來說就像是一個大型的衣櫃,你所有春夏秋冬的衣服都被統一放在了一個衣櫃里,然後分類,分季節的有序擺放好。資料庫的優點重點在於體量足夠的大,一般的數據 ...
  • 12月21日,在第十一屆中國資料庫技術大會(DTCC)2020數據風雲獎評選活動中,華為雲資料庫GaussDB(openGauss)和金融行業核心資料庫上雲解決方案分別榮獲“年度最佳創新產品獎”、“年度最佳創新解決方案獎”。 DTCC2020是由IT168 旗下 ITPUB 企業社區平臺主辦的頂級數 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...