ZFS Replication
ZFS 除了提供 SnapShot 功能外,另一個重頭戲就是遠端複製,該複製基準是依照 SnapShot 的順序執行,所以省去很多比對兩端檔案的時間,同時傳檔時是以 Block 為基準,沒有更動過的部分是不需要重傳,可以大幅度降低頻寬的使用;同時執行 SnapShot 是可以調整時間,可依照情況網路離峰時間來做同步。
在安裝時網路上只有找到官方文件,很少有其他參考資料,依照官方步驟執行一定會出錯,而此錯誤沒有 Log 可以參考,所以花了很多時間 Try & Error,我的執行步驟參考官網文件後如下:
- 由於兩端傳檔時須透過 SSH 加密通道,所以要讓這來源端(Source)有目的端的(Destination)的憑證資料,中間沒有GUI 介面直接操作,必須先開啟 SSH 服務並允許 root 登入,所以先到 Service -> SSH 打開服務並在 Login as Root with password 選項打勾
- 使用 Putty 之類的 SSH Client 分別登入到這兩台主機,再多嘴一下,root 的密碼就是 freeans, 記得用 passwd 指令來變更一下比較安全。
- 因為要記錄兩個很長的 1024 byte Key, 先打開 NotePad 準備記錄,在 Source 輸入 cat /data/ssh/replication.pub,把內容擷取下來貼到 Notepad 上;這個 Key 是 Source 的 Public Key,要給 Destination 電腦確認對方的身分。
- Freenas 8 SSH Key
- 在 Source 上輸入 ssh-keyscan [Destination電腦IP] 可以得到一組確認目的電腦的金鑰,看到的畫面跟上面類似,在把另一組金鑰貼到NotePad上,您應該可以看到類似下面的畫面。
- 切換到Destination 執行以下的指令
- mount –uw /
- mkdir –p /root/.ssh
- chmod 700 /root/.ssh
- cd /root/.ssh
- vi authorized_keys
- 這些指令是在 root home directory 建立一個 .ssh 的路徑,然後把Source的 Public Key 丟進去
- 切到 Source 執行以下指令
- mount –uw /
- mkdir –p /root/.ssh
- chmod 700 /root/.ssh
- cd /root/.ssh
- 同樣的建立 .ssh 目錄,但先開啟跟目錄的寫入權限是要記錄 Destination 的紀錄,操作過程如下個步驟
- 到 Source 執行
- ssh –i /data/ssh/replication [Destination IP]
- 利用 SSH 協定連結到 destination 主機去,同時會在 /root/.ssh 建立一個 known_hosts 的檔案,利用 exit 指令切回 Source 後,再度執行上述指令這次就不會詢問你Password 而直接進入。
- 在 Source建立要同步的 volume/dataset(在我的範例建立 vol1/Edu,這個同步不像是微軟的 DFS 可以兩邊雙向同步,這個機制只能做單向的同步喔,設定好之後可以切到 SSH Client 利用 zfs list 指令查看一下。
- 由於該服務沒有 Log 可以追查,最好的方式就是先用手動執行同步測試,如果有任何問題的話可以在下指令的時候就看得到;如果您很有把握的話可以直接跳到步驟14
- 先回到 Source 的GUI 介面,用手動的方式建立一個 Snapshot,切到 Source SSH Client 輸入 zfs list –t snapshot 就看得到手動產生的名稱,名稱會長得像 vol1/Edu@Manual-yyyymmdd。
- 接下來就是重頭戲,下指令把這個 SnapShot 傳到 Destination 機器去, 指令很長:
- zfs send vol1/Edu@Manual-yyyymmdd | ssh –i /data/ssh/replication [destination IP] zfs receive vol1/Backup
- 注意: 目的端的 volume/dataset 我故意不建立,正常同步後系統會自動建立這個 Dataset 當作判斷的依據之一。
- 正常的話系統會立即同步,切換到 Destination 端的 SSH Client 輸入 netstat 1 指令看系統有沒有大量收到封包,當然同步前需要複製幾個檔案進去 (請參造前期文章製作 windows 分享)
- 同步完成之後就可以利用指令 zfs list 在 destination 端看有沒有新的 data set 跑出來。如果沒有就要檢查前幾個步驟是否有作對。
- 清除測試資料,利用 Source GUI 刪掉手動建立的 snapshot,到 Destination SSH Client 輸入 zfs destroy –r /vol1/Backup 刪掉 dataset
- 到此應該兩端主機已經設定 SSH 完畢,回到 Source GUI 畫面 Storage -> ZFS replication -> Add new replication,輸入本機要同步出去的 Mount Point,選擇目的方的路徑及 IP,最後貼上還放在 Notepad 下方的金鑰就大功告成。
依照 Source SnapShot 的頻率而定,每次做完都會傳送一份到 Destination 去並且會自動解開放到 dataset 內去,達到遠端同步。
後記:
- 網路上針對這一塊說明的非常少,雖然有人嘗試成功但並沒有詳細的步驟,可能是因為環境不同造成文件很難寫吧,光嘗試就花了數天空閒的時間。
- 如果您在嘗試時也卡在每個地方請參考一下這個帖子,有些 idea 是從這邊找來的。
- FreeNas ZFS 效能沒有想像的好,建議不要用在 Production 環境,拿來備份應該還可以接受。
- 由於ZFS Replication 是採取 snapshot 備份,所以無論在 Source 或 Destination 都可以隨時回覆到指定時間,只要你的 snapshot 保留時間夠長。
- 接下來就是把這個機制應用到每天的備份作業上去。
- 測試期間要測試同步功能,對該主機分享做了一些存取動作,此時 snapshot 持續進行中,觀察 RAM 的使用量就得到蠻驚人的發現,原來 2G 的 RAM 被吃光光了,但用 top 指令去看有 1.5G 被歸類為 InActive,不知道是不是系統拿去用後就忘了還回來. ^_^,使用上要特別留意喔。
Mark您好!!
有這個榮幸拜讀您的分享,非常感謝~
小弟目前在評估利用feenas的zfs做為vmware的nfs storage(與openfiler比較較,但看到您提到freenas的zfs效能並不好,所以想請教一下這部份,不知您的經驗是如何的?
小董,
同樣的環境複製 250MB 的影片檔案至 FreeNas8, 其速度約只能達到 5-6MByte, 但是對 NetApp 機器丟卻能達到 10MByte 上下, 實際複製時也覺得比 FreeNas 7.xx 要慢上一點.
網路上也有一篇文章在討論 FreeNas 及 OpenSolaris 比較 ZFS 的效能, 而 FreeNas 就是會比較差一點.. (http://www.zfsbuild.com/2010/09/10/freenas-vs-opensolaris-zfs-benchmarks/) 可以參考看看.
Rgds,
Mark
不曉得您的記憶體多少,但是freenas8啟用ZFS全功能下,需要至少8G記憶體@@
OldSytleRock,
我目前的機器只有 4G, 雖有強制啟用 ZFS cache, 但校能還是只能說 so so, 不過因屬於第二線的備用裝置, 平常只暫存一些檔案, 還應付得過來. ^_^
ps. ZFS 真的太吃資源了, 手邊沒有 6G RAM 以上的機器可測…
目前公司有3台FreeBSD使用zfs系統,心得是正如zfs文件所說,zfs不適合大量I/O和小當過多的主機使用,當初這個中另一個MIS引入公司時,網路上一面倒的稱ZFS為上帝賜予的禮物,都是由對FreeBSD瘋狂的人所寫,只是我本人當時反對所有主機使用zfs(因為事實Soft Array在15年前就已有了,而且在小型的企業市場曾經讓Adaptec等廠商感到威脅,但因很快的Adaptec等廠商立即應變讓威脅不到3個月就消失了,一直到現在Soft Array都一直起不來),也還好因為如此才跼限在3台主機先行導入,結果是不到3個月就問題重重,那3台主機的功能只好一再的減縮,變成一台單純作gateway功能。一台作mail。一台作極少使用者的WEB Server,那可是6萬元1台的主機啊,淪為這樣的下場還不是最慘,近來由於mail比較多(公司約250人),大部份mail是對內卻出現了很多的"INCORRECT BLOCK COUNT"。"UNREF FILE ",現在這3台主機要每天開機,要每天檢查檔案系統並予以修復,以上提供參考
PS:當時另位MIS,甚至連微軟的Windows作業系統也要使用ZFS,但其壯志也因zfs問題重重而只能成為"壯志未酬"而黯然消失,原來其用意是要告知天下唯有FreeBSD才能作為主機,但現在卻是得到了反效果,原我主管也是非FreeBSD和微軟作業系統,一概不考慮,現在卻流到不知該如何(我主管並未有技術根柢),所以建議要力推FreeBSD者要慎重,不要得到反效果,到時會很難收拾