1. 程式人生 > >NFSv4的引用 遷移和備份( referral migration and replication for NFSv4)

NFSv4的引用 遷移和備份( referral migration and replication for NFSv4)

NFSv4的引用 遷移和備份
RFC3530定義了檔案系統的遷移和備份機制。檔案系統的位置資訊(fs_location屬性)提供了一種讓客戶端獲取到它的方式。Fs_location屬性包含了a list of locations,location包含hostname,path name(代表伺服器端檔案系統的root)。Fs_location的含義1取決於服務的種類。如果是遷移,list中就記錄資料被轉移到的位置。如果是備份,list中就給出備份的檔案系統位置。
本文目標在於簡短的解釋一下遷移和備份,並且給出一些使用它們的配置資訊。
1.引用(Referrals):
引用的場景
當客戶端第一次訪問檔案系統時就被directed到一個新的位置,從客戶端的角度來看,這最好被描述成為備份而不是遷移,因為如果是遷移的話,客戶端並沒有獲得任何有關於遷移發生之前的檔案系統的資訊。
如果在遷移發生的時候,還沒有任何客戶端訪問檔案系統,那麼這就是一個純淨的引用情況:所有的客戶端將會看到的只是一個不存在的檔案系統的引用。
假設客戶端能夠使用這些引用去找到檔案系統的當前位置,伺服器能夠有效的提供這些引用,即使檔案系統從來也不存在於這個伺服器上。
引用使得建立一個多伺服器的namespace成為可能,這樣客戶端能夠根據提供引用服務的伺服器上的檔案系統的名字訪問檔案系統。這樣更改伺服器上的配置,將檔案系統從這個伺服器移到另一個伺服器將不會影響到客戶端。
這可以保持多個伺服器負載均衡,要比一個伺服器host所有exported的檔案系統要好。我們可以很容易的想象出這樣一個架構:伺服器只向客戶端提供引用,然後將請求分發給包含資料的伺服器。
 


配置:
伺服器必須使用如下選項在/etc/exports檔案中說明遷移的檔案系統的位置:
refer=<directory>@<host>
例子:
 
伺服器指明瞭/export/docs和/export/sources已經被遷移到2個伺服器上。
NB:只有伺服器端需要配置。客戶端和檔案系統遷移到的伺服器都不需要特別的配置。客戶端只要能夠處理fs_location就可以。在2.6.18-rc5及以上的核心都可以支援。客戶端不需要修改。
2.遷移:
檔案系統遷移被用來將檔案系統從一個伺服器遷移到另一個伺服器上。遷移通常用於可寫的並且有a single copy的檔案系統。通過NFS來轉移資料,並且不需要弄亂客戶端的配置資訊是非常好的,因為每個資料位置發生的變化客戶端都會知道。
簡單來說:
客戶端已經通過NFS4掛載了檔案系統。伺服器管理員有權利決定將這個exported的檔案系統轉移到其他伺服器上。伺服器必須告訴每一個掛在該檔案系統的客戶端,該資料已經被轉移走了。
客戶端和伺服器之間關於遷移事件使用的通訊方式如下:一旦參與到遷移中的伺服器完成了檔案系統的移動,原伺服器接收到的後續客戶端請求將會返回NFS4ERR_MOVED錯誤,客戶端還獲取fs_location的值。然後客戶端使用該屬性將他的請求重定向到指定的伺服器上。
配置:
在伺服器端要使用refer選項來指明被遷移的檔案系統的位置。還有,需要在伺服器上做一些事,類似於:
Mount –bind /dummy_mount /export_nfs
(這裡假設/export是nfs-root,並且is not currently a mountpoint)
客戶端不需要額外的配置,這個操作對於客戶端來說是透明的
遷移伺服器(應該是指真正存放資料的伺服器)必須配置成single server的樣子(只有單一檔案系統exports)
例子:
 

 
通常的操作順序:
1:客戶端掛在由server1 export的檔案系統
2:檔案系統從server1遷移到server2
3:當客戶端試圖訪問檔案系統時,客戶端收到NFS4ERR_MOVED錯誤和fs_location,裡面包含檔案系統的新位置
4:客戶端掛載server2上的檔案系統
注意:遷移資料的方式在NFSv4上並沒有定義
引用和遷移:
引用可以認為是遷移的特殊情況。
從客戶端的角度來看,如果一個伺服器實現檔案系統遷移,沒有同步遷移事件的彼此獨立的客戶端們將會遇到不同的情況。
有一些已經收到了遷移後的檔案系統的檔案控制代碼filehandles,而另一些可能還在訪問原來的檔案系統(當它還存在時)然後需要被重定向。
因此引用是遷移的特殊情況。當遷移事件發生時,有一些客戶端將會看到普通的遷移事件,他們正在訪問的檔案系統被遷移。而另一些客戶端將會看到的是引用事件,因為他們第一次訪問檔案系統時,該檔案系統就已經被遷移走了。
3.備份
對於備份這種情況,fs_location用於提供給客戶端檔案系統被備份到的所有位置的列表,並且如果發生了一些問題(網路問題,nfs deamon停止工作等),客戶端能夠去訪問備份的位置。
檔案系統備份用於只讀資料。通常檔案系統將會在兩個及以上的伺服器上備份。Fs_location將會向客戶端提供包含這些位置資訊的list。在第一次訪問檔案系統時,客戶端會獲取fs_location。如果以後客戶端請求超時,客戶端可能會嘗試使用fs_location中記錄的伺服器。
在這種情況下被分在其他伺服器上的exported資料叫做備份(replicas)
注意:NFSv4不負責管理備份檔案系統的方式。
我們可以想象的備份情況:
-手動備份資料(將檔案系統從一個伺服器copy到另一個上)。這種情況下,資料應該保持在只讀狀態。
-通過外部工具管理備份資料,外部工具能夠管理備份的更新,保持備份之間的資料一致性。
配置:
客戶端配置:不需要配置。只要有2.6.18-rc5及以上的核心來支援fs_location函式即可。
伺服器配置:export list必須包含每個備份的檔案系統的位置,使用replica=<dir>@<host>選項
備份配置:備份是一個single NFS-server,可以像單獨的伺服器或者備份被客戶端訪問。
例子:
 

通常的操作順序:
 
1-客戶端掛載檔案系統,並且獲得備份位置
2-客戶端無法連線到伺服器
3-客戶端掛在備份檔案系統
4.軟體要求(待確認)
Kernel:linux-2.6.18-rc5
NFS userland package:nfs-utils-1.0.10