本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業務造成影響,請務必仔細閱讀。
本文介紹如何使用rsync工具實現阿里云文件存儲NAS NFS協議文件系統之間的數據遷移。
前提條件
已擁有一個存有數據的NFS協議文件系統,并且擁有一個專有網絡類型掛載點。
費用說明
NAS與NAS之間的遷移,會涉及如下費用:
準備工作
NAS文件系統之間進行數據遷移時,需要云服務器可以同時訪問源NAS和目的NAS。因此,您需要確保通過同一個阿里云專有網絡VPC可以同時訪問兩個NAS。
查看源文件系統掛載點信息。
配置目標文件系統掛載點。
文件系統同地域
目標文件系統與源文件系統的掛載點屬于同一VPC下時,在獲取目標掛載點信息后,即可參照實施遷移進行數據遷移。
目標文件系統與源文件系統的掛載點不屬于同一VPC下時,可以采用以下三種方式準備掛載點:
在目標地域和可用區創建新的文件系統,自動創建新的掛載點。具體操作,請參見通過控制臺創建通用型NAS文件系統。
說明如果您購買按量付費的通用型NAS(容量型/性能型/高級型)NFS協議文件系統,請選擇與源掛載點相同的VPC網絡和虛擬交換機,即可自動生成目標掛載點。在新的文件系統創建之后,可以購買資源包進行抵扣,以節省費用。
在已有的文件系統上創建新的掛載點。具體操作,請參見添加掛載點。
通過云企業網將目標掛載點與源掛載點的VPC網絡互相連通。具體操作,請參見通過云企業網實現同地域跨VPC掛載NAS。
文件系統跨賬號或跨地域
如果您的目標文件系統與源文件系統的掛載點信息不在同一個賬號或同地域下時,則需通過云企業網將您的VPC網絡互相連通。具體操作,請參見通過云企業網實現跨賬號跨地域掛載NAS。
實施遷移
在準備好源和目標掛載點后,創建新的ECS,同時掛載兩個NFS協議文件系統后,使用rsync工具進行復制即可實現數據遷移。遷移數據的操作如下所示。
掛載源和目標文件系統。
重要推薦購買新的臨時ECS執行遷移操作。如果使用已有的ECS執行遷移操作,會與正在運行的業務爭搶CPU和網絡帶寬資源。
登錄ECS管理控制臺單擊創建實例后,配置如下重要信息。
地域:選擇源文件系統所在的地域。
網絡及可用區:選擇源文件系統所在的VPC及可用區。
實例規格:一般選擇最低規格即可。
鏡像:選擇CentOS 7.6。
存儲:單擊共享盤NAS(選填),選擇添加文件存儲進行配置,詳情請參考下圖示例。
說明如果源和目標掛載點都在同一個VPC網絡中,可以在ECS購買頁面中配置NAS掛載信息,ECS啟動后,源和目標NAS文件系統會自動掛載。
如果源和目標掛載點不在同一個VPC網絡或同一地域或同一賬號中時,在ECS購買頁面中只需配置源文件系統。在ECS完成創建后,手動掛載目標文件系統。關于手動掛載目標文件系統的操作,請參見掛載NFS協議文件系統。
在ECS創建成功后,源和目標NAS文件系統掛載完成,請執行以下命令確認。
mount | grep nas.aliyuncs.com
如果掛載成功,界面會顯示以下信息。源文件系統掛載到了
/mnt/volumeA
目錄,目標文件系統掛載到了/mnt/volumeB
目錄。安裝遷移工具。
遷移存量數據。
執行以下命令,將源文件系統中的存量數據同步到目標文件系統中。
tmux sudo rsync -avP /mnt/volumeA/ /mnt/volumeB/
您還可以利用rsync并發拷貝上傳數據,命令如下。
threads=<線程數量>; src=<源路徑/>; dest=<目標路徑/>; rsync -av -f"+ */" -f"- *" $src $dest && (cd $src && find . -type f | xargs -n1 -P$threads -I% rsync -av % $dest/% )
例如,線程數量為10,原路徑為/abc ,目標路徑為
/mnt1
。threads=10; src=/abc/; dest=/mnt1/; rsync -av -f"+ */" -f"- *" $src $dest && (cd $src && find . -type f | xargs -n1 -P$threads -I% rsync -av % $dest/% )
說明rsync命令中的源路徑結尾必須帶有/,否則同步后數據路徑不能匹配。
tmux命令會新建tmux session。在tmux session中運行
rsync
可以幫助查看進度。如果在遷移過程中,與ECS的連接斷開了,重新登錄ECS后執行tmux attach
恢復tmux session,即可繼續觀察遷移進度。在測試使用的源文件系統中,共有一百萬個100 KiB的文件,實際容量100 GiB,使用rsync遷移共耗時320分鐘。
遷移增量數據。
在存量數據遷移過程中,如果源文件系統被其它ECS上運行的業務應用寫入,那么在存量數據遷移結束后,需要另外同步新的增量數據。
停止業務應用。
為了避免不斷有新的數據寫入,需要在同步增量數據之前,在所有ECS和容器上停止使用源文件系統的業務應用。
重要在停止業務應用后,請不要手動刪除源文件系統的任何數據,否則會在下一步操作中造成數據丟失。
請妥善選擇業務低峰期操作。可以使用
fuser -mv <dir>
命令找到讀寫NAS的進程PID。
同步增量數據。
執行rsync命令,將存量數據遷移開始后的增量數據同步到目標文件系統中。
sudo rsync -avP --delete /mnt/volumeA/ /mnt/volumeB/
rsync命令會先掃描源路徑,所以即使增量數據不多,也可能需要較長的時間完成。
警告--delete選項代表從目標文件系統中刪除已在源文件系統中被刪除的數據,請謹慎使用,避免將目標文件系統中的數據意外刪除。
檢查遷移結果。
在遷移完成后,執行以下rsync命令,檢查目標文件系統是否與源文件系統一致。
sudo rsync -rvn /mnt/volumeA/ /mnt/volumeB/
如果兩者數據一致,應該顯示以下信息,中間不包含任何文件路徑。
切換應用到新的文件系統
在數據遷移完成后,如果您需要將現有業務從舊的文件系統切換到新的文件系統上,請在所有ECS和容器上卸載舊的文件系統,然后掛載新的文件系統。
使用ECS直接掛載NAS文件系統。
執行
mount | grep nas.aliyuncs.com
記錄現有NAS掛載信息,注意NAS掛載到的本地路徑<dir>。使用
fuser -mv <dir>
找到讀寫NAS的進程PID,將其全部通過kill -9
命令停止。執行
umount <dir>
卸載舊的文件系統。掛載新文件系統到原本的<dir>路徑。更多有關掛載參數的信息,請參見掛載NFS協議文件系統。
啟動訪問NAS的進程,確認讀寫正常。
修改/etc/fstab中的自動掛載信息,將舊的掛載點替換為新的掛載點。
使用K8s管理的容器掛載NAS文件系統。
修改現有的動態卷或靜態卷YAML配置文件,將舊的掛載點替換為新掛載點。
用修改后的配置文件生成新pod,確認其掛載新的文件系統成功并可正常讀寫。
回收使用舊的文件系統的所有pod。
在業務切換到新的文件系統后,請繼續保留舊的文件系統的數據至少一個星期。不要立刻刪除舊的文件系統里的數據,以避免因數據誤刪除或誤同步而造成數據丟失。