我們有一個 NFS 伺服器(Linux),它將檔案儲存在 iSCSI 磁碟陣列中。該伺服器正在生產中。伺服器和陣列都很舊,必須很快更換(陣列已經出現嚴重問題)。
我已在不同的網路中準備好替換伺服器和陣列。
我一直在考慮重新同步共享,然後再次執行,以便同步資料。我不知道這是否會導致數據不一致...由於共享是透過lvm安裝的,也許我可以先製作一個快照?
問題:
遷移所有資料的最佳方法是什麼?你有什麼建議嗎?
答案1
如果您打算在第二次 rsync 之前停用對陣列的寫入,那麼您的方法很好。這將(應該)導致一個乾淨的副本。
根據情況,為了最大限度地減少停機時間,請執行三次 rsync:
- 在來源伺服器原樣運行時 rsync 檔案系統。這將需要一些時間並為您提供粗略的副本,可能存在許多不一致之處。
- (可選)如果#1需要很長時間並且您同時有大量寫入,請在來源伺服器仍按原樣運行的情況下再次進行rsync。此步驟將花費更少的時間,因此您可以獲得更好的副本(運行時發生的寫入更少)。
- 停止寫入來源節點。最好的方法是將其安裝為唯讀,正如 Stoned 所建議的那樣。但關閉服務或使用單一使用者模式也可以。
- 最後一次 rsync。這次應該會比較快吧。不應該有很多不一致之處(步驟 #2 比步驟 #1 短得多),因此沒有太多需要同步的內容。
- 進行檢查並啟動新伺服器來代替舊伺服器。
但有幾點要注意:
- 如果您有很多小檔案(數百萬個),那麼每次 rsync 無論如何都會花費一些時間。 (這同樣適用於慢速線路、慢速/降級儲存等)
- 如果您的來源儲存已經出現問題(磁碟機故障或其他可能導致磁碟區無法讀取的情況),請從#3 開始。您將獲得很長的停機時間,但可以最大限度地降低傳輸過程中失敗的風險。
- 我剛剛有了一個瘋狂的想法,就是對檔案系統所在的整個裝置進行同步。如果目標大於來源,這可能會起作用。但我不建議這樣做,因為我自己沒有嘗試過。
答案2
Rsync+rsync 或 snapshot+rsync 不會有太大區別 - rsync 可能更方便,因為您最終能夠在傳輸過程中壓縮/加密數據,而無需使用額外命令的麻煩。在這兩種情況下,您將永遠嘗試趕上自上次 rsync 以來用戶可能在共享上複製的內容,包括仍在傳輸中的部分檔案。老實說,我建議您在使用率較低的時期使用 rsync 進行第一個副本。然後,警告您的用戶,由於需要維護,將會出現小規模中斷。停止在磁碟上寫入的服務。以唯讀模式重新掛載舊共享,執行最後的 rsync,然後用新共享完全取代舊的 nfs 共享。如果您願意/可以,您可以在此期間為客戶授予唯讀存取權限。 100% 可用性純粹是一個夢想,最好讓您的客戶停止 1 小時,而不是追逐可能無休止的資料遺失/損壞和應用程式崩潰的投訴。