摘要:針對iSCSI SAN中現有的設備發現和管理方法所存在的問題,引入iSNS協議,研究并實現了iSNS協議在iSCSI中的應用,解決了存在的問題,并給出了簡單的原型系統#65377;
關鍵詞:因特網存儲名稱服務; 設備發現; 狀態改變通知
中圖分類號:TP393.01文獻標志碼:A
文章編號:1001-3695(2007)10-0318-03
數據存儲一直都是計算機研究的重點#65377;在信息急速增長的背景下,數據的高速存取#65380;高可用性以及數據安全越來越重要,存儲設備作為數據的載體也就成為了焦點#65377;對存儲設備的管理也日益被重視#65377;在存儲管理的詞匯表中,存儲設備均是targets(目標端),相對應的是讀和寫請求從諸如服務器#65380;工作站等initiators(發起端)發出#65377;在由SCSI直接連接的存儲配置中,一個服務器通過查詢連接了磁盤陣列的SCSI總線能很容易地發現存儲資源#65377;但在SAN(存儲區域網絡)中,磁盤和磁帶資源可能是分散在復雜的網絡環境中的#65377;這種狀況給設備發現以及設備所有權帶來了挑戰#65377;Initiators必須能夠識別SAN中的存儲資源并確定是否有訪問權限#65377;所以,SANs需要一種機制來更好地進行設備發現和給特定的initiators分配共享存儲資源#65377;iSCSI[1,2]是IP存儲協議的一種,iSCSI協議是推動SAN技術快速發展的關鍵技術之一,因為它使數據存儲的傳送更加快捷,而且價格低廉#65377;但是目前iSCSI SAN中的設備發現和管理存在可操作性差#65380;可擴展性差,不具備網絡自適應能力等不足#65377;iSNS(Internet存儲名稱服務)協議恰好能解決這些問題#65377;它使得在光纖通道存儲區域網和IP存儲網絡中的設備發現變得更加方便易用#65377;將iSNS協議應用于iSCSI中將使SAN中存儲管理更為便捷#65377;
1iSCSI設備發現和管理
在iSCSI網絡中,可以通過對網絡地址編碼,詢問名字服務器,或發送一個廣播消息來詢問哪一個設備可以訪問#65377;Ini-tiators可以通過下列方法發現targets#65377;
1)靜態配置在initiators上設置targets的地址#65377;如果在iSCSI initiators已經知道iSCSI targets的IP 地址TCP端口號和名字信息時,iSCSI initiators無須執行發現#65377;iSCSI initiators直接通過IP地址和TCP端口來建立TCP連接,使用iSCSI targets的名字來建立iSCSI會話#65377;
2)SendTargets發現在initiators上設置默認targets地址,initiators可以通過SendTargets命令從默認targets上獲取iSCSI名字列表#65377;在iSCSI initiators知道iSCSI targets的IP地址和TCP端口的情況下,iSCSI使用IP地址和TCP端口號建立TCP連接后建立發現對話#65377;iSCSI initiators發送SendTargets命令查詢網絡中存在的iSCSI信息#65377;
3)零配置發現發出服務定位協議(SLP)[3]廣播請求,等待targets回應#65377;iSCSI initiators利用現有的IP 網絡協議SLP(service location protocol for discovery,服務定位協議)#65377;iSCSI targets使用SLP來注冊,iSCSI initiators可以通過查詢SLP代理來獲得注冊的iSCSI targets的信息#65377;當iSCSI targets加入到網絡中時,拓撲結構也隨之改變#65377;
在上述的三種方法中,均存在一定的不足#65377;方法1)中的靜態配置方法,只能適合比較小的iSCSI體系結構,而且需要手工配置,比較繁瑣#65377;方法2)SendTargets發現這種方法主要用于網關設備,iSCSI initiators被靜態配置連接到指定的iSCSI設備#65377;這種方法也需要手動配置地址信息,而且網關設備需要維護target設備列表,在擁有大量設備的情況下不利于存儲網絡的擴展和管理,并且它也不具備動態適應網絡變化的能力#65377;對于3)來說,SLP協議仍然局限于企業網內的應用,雖然它引入了scope的概念,將一個企業網內的服務劃分為若干個scope分別進行管理,使SLP具有了一定的可擴展性,但是它的這種平面結構并不適合于在廣域網中使用#65377;
在一個大型存儲網絡中,如果其中含有大量設備,一般采用查詢名稱服務器而不是發送廣播消息的方式#65377;當消息發送節點從名稱服務器中得到接收節點的IP地址和TCP端口號后,在需要通信時就會與目的節點建立會話#65377;iSNS協議便是這樣一種協議,它能夠克服iSCSI SAN中現有的設備發現的缺點,實現了設備發現的自動配置,能夠集中化或者分布化具有良好的擴展性,并且能夠用于大型的存儲網絡中,還能對網絡中設備狀態的改變作出反應#65377;
2iSNS協議
因特網存儲名稱服務[4],已經作為一個草案提交給IETF#65377;IETF IP存儲工作組正在進行iSNS規范的標準化工作#65377;這項規范預計不久將成為一項建議標準#65377;RFC 4171詳細介紹了iSNS協議#65377;
iSNS通過提供的一組類似于光纖通道網絡上可使用的服務,推動了IP網絡中iSCSI和光纖通道存儲設備的可擴展配置和管理#65377;這樣iSNS就允許IP網絡像光纖通道網絡一樣操作#65377;管理員不再需要每個存儲設備都手動配置各自的initiators和targets列表的device-by-device的管理模式#65377;iSNS中,每臺存儲設備都將發現和管理過程交給iSNS服務器,因而iSNS服務器被認為是統一配置點,通過該點管理工作站能夠配置和管理整個存儲網絡,包括iSCSI和光纖通道設備#65377;
iSNS包含四個主要的服務#65377;
1)名稱注冊和發現服務Targets和initiators注冊它們的屬性和地址,然后動態地獲得有關可訪問存儲設備的信息#65377;
2)發現域(discovery domain)和登錄控制服務(login control service)存儲網絡中的資源被劃分為叫做發現域的分組,而發現域則可以通過管理站進行管理#65377;發現域向本身不具備訪問控制功能的目標提供訪問控制,同時將每個initiators的登錄過程限制在可用目標所屬發現域內,以此來加強安全性#65377;
3)狀態改變通知服務iSNS服務器將有可能影響存儲節點運行狀態的網絡事件通知相關的iSNS客戶端程序#65377;存儲資源離線#65380;發現域成員關系變化以及網絡中出現鏈路故障等事件均可以觸發狀態改變通知#65377;這些通知使網絡可以迅速地適應拓撲結構中的變化,這對于可伸縮性和可用性非常重要#65377;
4)光纖通道和iSCSI設備的開放映射iSNS數據庫可以保存有關光纖通道和iSCSI設備以及在多協議環境中這兩種設備之間的映射關系的信息#65377;映射的信息可供任意授權的iSNS客戶機程序使用#65377;這種集中式的方式是開放的和可擴展的,不必使用專有機制從單個iSCSI-FC(fibre channel)網關索取映射關系#65377;
iSNS主要體系結構組成如下[5]:
a)iSNS協議(iSNSP)#65377;它是一種靈活的輕量級協議,規定iSNS客戶機與服務器間的通信方式#65377;適合多種平臺,包括交換機#65380;目標機以及服務器主機(server host)#65377;
b)iSNS客戶端(iSNS client)#65377;通過iSNSP與iSNS服務器交互#65377;iSNS客戶端是存儲設備中的一些進程,用于注冊設備屬性信息,下載自己所在發現域中其他注冊客戶端上的信息并接收發現域中的事件異步通知#65377;管理工作站(management station)是一種特殊類型的 iSNS客戶端,它能訪問iSNS中的所有發現域#65377;
c)iSNS服務器(iSNS server)#65377;響應iSNS協議查詢和請求并啟動iSNS協議狀態改變通知#65377;適當情形下,將注冊請求提交的認證信息存儲于iSNS數據庫中#65377;
d)iSNS數據庫(iSNS database)#65377;它是為iSNS服務器提供的信息庫,維護iSNS客戶端屬性信息#65377;
3iSCSI中iSNS的實現與應用
3.1iSNS對象模型及重要的數據結構
對于iSCSI來說,iSNS對象模型包含網絡實體(network entity),它到IP網絡的入口(portal),指示該iSCSI設備是發起端或目標端的存儲節點(storage node)對象,以及發現域(disco-very domain)和發現域集(discovery domain set)對象#65377;其中,網絡實體是存儲節點和入口對象的容器,發現域用于對存儲設備的連接#65380;訪問,發現域集是發現域的容器#65377;一個入口只能屬于一個網絡實體,但是可包含于一個或多個發現域中;一個存儲節點只能包含于一個網絡實體中,但可包含于一個或多個發現域中,而且一個網絡實體中可包含多個存儲節點#65377;圖1是iSNS中iSCSI的簡單對象模型#65377;
對于一個iSCSI設備(圖中的存儲節點),它按照下列結構存儲于iSNS數據庫中:
typedef struct iscsi_node {
ISCSI_Node_Idid;
uint32_tiscsi_id_len;
Entity_Identity_id;
uint32_tentity_id_len;
uint32_ttype;
char
alias[MAX_ISCSI_ALIAS_SIZE];
uint32_talias_len;
ISNS_LISTdd_id_list;
/* SCN */
uint32_tentity_index;
uint32_tiscsi_index;
uint32_tiscn_bitmap;
intiscn_sockfd;
uint32_tactiveFlag;
void
(*scn_callback)(ISNS_ATTR_VALS_CB *attr_vals_sptr);
/* Cert */
void*ptr_cert;
uint32_t cert_size;
} ISCSI_node;
iSCSI設備主要由三個部分組成,第一部分是設備本身的相關信息,包括節點ID號#65380;設備類型#65380;別名及所屬網絡實體的ID等;第二部分是SCN相關信息;第三部分是認證信息#65377;其他的如入口及網絡實體的定義與此類似#65377;
下面是iSNS中消息頭部及消息的定義:
typedef struct isns_msg_hdr {
uint16_tversion;
uint16_ttype;
uint16_tmsg_len;
uint16_tflags;
uint16_txid;
uint16_tsequence;
} ISNS_Msg_Hdr;
typedef struct isns_msg {
ISNS_Msg_Hdr hdr;
union {
uint32_t errorCode;
uint32_t error_code;
uint8_t
payload_data[ISNS_MSG_PAYLOAD_SIZE];
ISNS_Hb heartbeat;
ISNS_Req isns_req;
ISNS_Reg_Callback_Req rcb_req;
} payload;
} ISNS_Msg;
需要注意的是,在iSNS交互過程中,iSNS PDU payload中各種屬性(attribute)信息均是采用的TLV(tag-length-value)的數據格式,并且屬性值均是4 Byte對齊的#65377;但是回復消息中的回復狀態碼以及不包含iSNS屬性值的PDU payloads不采用這種格式#65377;
3.2iSNS-iSCSI系統的實現及應用
圖2是本文設計和實現的簡單系統原型圖#65377;
設計實現的過程中,主要是分為兩個部分來完成#65377;首先是核心部件——位于中心的iSNS服務器#65377;筆者使用單獨的一臺PC機作為iSNS服務器,響應iSNS協議查詢和請求,并發起iSNS協議的狀態改變通知#65377;一個注冊請求提交的iSNS客戶端屬性信息經過哈希后被存儲在位于iSNS服務器的數據庫中#65377;iSNS數據庫是iSNS服務器的信息倉庫#65377;它維護iSNS客戶端屬性信息#65377;需要注意的是,筆者默認客戶端注冊的信息是暫存在數據庫中的,如果用戶離線注冊信息會丟失,若需要保存信息,用戶將用命令指示保存信息,并將數據以文件的方式寫到磁盤上,下次用戶登錄即可使用#65377;
iSNS備份服務器(backup iSNS server)可以在活動的主iSNS服務器宕機失效或者從網絡中被移除時代替主服務器行使其功能#65377;使用的是活動—后備(active—standby)模式#65377;它們之間通過iSNS heartbeat心跳傳遞狀態信息#65377;這里的iSNS heartbeat信息僅僅是iSNS多播或廣播信息#65377;備份服務器存儲的是主服務器數據信息的拷貝,是冗余服務器,它監視著主服務器的狀態并保證它自己的數據庫與主服務器的數據庫同步#65377;其次,剩余的部分均可作為iSNS客戶端來實現#65377;這里又可分為普通客戶端和管理工作站#65377;
對于普通的客戶端,其實現流程如下:
a)在60001端口監聽iSNS server廣播或組播消息,并設置5 s超時;
b)如果發生超時,則轉j);
c)判斷是否新加入設備,如果不是新加入的設備,則轉f);
d)進行設備注冊,并加入默認的發現域;
e)進行SCN或ESI(實體狀態查詢)注冊;
f)查詢,得到其他設備的信息列表,如設備類型#65380;IP地址#65380;端口號等;
g)選擇感興趣的設備進行通信;
h)通信結束,判斷用戶是否注銷,如果用戶不需要注銷自己,則轉f);
i)向iSNS server發送注銷消息,注銷;
j)退出系統#65377;
如果客戶端在使用過程中接收到來自服務器的SCN通知,它只需重新執行查詢動作,更新可用設備列表就可以了#65377;
筆者將iSCSI targets的訪問控制交給iSNS server來完成,這與使用iSNS server來集中控制所有的存儲設備的目標是一致的#65377;其功能是由發現域來實現的#65377;而發現域是由管理工作站來控制的#65377;
對于管理工作站,筆者用一臺獨立的PC來實現,它的流程與普通客戶端類似,只不過它能訪問所有的數據記錄并擁有配置發現域的特權#65377;通過操作發現域,管理工作站能控制iSNS客戶端查詢iSNS服務器時設備發現的范圍#65377;
如圖2所示,當圖中iSNS所有的客戶端(包括兩個iSCSI initiators和兩個iSCSI targets)向服務器注冊后,通過管理工作站將iSCSI initiator1和iSCSI target1置于同一個發現域DD1內,將iSCSI initiator2和iSCSI target2置于另外一個發現域DD2內,那么,initiator1查詢時只能得到一個可用的目標設備,即target1的信息,并且只能訪問target1而不能訪問DD2中的target2#65377;這樣發現域就起到了訪問控制的作用,iSCSI用戶也能很方便地獲取授權的可用資源#65377;
4結束語
iSNS為各種各樣的IP存儲設備了提供良好的設備發現和管理的解決方案,解決了iSCSI SAN中設備發現和管理存在的問題#65377;在iSCSI存儲系統中應用iSNS協議,極大地方便了存儲網絡中的設備發現和存儲管理,作為一個輕型的協議,iSNS的功能能夠嵌入到一個IP存儲交換機,網關或路由器或集中于iSNS服務器中#65377;iSNS通過自動注冊和狀態改變通知減少了IP存儲網絡中的手工管理的負擔,使用公共密鑰認證的分發,iSNS能在處于公眾網絡或者企業IP網絡的設備間安全的進行存儲傳輸#65377;另外筆者已實現了基于IPv6的iSNS協議,它與基于IPv6的iSCSI的融合是下一步的研究內容#65377;
參考文獻:
[1]RFC 3720, Internet small computer systems interface(iSCSI)[S].
[2]PALEKAR A A, RUSSELL R D. Design and implementation of a SCSI target for storage area network[EB/OL].(2001).http://www.cs.uml.edu/ ~mbrown/iSCSI/.
[3]RFC 4018, Finding Internet small computer systems interface(iSCSI) targets and name servers by using service location protocol version 2(SLP)[S].
[4]TSENG J, GIBBONS K. Internet storage name service(iSNS)[EB/OL].[2005-09].http://www.ietf.org/rfc/rfc4171.txt?number=4171.
[5]Nishan Systems. Internet storage name service(iSNS): a technical overview[EB/OL].(2001).[2004-07-19].http://www.dostor.com/paper/2004-07-19/0002616097.shtml.
“本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文”