一種iSCSI存儲系統的實現方法

            文檔序號:7612261閱讀:439來源:國知局
            專利名稱:一種iSCSI存儲系統的實現方法
            技術領域
            iSCSI存儲系統的實現方法屬于存儲區域網絡領域,尤其涉及其中的iSCSI存儲技術領域。
            背景技術
            iSCSI(Internet Small Computer Systems Interface)協議是利用IP網絡進行I/O塊數據級存儲的端到端的傳輸協議,實現了在標準的以太網設備上在應用服務器(啟動器)和存儲設備(iSCSI控制器)之間的數據傳輸。iSCSI協議由互聯網工程業務組(IETF)進行編制,對于光纖通道存儲網絡(SAN),iSCSI是一種補充,或替代標準。iSCSI的優點之一是,使IT用戶可以利用現有構架(TCP/IP網絡)的優勢和專業技術。除了提供一種廉價的替代光纖信道的方案外,iSCSI還在應用方面帶來許多優點,如存儲合并、業務的持續性、遠程備份和恢復,以及遠程數據訪問。
            然而由于以太網絡帶寬的限制,相比起光纖通道存儲,iSCSI存儲系統存在著吞吐量不夠高的缺點。而由于iSCSI存儲系統是廉價代替品的自身特點,iSCSI系統面臨著存儲設備效率較低以及故障率較高的挑戰。并且存儲和網絡結合產生了如設備動態增減、存儲設備映射、可選路徑的新的管理任務。
            本發明實現了一種新型的高性能和高可用性的iSCSI存儲系統,有效的解決了以上所述的問題。

            發明內容
            本發明的目的在于提供一種具有高性能和高可用性的iSCSI存儲系統的實現方法。iSCSI存儲系統的硬件結構包括應用服務器,存儲網絡,iSCSI控制器和存儲設備以及管理控制臺。本發明的重點在于iSCSI存儲系統的iSCSI控制器。iSCSI控制器對存儲資源進行管理,并且對應用服務器提供存儲服務,是iSCSI存儲系統的關鍵。在iSCSI控制器上,我們采取了一系列具有創新水平的方法,提高了iSCSI存儲系統的IO吞吐率,提高了其失效容錯性(FaultTolerance),改善了其可用性(Availability)。這一系列方法的完整的構成了一個具有高性能、高可用性的iSCSI存儲系統的實現方法。
            本發明的思路是(1)分別通過對iSCSI存儲系統應用服務器和iSCSI控制器上多個網卡進行綁定,實現網絡鏈路級的負載均衡和失效冗余。
            (2)存儲設備管理模塊中的虛擬設備標識符算法確保了同一存儲設備具有固定的設備標識符,有助于存儲服務的持續。比較原有的隨機設備標識符算法,本方法具有明顯的優勢。存儲設備動態增減算法允許在iSCSI存儲服務不停止的前提下增加新的存儲設備,或者減少存儲設備,有效的提高了iSCSI存儲系統的可用性。
            (3)存儲設備映射模塊對不同來源、目的的訪問請求進行控制,確保網絡存儲中數據訪問的安全性。基于IP地址的存儲設備映射(Storage Device Mapping)方法允許對啟動器地址和iSCSI控制器上不同網卡的IP地址進行兩層映射,支持掩碼方式,并且提供基于映射規則的配置接口。相比起傳統的映射方式,本方法比較靈活,配置也較為簡單。
            (4)自適應IO負載控制能夠根據存儲設備的能力,自動對IO負載進行控制,有效地保證在存儲設備性能較低、而IO負載很高時,iSCSI存儲系統依然能夠平穩運行。
            (5)多IO路徑算法的引入一方面提高了iSCSI存儲系統iSCSI控制器的并發IO能力,另一方面實現了通道失效容錯。
            (6)iSCSI存儲系統的iSCSI控制器以軟件方式實現了RAID5和RAID6算法,保證磁盤失敗時數據的完整性,本方法作為硬件RAID卡的取代實現,具有廉價和可配置性更好等特點。
            (7)塊設備支持模塊在一般塊設備上實現了SCSI接口,使得不同的非SCSI接口設備甚至是Linux卷管理軟件(LVM)和多磁盤管理模塊(MD)一類的虛擬塊設備都能夠適用到該系統中,擴展了iSCSI存儲系統所支持的存儲設備范圍和iSCSI存儲系統控制器的功能。
            本發明的特征在于,它依次包含以下步驟1.第1步在以下兩個網絡小型計算機系統接口,也稱iSCSI的存儲系統中的任何一個的iSCSI控制器上,啟動存儲服務,把iSCSI協議即該控制器軟件作為該系統的內核模塊加載到它的操作系統中第一種iSCSI存儲系統包括多個網絡應用服務器,也稱啟動器;一個管理控制臺;通過TCP/IP網絡協議分別和上述各啟動器和一個管理控制臺通訊的一臺千兆網交換機;根據iSCSI協議和上述千兆網交換通訊的iSCSI控制器;在Linux操作系統下并根據iSCSI協議與上述iSCSI控制器通訊的多臺存儲設備;第二種iSCSI存儲系統包括多個網絡應用服務器,也稱啟動器;一個管理控制臺;一臺千兆網交換機;一臺iSCSI控制器;多臺存儲設備;各啟動器和iSCSI控制器之間直線連接,千兆網交換機和各啟動器、管理控制臺、iSCSI控制器之間經TCP/IP網絡協議通訊,iSCSI控制臺和各存儲設備之間按照iSCSI協議在Linux操作系統下運行;上述iSCSI協議包含上層由網關綁定模塊及前端目標驅動即FETD模塊有一次連接而成;中間層由與上述前端目標器驅動模塊依次相連的IO負載控制模塊和多IO路徑模塊組成;下層,即物理層有一個和多IO路徑模塊相連的設備管理模塊;
            所述網卡綁定模塊,它是一種鏈路聚合式模塊,即它使多塊網卡虛擬為一塊網卡,都具有相同的IP地址;該模塊在Linux操作系統下,針對不同需要,配備了符合IEEE 802.3ad標準的多網卡輪轉和熱備份兩種模式;所述前端目標器驅動模塊,它是公知的;所述存儲設備管理模塊,在啟動器啟動iSCSI控制器存儲服務時,它掃描連接在iSCSI控制器上的各儲備設備,提供固定的虛擬設備標識符;在熱插拔存儲設備時,啟動對存儲設備進行增減的操作;它在iSCSI控制器上設定一個線性組合形式且用以標識存儲設備編號的虛擬目標標識符數組,依次內含該設備的主機適配器號,即host;通道號,即channel;目標號,即target邏輯單元號,即lun;該模塊用上述四個變量確定一個存儲設備的位置;同時,iSCSI存儲系統的iSCSI控制器上維護著一個存儲設備列表以及表示存儲設備被掃描次數的數組;它為iSCSI控制臺提供了一個寫入命令以使該模塊重新對該存儲設備進行掃描的PROC接口;它還為iSCSI控制器提供了動態增減存儲設備的另一個PROC接口;在下述情況下iSCSI控制器啟動掃描存儲設備的操作iSCSI存儲系統的iSCSI控制器端加載控制軟件時;iSCSI系統在減少或增加了存儲設備后,存儲管理員向iSCSI控制器發出重掃描的命令;所述存儲設備模塊依次按以下步驟實施存儲設備掃描流程初始化模塊;有更多的host號否,若沒有,便返回;否則,執行下一步驟;Host中還有更多的設備否,若沒有,便返回初始化模塊下面的一步;否則,執行下一步驟;設備的類型是否為存儲磁盤,若不是,便返回初始化模塊下面的一步;否則,執行下一步驟;獲取設備的信息;構造設備信息,插入設備到表中;可用設備增1,返回初始化模塊下面的一步;所述存儲設備管理模塊依次按以下步驟實施存儲設備刪除流程管理員指定要刪除設備的標識符;從設備列表中得到該設備的信息;設置該設備的刪除標志;釋放該設備所有的未執行命令;設置該設備的引用計數為0,引用次數是指存儲管理設定的該設備的被掃描次數;返回;
            所述存儲管理模塊按以下步驟實施存儲設備增加流程管理員指定要增加的設備的標識符;設置該設備的增加標志;把該設備的標識符加入到存儲設備列表中;設置該設備的引用計數為0;自適應負載控制算法程序,它自動適應存儲設備的能力,控制低端存儲設備上的IO負載;它在上述表示一個存儲設備位置的數據組中,分別設置表示該設備同時所能處理的SCSI命令隊列的長度的域,同時設置表示目前正處于SCSI的執行隊列中的SCSI命令的個數的域,且在任何時候后者都要小于前者;同時,在中間層中,設置一個ST_HOLD_ON狀態,它表示所有到達中間層且準備完畢以便立即執行但因目前正處于SCSI的執行隊列中的SCSI命令的個數已到達該設備同時所能處理的SCSI命令隊列長度的闕值而未能得到執行的命令的狀態;所述實施負載自適應算法的程序依次含有以下程序模塊從命令隊列中得到一個需處理的SCSI命令;判別該命令是否處于ST_HOLD_ON狀態,若否,則執行下一步驟;判斷該命令是否是寫命令,若為寫命令且尚未接收到存儲數據,若是,則把該命令設置成目前正處于SCSI執行隊列中的一個正待執行的命令的狀態,執行完畢,則返回,若否,則設置成ST_HOLD_ON狀態,然后判斷目標存儲設備的同時所能處理的SCSI命令隊列長度是否大于目前正處于SCSI的執行隊列中的SCSI命令的個數,若否,則返回;若是,則執行SCSI命令并把存儲設備的目前正處于SCSI執行隊列中的SCSI命令的個數增1,要處理的SCSI命令的個數減1,返回;若從命令隊列中得到的要處理的SCSI命令處于ST_HOLD_ON狀態,則維持原狀態等待下一輪處理,執行下一步驟;該模塊再從命令隊列中得到下一步要處理的SCSI命令按以上步驟處理;若命令沒有超時,則循環反復,直到處理完命令隊列中的有要處理的SCSI命令為止;所述的多IO路徑模塊,它對不同的存儲隊列通道進行IO請求控制,實現輪轉或熱備份配置,即充分利用具有雙控功能磁盤陣列的雙通道功能,實現多個通道之間的冗余和提高;SCSI存儲系統異步IO能力;設定各主機適配器的最大通道數,記錄多IO路徑模塊中的SCSI適配器所對應的主機適配器號;對于雙控功能磁盤陣列而言,一個主機適配號所表示的SCSI適配器上的存儲設備的相關信息記錄在存儲設備列表中,另一個則保存在多IO路徑模塊定義的結構中,同時記錄兩個通道的狀態域;該模塊提供相應的PROC命令接口;在中間層用狀態ST_PATH_FAIL表達一個SCSI命令在現在的激活通道上執行失敗,一旦該模塊探測到該狀態,就把這個命令的狀態設置成ST_PATH_FAIL,并再次放入隊列中,同時選擇另外一個通道執行;多IO路徑模塊對SCSI命令的處理流程如下先判斷收到的SCSI命令是否為寫命令;若不是,則直接把該命令放入分發命令隊列中;否則,為寫命令分配數據緩沖區并把該命令放入等待隊列,等著數據到達;若數據到達,則從等待隊列中取出該寫命令,放入分發命令隊列;在確定的配置模式下,對于分發命令隊列中的命令進行判斷是否有可選擇的IO路徑,若沒有,則推出;若有,則根據設定策略選出一條可用的IO路徑,并把命令發送到該路徑再等待執行結果,若執行正確則返回,否則,把該命令放入重試隊列中,進行下一輪的路徑選擇。
            2.在物理層,還有一個軟件RAID模塊與所述的多IO路徑模塊相連所述軟件RAID模塊,它把針對RAID存儲隊列的虛擬SCSI命令根據不同的RAID算法轉化為物理SCSI命令,并且把物理SCSI命令在各個單獨物理磁盤上的執行結果合并或對虛擬SCSI命令的響應結果;使RAID模塊的全局變量維護下述兩個命令隊列虛擬SCSI命令隊列,它必須至少包含虛擬SCSI命令的狀態和虛擬SCSI命令的標識;物理SCSI命令隊列,它至少必須包括如下字段物理SCSI命令的狀態,物理SCSI命令所對應的虛擬命令,以及該物理SCSI命令的序號;所述RAID模塊依次含有以下步驟根據虛擬SCSI命令的邏輯地址信息和其他參數,把一條虛擬SCSI命令分解成物理SCSI命令并把物理SCSI命令組成隊列,同時維護虛擬SCSI和物理SCSI命令之間的關系和狀態;由SCSI層對每個物理SCSI命令進行操作;每次有一個物理SCSI命令返回后,通過該命令檢測原始命令隊列,若發現對應的所有物理SCSI命令已經處理完畢,通過分析各個物理SCSI命令的響應結果形成一個對虛擬SCSI命令的響應結果。
            3.在物理層,還有一個塊設備支持模塊與上述多IO路徑模塊相連所述塊設備支持模塊,它使iSCSI存儲系統的啟動器能連接多種非SCSI設備,包括虛擬塊設備,它是通過把SCSI命令轉化到塊IO請求來實現的;所述塊設備模塊依次含有以下執行步驟在從中間層接收一個SCSI命令后,判別該命令的目標是否為SCSI設備,若是,則把該命令發送給SCSI設備,返回;若否,則執行下一個步驟;
            判別該命令是否為查詢類命令,若是,則根據配置信息返回響應,再返回;若否,便執行下一步驟;判斷該命令是否為讀命令,若是,則分析出LBA和數據長度,再根據LBA地址算出虛擬設備中對應的偏移地址;再把偏移地址、數據長度和數據緩沖區地址傳送給塊設備讀取數據;等待塊設備把數據寫入到數據緩沖區后,塊設備支持模塊設置SCSI請求的狀態域,返回SCSI中間層;若是寫命令,則分析出LBA和數據長度后,再把啟動器端發送過來的數據存放到數據緩沖區中;再根據LBA地址算出虛擬設備中對應的偏移地址;把偏移地址、數據長度和數據緩沖區地址傳送給塊設備對塊設備寫入SCSI請求的數據緩沖區中的數據;等待塊設備層操作成功,塊設備支持模塊設置SCSI請求的狀態域并把它返回SCSI中間層。
            4.在中間層中,所述前端目標驅動器模塊和IO負載控制模塊間有一個存儲設備映射模塊它提供存儲設備位置、iSCSI控制器IP地址和啟動器IP地址三者的映射關系,控制啟動器對存儲系統中存儲設備訪問的權限,據此,訪問權限分為三種級別完全訪問、只讀訪問和禁止訪問;它對存儲管理員改變設定如下格式的權限規劃[源IP地址][源地址掩碼][目的IP地址][Target ID][訪問權限];存儲設備映射模塊向存儲管理員以PROC形式提供寫入或查看規劃、啟動或停止存儲設備映射模塊的接口;存儲設備映射模塊把向PROC接口寫入的規劃解析成以上述鏈表形式組織的規劃,該模塊通過查詢這個鏈表決定一個啟動器對某個存儲設備訪問的權限;所述存儲設備有映射模塊依次按以下三個階段實現映射流程設備發現階段,它依次含有以下步驟接收啟動器的命令,判斷是否為設備發現命令,若否,則返回;若是,則執行下一步驟;判斷是否還有存儲設備,若否,則返回;若有,則執行下一步驟;根據以上規則判斷啟動器對存儲設備所標識的權限;根據權限判斷存儲設備對啟動器是否可見,若可見,則把設備標識符填入后向啟動器返回存儲設備列表;否則,返回“是否還有存儲設備”步驟;參數協商階段,它依次含有以下步驟存儲設備映射模塊從啟動器取得連接的客戶端和服務器的地址;存儲設備映射模塊判斷該存儲設備是否為一個對啟動器禁止的存儲設備,若為禁止的存儲設備,則主動中斷該啟動器到iSCSI控制器的網絡連接;否則,進行下一階段IO操作;IO請求階段,它依次含有以下步驟
            判斷SCSI命令是否為寫命令。若否轉到“對于讀命令”;對于寫命令,先分配緩沖區,并且根據規則設置這個命令的權限,最后把命令放入等待隊列;接收到數據后,把相應的SCSI命令從等待隊列中取出;檢測命令的權限,判別該命令可否被執行。若是,則把該命令放入分發隊列;若否,丟棄該命令并構造SCSI響應向啟動器報告錯誤;對于讀命令,直接根據規則設置這個命令的權限;檢測命令的權限,判別該命令可否被執行。若是,則把該命令放入分發隊列;若否,丟棄該命令并構造SCSI響應向啟動器報告錯誤。
            本發明在清華大學計算機系高性能計算技術研究所進行過測試并在實際生產環境中加以應用。結果表明,新型高性能高可用性iSCSI存儲系統有效的提高了iSCSI系統的IO吞吐率,并在系統的可用性、失效容錯性上具備較大的優勢。


            圖1iSCSI示意圖。
            圖2iSCSI存儲系統的硬件結構圖,2a.交換機連接方式,2b.直連線連接方式。
            圖3iSCSI存儲系統的軟件結構和子模塊關系圖。
            圖4多網卡綁定示意圖,4a.交換機連接方式,利用冗余網絡鏈路實現高可用,4b.直接線方式,兩條通路提供>1.5倍帶寬,4c.直接線方式,利用冗余網絡鏈路實現高可用。
            圖5存儲設備映射示意圖。
            圖6多IO路徑模塊示意圖。
            圖7設備管理模塊流程圖,7a.設備掃描流程,7b.刪除設備流程。
            圖8設備映射模塊流程圖,8a.在設備發現階段,8b.在參數協商階段,8c.在IO請求階段。
            圖9IO負載均衡算法流程圖。
            圖10多IO路徑模塊流程圖。
            圖11塊設備支持模塊流程圖。
            具體實施例方式iSCSI協議是在標準的以太網設備上進行I/O塊數據級存儲的端到端的傳輸協議,如圖1所示。
            本發明即對iSCSI網絡存儲系統的實現方法。在這個iSCSI網絡存儲系統中,前端應用服務器通過千兆網交換機或者通過千兆直連線連接到iSCSI存儲系統iSCSI控制器上,它們之間通過TCP/IP協議進行數據傳輸,構成iSCSI存儲網絡。其硬件體系結構如圖2所示。
            其中,iSCSI存儲系統的iSCSI控制器安裝有6塊千兆網網卡,向外提供8個千兆以太網口的并行數據流,總帶寬達到6×1Gb。另外iSCSI控制器上可以連接多個存儲磁盤陣列,通過IP網絡向以應用服務器提供存儲資源服務。
            在iSCSI存儲系統的iSCSI控制器上,iSCSI控制器軟件作為操作系統內核模塊在啟動存儲服務時被加載到操作系統內核中。iSCSI控制器模塊負責iSCSI協議和SCSI協議之間的協議轉換工作,并實現了對存儲設備的控制管理和對應用服務器的請求進行管理等任務。其中,iSCSI控制器軟件從軟件體系結構上可以分為兩部分前端驅動(FETD)和SCSI中間層(STML),大體上說前者實現了iSCSI協議并負責iSCSI協議和SCSI協議之間的轉換,后者實現了一個模擬SCSI目標器,負責對SCSI命令進行響應。本發明所提出的一系列方法均基于iSCSI控制器軟件。
            本發明所提出的一系列方法在實現中可以劃分成單獨的子功能模塊,各個功能模塊之間的關系見圖3。各子功能模塊的類別及簡要功能見下表表1模塊列表

            下面對各個模塊作詳細描述。
            存儲設備管理模塊在iSCSI存儲系統中,啟動器通過指定設備標識符連接到iSCS控制器上某個特定的存儲設備。設備標識符即一個存儲控制器上某個存儲設備的標識,每個存儲設備都對應著一個設備標識符。在常見的控制器模塊中,設備標識符是按照設備的發現順序賦值的,如第一個存儲設備的標識符是0,以此類推。這樣做的缺點是,每次iSCSI控制器啟動時設備的發現順序可能是不一樣的,而且當一個新的存儲設備添加到iSCSI控制器后,原來的設備標識符將被打亂,因此在不同的時間同一個設備標識符可能對應著不同的存儲設備。
            在Linux中,SCSI層驅動用host(主機適配器號)、channel(通道號)、target(目標號)和lun(邏輯單元號)四個變量來確定一個SCSI設備的位置,該位置是由硬件連接方式決定的。
            我們在iSCSI存儲系統的控制器上實現了虛擬的目標標識符虛擬目標標識符由一個13位的整數表示。其中,bit 12~bit 10表示設備的host,bit 9~bit 8表示設備的channel,bit 7~bit 4表示設備的target,最后4個bit表示設備的lun。
            host、channel、target和lun通過線形組合形成了虛擬的設備標識符并且保證了設備的(host,channel,target,lun)到設備標識符的一一對應關系。這樣做的好處在于維護了存儲服務的持續性,當一臺iSCSI控制器節點重新啟動后,該算法能夠保證這個磁盤的虛擬設備標識符的一致性,應用服務器無需再重新配置就能夠立即投入使用。
            iSCSI存儲系統的控制器節點上維護著一個存儲設備的列表ext_scsi_device以及表示存儲設備被掃描次數的數組ext_target_valid_flag。如stml_device*ext_scsi_device[MAX_HOSTS][MAX_CHANNELS][MAX_TARGETS][MAX_LUNS];intext_target_valid_flag[MAX_HOSTS][MAX_CHANNELS][MAX_TARGETS][MAX_LUNS];int ext_scan_count;其中,Max_HOSTS,MAX_CHANNELS,MAX_TARGETS,MAX_LUNS分別表示host,channel,target,lun的最大值,它們分別是8,4,16,16。stml_device是iSCSI存儲系統中定義的表明一個存儲設備的結構,ext_scsi_device是stml_device指針的數組。則ext_scsi_device[i][j][k][l]表示的是位于(i,j,k,l)處的存儲設備,而ext_target_valid_flag[i][j][k][l]則相應的指出該設備被掃描的次數,ext_scan_count是iSCSI控制器掃描存儲設備的次數。
            當iSCSI存儲系統初始化時,ext_scsi_device各項為空且ext_target_valid_flag各項和ext_scan_count均為0。iSCSI存儲系統的設備管理模塊通過掃描SCSI的scsi_hostlist列表獲取存儲設備的信息。每次掃描存儲設備列表時,ext_scan_count自增1,且每掃描到一個有效的存儲設備時就構造一個stml_device并把ext_scsi_device相應的項指向它,最后把ext_target_valid_flag相應的項賦值成ext_scan_count。這樣,通過比較ext_target_valid_flag相應的項和ext_scan_count就可以判斷一個存儲設備是否有效。如果ext_target_valid_flag不等于ext_scan_count,則說明在最后一次掃描中并未發現該設備,即該設備是無效的。
            iSCSI控制器模塊提供了PROC接口,通過向PROC接口寫入命令可以讓設備管理模塊重新對存儲設備進行掃描。利用上述的方法,iSCSI控制器模塊對設備重新進行掃描時并不影響現有有效設備的正常工作,這意味著iSCSI控制器可以在提供存儲服務的同時對設備進行掃描。
            iSCSI存儲系統掃描存儲設備的時機是iSCSI存儲系統的iSCSI控制器被加載時;iSCSI存儲系統增加了存儲設備,存儲管理員向iSCSI控制器發出重新掃描的命令;iSCSI存儲系統減少了存儲設備,存儲管理員向iSCSI控制器發出重新掃描的命令。
            而Linux的SCSI系統提供了動態增減SCSI設備的PROC接口,刪除一個SCSI設備echo″scsi remove-single-device a b c d″>/proc/scsi/scsi類似,增加一個SCSI設備echo″scsi add-single-device a b c d″>/proc/scsi/scsi其中a是主機適配器號(從0開始)b是通道號(從0開始)c是目標號(從0開始)d是邏輯單元號(從0開始)通過這個PROC接口,存儲管理員可以動態更新Linux SCSI層的設備列表。iSCSI存儲系統的設備管理模塊和Linux的動態更新機制配合使用就可以實現iSCSI存儲系統的存儲設備動態增減的功能。
            當存儲管理員向iSCSI存儲系統控制器添加新的存儲磁盤后,存儲管理員首先用add-single-device向SCSI增加設備并向控制器發起重新掃描存儲設備的命令,iSCSI控制器將對連接在上面的存儲設備進行掃描并發現新磁盤,添加到存儲設備列表中。反之,當存儲管理員需要刪減一個存儲設備時,先用remove-single-deivce從SCSI系統中刪除設備,然后讓iSCSI控制器重新掃描存儲設備,在iSCSI存儲系統控制器的設備列表中,被刪除的存儲設備將不再有效。
            顯然,正在使用的存儲設備從邏輯上是不可以被刪除的。在Linux系統中,Scsi_Device用于描述一個SCSI設備,Scsi_Device有一個表示存儲設備引用計數的access_count域。這樣,當一個磁盤被前端使用時,我們把該磁盤的access_count增1,反之access_count減1。在remove-single-device的時候SCSI系統會首先判斷一個存儲設備的access_count是否為0,對于access_count非0的存儲設備,SCSI系統不會把它們刪除掉。引用計數保證了正在使用的存儲設備不會因為誤刪而導致存儲服務的異常。
            由此,實際上實現了在不停止服務前提下的存儲設備動態發現,存儲設備動態增減,是整個iSCSI存儲系統滿足7×24小時高速的在線訪問需求與業務的可持續性的重要保障。
            存儲設備管理模塊的存儲設備掃描和刪除一個存儲設備的流程如圖7所示。
            網卡綁定模塊將多塊網卡虛擬成為一塊網卡,使其具有相同的IP地址,來實現提升主機的網絡吞吐量或者是提高可用性,這種技術被稱作鏈路聚合(Channel bonding)。我們在Linux下自主實現了符合IEEE 802.3ad標準的多網卡輪轉(Round-Robin)和熱備份(Active-Standby)兩種發送模式,提高了應用服務器和iSCSI控制器的可用性并提供網卡的負載均衡從而提高了效率。如圖4所示。
            iSCSI存儲系統綁定模塊在IEEE 802.3ad標準框架下支持以下兩種傳輸模式1.輪轉模式(自主實現)基于網卡的順序,依次輪轉通過不同網卡發送數據;從而實現大于一個單一鏈路的發送性能。
            2.熱備份模式確保在同一時刻僅僅通過一個網卡發送數據,另外一個作為該激活卡的熱備份,在激活卡出現故障時數據流馬上切換到熱備份卡。
            針對不同的應用需求,我們在較大規模的存儲網絡中使用以太網交換機,以達到較高可用性和較好的可擴展性,而由于以太網交換機的功能限制(多數主流交換機對IEEE 802.3ad協議支持的不完備),只能實現發送的負載均衡(Transmit Load Balancing),無法實現接收負載均衡(Receive Load Balancing)。而在需要較高性能的小規模應用中,我們采用了千兆交叉線直連的結構,利用輪轉模式的綁定模塊實現了接收和發送的負載均衡,從而達到了很高的網絡性能測試中,在兩條千兆連接的直連拓撲下,TCP數據報發送和接受達到172Mbyte/s,UDP數據報協議更達到192Mbyte/s。
            存儲設備映射模塊在實際應用中,網絡存儲系統被關心的一個問題就是對于數據訪問安全性的考慮。基于IP地址的存儲設備映射實現了啟動器對虛擬設備標識符訪問權限的控制。如附圖5所示,存儲設備映射模塊允許iSCSI控制器網卡IP地址和啟動器IP地址的雙層過濾。簡而言之,存儲設備映射模塊對一個IO請求的源IP地址、目的IP地址和目的磁盤的設備標識符進行權限判定,判定的依據是存儲管理員所寫入的權限規則。訪問權限分為三個級別完全訪問、只讀訪問和禁止訪問。
            設備映射模塊是作為一個單獨的操作系統內核模塊(Kernel Module)方式存在的,存儲管理員可以根據需要決定是否加載。
            由于采取了iSCSI控制器上的IP和啟動器IP的兩層匹配,而對設備的權限級別較傳統的映射方法多了只讀訪問,存儲管理員對存儲設備的分配更加靈活。而權限規則的引入則簡化了存儲管理員的操作。
            對于存儲管理員而言,一個規則的格式如[源IP地址][源地址掩碼][目的IP地址][TargetID][訪問權限]而在存儲設備映射模塊中,規則的結構定義如下struct target_mapping_rule{struct list_head list;struct list_head hash_list;_u32 target_id;_u32 src_addr;_u32 net_mask;_u32 dest_addr;_u8 permission;};其中,target_mapping_rule是描述映射規則的結構,list_head結構用于把所有規則連接成為鏈表,list是一般的雙向鏈表,而hash_list是散列鏈表,用于高速查詢規則。target_id指明此所匹配的設備標識符,如果該字段的值是0xffffffff則匹配所有的存儲設備。src_addr和dest_addr分別制定啟動器的IP地址和iSCSI控制器的IP地址,同樣,如果這兩個字段的值是0xffffffff則匹配所有的IP地址,net_mask字段是src_addr的子網掩碼。字段permission指明權限,包括完全訪問,只讀訪問和禁止訪問。
            存儲設備映射模塊以PROC的形式向存儲管理員提供寫入規則或查看規則的接口,另外通過該接口,存儲管理員可以啟用存儲設備映射模塊或者停止存儲設備映射模塊。映射模塊把寫入的規則解析成target_mapping_rule結構并插入模塊的規則列表。
            存儲設備映射模塊把向PROC接口寫入的規則解析成target_mapping_rule結構,并以鏈表的形式組織。存儲設備映射通過查詢這個鏈表決定一個應用服務器對某個存儲設備的訪問權限。
            存儲設備映射在三個環節上對啟動器的訪問進行控制存儲設備發現,存儲設備連接和IO讀寫操作。應用服務器(啟動器)從iSCSI控制器取得存儲設備列表的過程即存儲設備發現過程。應用服務器通過發送命令從iSCSI控制器請求返回存儲設備列表,存儲設備映射模塊截獲這個命令并對iSCSI控制器的存儲列表進行過濾,最終只把該應用服務器可見的存儲設備列表返回;應用服務器在取得存儲設備的列表后,應用服務器可以把某個指定的存儲設備連接到本地,這個過程即存儲設備連接過程。當應用服務器試圖對一個對之禁止的存儲設備進行連接時,存儲設備映射模塊立即中斷該應用服務器到iSCSI控制器的網絡連接;應用服務器在成功連接存儲設備后,就可以對存儲設備進行讀寫操作。存儲設備映射模塊對所有IO流進行監測,一旦發現某個IO請求是不被允許的(如對只讀的存儲設備進行寫操作),存儲設備映射模塊丟棄該IO請求,并向應用服務器返回出錯信息。
            在實現上,存儲設備映射模塊在FETD(前端驅動)中的對設備發現的響應函數中增加了權限檢查的過程。首先,對所有可能的虛擬存儲設備標識符進行遍歷,如果該虛擬存儲設備標識符有效并且根據規則列表判定該存儲設備標識符對應用服務器的IP地址和iSCSI控制器的IP地址是可見的(可完全訪問或只讀訪問),則把該存儲設備標識符放入準備返回的存儲設備標識符列表中。
            在處理應用服務器連接存儲設備的請求時判斷該存儲設備對應用服務器是否可見。存儲設備連接的過程中,應用服務器和iSCSI控制器的iSCSI參數需要進行協商,以確定應用服務器和iSCSI控制器的傳輸參數。我們把應用服務器所試圖連接的存儲設備標識符也作為一個雙方協商的參數。在協商時,存儲設備映射模塊判斷該存儲設備標識符對于應用服務器是否可見,如果不可見則中斷協商過程,返回協商失敗的消息,最終讓iSCSI控制器斷開到應用服務器的網絡連接。
            存儲設備映射模塊在SCSI中間層(STML)中增加對IO操作進行過濾處理。為了表明對存儲設備的訪問權限,在表示命令的結構中增加一個表示權限的域authority。設置SCSI命令權限的步驟如下,首先取得發出這個命令的啟動器的IP地址、iSCSI控制器的IP地址和該命令的目的設備標識符,然后在規則列表中查詢對應的權限賦予該命令的authority域。
            在IO操作階段,存儲設備映射模塊首先判斷SCSI命令的命令類型。對于寫命令,需要分配緩沖區,并且根據規則設置這個命令的權限,最后把命令放入等待隊列,等待所需寫入數據的到來。接收到數據后,把相應的SCSI命令從等待隊列中取出,并檢測命令的權限,判別該命令可否被執行。如果允許執行,則把該命令放入分發隊列,否則丟棄該命令并構造SCSI響應向啟動器報告錯誤。對于讀命令,直接根據規則設置這個命令的權限,再檢測命令的權限,判別該命令可否被執行。如果允許執行,則把該命令放入分發隊列,否則丟棄該命令并構造SCSI響應向啟動器報告錯誤。
            該模塊的程序流程圖如圖8所示。
            自適應IO負載控制算法對于一些性能較低的存儲設備,過高的IO請求會導致設備驅動的異常,從而導致整個系統的崩潰,因此有必要在iSCSI控制器上引入對IO負載的控制。而一般的iSCSI存儲系統普遍缺乏對IO負載的監控機制,本發明實現了基于SCSI命令的IO負載控制功能。
            在表示一個存儲設備的stml_device結構中,can_queue和cmd_pending兩個域分別表示這個設備同時所能處理的SCSI命令隊列長度和目前正處于SCSI的執行隊列中的SCSI命令的個數,在任何時刻都應當保證cmd_pending小于can_queue。
            在SCSI中間層(STML)中,我們用不同的狀態來標識一個SCSI命令的所處的流程,其中一個狀態是ST_HOLD_ON。ST_HOLD_ON狀態是實現負載控制的關鍵,所有到達SCSI中間層(STML)且準備完畢可以立即執行的命令因為cmd_pending到達can_queue的閾值而未能得到執行的命令的狀態均被設置成ST_HOLD_ON狀態。ST_PENDING狀態則表明命令正處于等待狀態。
            當SCSI中間層(STML)處理一個SCSI命令時,如果命令是寫命令且尚未接收到存儲數據時,把命令的狀態置成ST_PENDING狀態并返回,否則把命令的狀態置成ST_HOLD_ON狀態,然后判斷目標存儲設備的cmd_pending是否小于can_queue,如果是則調用scsi_do_req執行SCSI命令并且把存儲設備的cmd_pending增1,scsi_do_req執行完畢后將回調函數te_cmnd_processed。其中,scsi_do_req是Linux系統SCSI層提供的接口函數,用于執行SCSI命令,而te_cmnd_processed是中間層中定義的函數,它的地址被傳入SCSI層并總是在SCSI命令執行完畢時被回調執行。在te_cmnd_processed中cmd_pending減1,這樣,cmd_pending的值就是正處于SCSI的執行隊列中的SCSI命令的個數。如果cmd_pending已經到達域值can_queue,則SCSI命令維持在ST_HOLD_ON的狀態,等待下一輪處理。同樣在handle_cmd函數中,如果發現一個命令的狀態是ST_HOLD_ON,判斷目標存儲設備的cmd_pending是否小于can_queue,如果是則調用scsi_do_req執行該SCSI命令。這樣就可以把cmd_pending數目保持在can_queue以下,保證了存儲設備正常平穩的工作。該模塊的程序流程圖如圖9所示。
            多IO路徑模塊多IO路徑模塊充分利用具有雙控功能磁盤陣列的雙通道功能,實現了多個SCSI通道之間的冗余和提高iSCSI存儲系統并發IO能力。如圖6所示。
            在多IO路徑模塊中,用下面數據結構來記錄多IO路徑算法的相關信息#define MAX_PATH 4;int multipath_host0[MAX_PATH],multipath_host1[MAX_PATH];struct multipath_private_data{stml_device*scsi_device;int host;unsigned int ext_device_state;unsigned int multi_device_state;}multipath_conf[MAX_HOSTS][MAX_CHANNELS][MAX_TARGETS][MAX_LUNS];其中,MAX_PATH的值表示最大通道數,multipath_host0、multipath_host1記錄多IO路徑模塊中的SCSI適配器所對應的主機適配器號。多IO路徑模塊用分別用兩個數組來存放multipath_host0和multipath_host1的相關信息,這兩個數組分別是ext_scsi_device和multipath_conf。連接在multipath_host0所表示的SCSI適配器上的存儲設備的相關信息記錄在ext_scsi_device數組中,連接在multipath_host1所表示的SCSI適配器的存儲設備的相關信息記錄在multipath_conf數組中。例如,多IO路徑中的主機適配器號分別為host1與host2,則multipath_host0
            =1,multipath_host1
            =2,連接在host1的存儲設備的相關信息保存在ext_scsi_device[1][][][]中,而連接在host2的存儲設備的相關信息保存在multipath_conf[2][][][]中,ext_device_state與multi_device_state分別記錄兩個通道的狀態。
            多IO路徑模塊實現了以下兩種主要方式(1)熱備份(Active-Standby)方式IO請求始終向兩個通道其中的一個發送,這個通道即激活(Active)通道,另外一個作為備用冗余。當多IO路徑模塊發現IO請求在激活通道執行失敗后,立即激活備用通道并轉到向備用通道發送IO請求。
            (2)輪轉(Round-Robin)方式IO請求以輪轉算法輪流向兩個通道發送。
            為了實現命令失敗后的重發,在SCSI中間層(STML)中用狀態ST_PATH_FAIL表示一個SCSI命令在現在的激活通道上執行失敗,當多IO路徑模塊探測到一個SCSI命令執行失敗后,就把這個命令的狀態設置成ST_PATH_FAIL并再次放入隊列中。如果一個命令的狀態是ST_PATH_FAIL,則需要選擇另外一個通道執行。
            多IO路徑模塊對SCSI命令處理流程如下(1)多IO路徑模塊接收到一個SCSI命令后,先判斷這個命令是否是寫命令。
            (2)如果不是寫命令,則直接把該命令放入分發命令隊列中。否則,為寫命令分配數據緩沖區并把該命令放入等待隊列,等待數據到達。如果數據到達,則從等待隊列中取出該命令放入分發命令隊列。
            (3)對于分發命令隊列中的命令進行判斷是否有可選擇的IO路徑,如果沒有則退出,如果有,則根據策略選出一條可用的IO路徑,并把命令發送到該路徑并等待執行結果,如果執行正確則返回,否則把該命令放入重試隊列中,進行下一輪的路徑選擇。
            多IO路徑模塊的程序流程如圖10所示。
            存儲管理員通過多IO路徑模塊提供的PROC接口設置多IO路徑模塊的方式,實現在iSCSI控制器上IO路徑的多通道冗余或提高iSCSI控制器的IO并發能力。
            軟件RAID模塊在傳統的應用中,存儲的RAID的功能一般由硬件RAID卡完成,而iSCSI存儲系統的軟件RAID模塊可以把多個具有SCSI接口的磁盤以軟件方式組織成為RAID5或RAID6冗余存儲陣列。iSCSI控制器把單獨的磁盤組織成存儲陣列提供給應用服務器,應用服務器對這些存儲陣列發出的SCSI命令成為虛擬SCSI命令,虛擬SCSI命令到達iSCSI控制器后,必須被分解成針對單個物理磁盤的SCSI物理SCSI命令。另一方面,物理SCSI命令執行的結果也需要在iSCSI控制器上組合成為對應用服務器的SCSI響應。軟件RAID模塊所做的就是把針對RAID存儲陣列的虛擬SCSI命令根據不同的RAID算法轉化為物理SCSI命令,并且把物理SCSI命令在各個單獨物理磁盤上的執行結果合并成為對虛擬SCSI命令的響應結果。
            根據以上所述,SCSI命令的處理過程主要包括三個步驟1.虛擬SCSI命令到物理SCSI命令的拆分2.物理SCSI命令的處理3.物理SCSI命令結果對虛擬SCSI命令的反饋軟件RAID模塊的全局變量target_data維護兩個命令隊列一個是虛擬SCSI命令隊列,另一個是物理SCSI命令隊列。其中虛擬SCSI命令隊列負責對從前端驅動(FETD)傳遞過來的虛擬SCSI命令進行處理。通過對虛擬SCSI命令的邏輯地址信息和其他參數進行分析,一個虛擬SCSI命令可以拆分成一個或多個物理SCSI命令,每個物理SCSI命令能由SCSI層進行執行操作。當一個虛擬SCSI命令對應的所有物理SCSI命令都處理完后,通過分析各個物理SCSI命令的響應結果,從而形成一個對虛擬SCSI命令的響應結果。而物理SCSI命令隊列負責對物理SCSI命令的處理。
            為了實現上述功能,虛擬SCSI命令必須至少包含虛擬SCSI命令的狀態和虛擬SCSI命令的標識;而物理SCSI命令必須包含如下字段物理SCSI命令的狀態,物理SCSI命令所屬的虛擬SCSI命令,以及該物理SCSI命令的序號。
            在處理虛擬SCSI命令的函數中,從前端驅動(FETD)接收到的虛擬SCSI命令被封裝成一個Target_Virtual_Scsi_Cmnd結構,并把該虛擬命令插入虛擬命令隊列。
            下列的幾個步驟是虛擬SCSI命令處理過程的主要步驟。
            是把虛擬SCSI命令分解成物理SCSI命令,并把物理SCSI命令插入相應隊列,同時維護虛擬SCSI命令和物理SCSI命令之間的關系和狀態。
            每次有一個物理SCSI命令返回后,通過該命令檢測原始命令隊列,如果發現有對應的所有物理SCSI命令已經處理完成的虛擬SCSI命令,則改變該虛擬SCSI命令的狀態,然后進行對虛擬SCSI命令返回結果的模擬。
            這樣我們只要作如下更改,就可以實現對STML的擴展,從而使之適合軟件RAID模塊。
            在上面所述的基礎上,我們可以把一條針對RAID5/RAID6的SCSI命令進行命令拆分、執行和結果合成。
            軟件RAID需要模擬一系列的讀寫命令,包括READ(6)/WRITE(6),READ(10)/WRITE(10),READ(12)/WRITE(12)和READ(16)/WRITE(16)。這些命令的區別在于命令長度不一樣,因此它們的尋址范圍和一次請求的長度都不大一樣。對不同長度命令的解析過程也不盡相同。
            如READ(10)命令的第0字節是操作碼,它還包括塊邏輯地址(LBA,Logical Block Address)和傳輸長度等信息。其中塊邏輯地址位于該命令的第2到第5字節,因此READ(10)命令的邏輯地址LBA可用下列的公式計算(其中cmnd為SCSI命令)lba=(cmnd[2]<<24)+(cmnd[3]<<16)+(cmnd[4]<<8)+cmnd[5];根據計算公式得到命令的塊邏輯地址后,我們就能計算出讀請求在虛擬設備中的偏移位置seek=lba*BLOCKSIZEBLOCKSIZE的大小一般為512字節。
            而READ_10命令所請求的塊數可以計算如下num=cmd[8]+(cmd[7]<<8)在解析成LBA地址和請求傳輸長度之后,軟件RAID模塊根據不同的RAID算法以及RAID的配置信息得出針對每一個磁盤的讀寫偏移、讀寫數據及其長度,并且重新構造成針對實際磁盤的物理SCSI命令。
            之后RAID模塊調用scsi_do_req對每個物理命令進行執行并得到其結果,再把所有的結果合成一個結果。
            除了讀寫操作之外,軟件RAID模塊還需要對啟動器發起的一些查詢命令做出響應,如INQUIRY命令。對于這些命令,我們可以根據配置信息直接返回其結果。
            塊設備支持模塊塊設備支持模塊實現SCSI命令到塊IO請求轉化,并把塊IO的請求結果封裝成SCSI結果。這實際上相當于在一般的塊設備上增加了一層SCSI接口層。塊設備支持模塊不僅能夠支持不具備SCSI接口的物理設備,如IDE磁盤,也能夠支持包括LVM,MD在內的虛擬塊設備,而LVM實現了虛擬化存儲,MD實現了軟件RAID功能,顯然塊設備支持擴大了iSCSI存儲系統對存儲設備的支持范圍,擴展了iSCSI存儲系統的功能。
            塊設備支持模塊實現的重點在于對SCSI讀寫命令的解析和對SCSI讀寫命令返回結果的模擬。塊設備支持模塊首先需要從前端發送過來的SCSI讀寫命令解析成為塊設備讀寫請求,主要是設備地址和數據讀寫長度的解析。然后把塊設備請求執行的結果轉化成為SCSI命令的請求結果用于相應前端。
            下面分別就SCSI的讀請求和寫請求對這個處理過程作簡要的介紹。
            對于讀請求,塊設備支持模塊首先從SCSI請求中解析出LBA地址和所讀取的數據長度,然后根據LBA地址算出虛擬設備中對應的偏移地址,再把偏移地址、數據長度和數據緩沖區地址傳遞給塊設備讀取數據。等待塊設備把數據讀入到數據緩沖區后,塊設備支持模塊設置SCSI請求的狀態域并把它返回iSCSI控制器SCSI中間層(STML)。
            對于寫請求。塊設備支持模塊同樣從SCSI請求中解析出LBA地址、數據長度以及把啟動器端發送過來的數據存放如數據緩沖區中,然后根據LBA地址算出虛擬設備中對應的偏移地址,再把偏移地址、數據長度和數據緩沖區地址傳遞給塊設備層對塊設備寫入SCSI請求的數據緩沖區中的數據。等待塊設備層操作成功后,塊設備支持模塊設置SCSI請求的狀態域并把它返回SCSI中間層(STML)。
            塊設備支持模塊支持的SCSI讀寫命令包括READ(6)/WRITE(6),READ(10)/WRITE(10),READ(12)/WRITE(12)和READ(16)/WRITE(16)。這些命令的解析過程和在RAID模塊中的拆分過程類似。所不同的是其執行和結果合成的過程不同。在本發明的實現中,對塊設備的打開關閉和讀寫操作是調用內核的filp_open/filp_close,f_op->llseek,f_op->read和f_op->write完成的。
            塊設備支持模塊的流程圖如圖11所示。
            測試結果性能測試對iSCSI存儲系統的測試分別從IO吞吐率(throughput),平均反應時間(average responsetime)兩方面進行。這兩者是衡量iSCSI存儲系統性能的重要指標。測試在一臺iSCSI控制器和三臺前端服務器上進行。I/O節點機采用32位安騰2.4GHZ雙CPU服務器,內存2GB,操作系統為Linux(Kernel 2.4.26)。存儲子系統采用Qlogic公司的QLA2200光纖通道卡,以及由2個Odysys公司的磁盤柜。在iSCSI控制器上我們安裝有6塊千兆以太網卡,并且每兩個綁定為一個IP,前端服務器每臺安裝有2塊網卡,均綁定為一個IP,前端服務器和iSCSI控制器用直連線相連,Bonding算法選擇Active-Standby方式。
            在測試中,我們測試了在不同塊大小下完全順序讀寫的吞吐率和平均反應時間,測試工具是intel的iometer,結果如下表所示。
            表2IO吞吐率

            表3平均響應時間


            上述結果表明,iSCSI存儲系統具有較高的IO吞吐率和較短的平均響應時間。
            網絡鏈路冗余測試此項測試的目的是測試IO控制器進行多網卡綁定并配置成為以熱備份算法傳輸時的鏈路冗余功能。
            在測試中,我們把IO控制器上的兩塊網卡綁定成一個IP,同樣把應用服務器的兩塊網卡綁定成一個IP,并設定網卡綁定模塊的傳輸算法為熱備份方式。IO控制器上兩塊網卡分別通過直連線和應用服務器的兩塊網卡相連接,按照以下步驟進行測試(1)啟動IO控制器的iSCSI存儲服務,啟動應用服務器iSCSI啟動器軟件把iSCSI系統上一個存儲設備映射到本地,并啟動應用程序對iSCSI存儲設備進行讀寫。在IO控制器上啟動traffic工具對兩個網卡的流量進行監控,這時可以看到數據流通過激活(Active)鏈路進行傳輸。
            (2)人為拔掉激活鏈路的網線。這時可以看到數據流立即切換到原來的備份鏈路。應用服務器上的應用程序讀寫沒有察覺出明顯的影響。
            (3)把網線重新插好,再拔掉原來的備份網線。可以看到數據流立即切換到原來的鏈路。應用服務器上的應用程序讀寫沒有察覺出明顯的影響。
            上面的測試表明,iSCSI存儲系統通過網卡綁定提供了網絡鏈路級的冗余,提高了系統的可用性。
            多IO路徑模塊測試此項測試的目的是測試IO控制器的多IO路徑模塊的通道冗余功能。
            在測試中,我們在IO控制器安裝兩塊SCSI卡,并通過兩根SCSI數據線和一個雙通道磁盤陣列的兩個通道連接,按照以下步驟進行測試(1)啟動IO控制器的iSCSI存儲服務,啟動應用服務器iSCSI啟動器軟件把iSCSI系統上的雙通道磁盤陣列設備映射到本地,并啟動應用程序對陣列進行讀寫。
            (2)人為斷掉其中正在使用的SCSI數據通道。應用程序讀寫沒有受到明顯的影響。
            (3)把SCSI數據線重新插好,再斷掉另外一個SCSI數據通道。應用服務器上的應用程序讀寫沒有察覺出明顯的影響。
            上面的測試表明,iSCSI存儲系統通過提供了SCSI數據通道級的冗余,提高了系統的可用性。
            設備管理模塊測試此項測試主要測試設備管理模塊的在線添減存儲設備的情況。分別分以下幾種情況測試1.刪除正在讀寫的存儲設備。這種情況模擬在應用服務器正在讀寫某塊磁盤時此磁盤發生物理故障,需要刪除更換的情況。
            按照以下步驟測試(1)啟動IO控制器的iSCSI存儲服務,啟動應用服務器iSCSI啟動器軟件把iSCSI系統上一個存儲磁盤映射到本地,在應用服務器上啟動用應用程序對該磁盤進行讀寫操作。
            (2)在IO控制器上調用iscsi_remove腳本,通過iSCSI存儲系統設備管理模塊提供的PROC接口發出刪除該磁盤的命令。
            (3)可以看到,應用服務器上應用程序的讀寫操作停止。過一段時間后,應用服務器到IO控制器的網絡鏈路中斷,應用服務器上映射過來的存儲磁盤消失,應用程序中斷讀寫。
            從以上的測試可以看出,在存儲設備出現物理故障的情況下,iSCSI系統能夠安全的刪除該設備。
            2.正在讀寫時刪除其他存儲設備。這種情況模擬在應用服務器正在讀寫時,某塊不在讀寫的磁盤發生物理故障,需要刪除更換的情況。
            按照以下步驟測試(1)啟動IO控制器的iSCSI存儲服務,啟動應用服務器iSCSI啟動器軟件把iSCSI系統上一個存儲磁盤映射到本地,在應用服務器上啟動用應用程序對該磁盤進行讀寫操作。
            (2)在IO控制器上調用iscsi_remove腳本,通過iSCSI存儲系統設備管理模塊提供的PROC接口發出刪除IO控制器上另外一個磁盤的命令。
            (3)可以看到,應用服務器上應用程序的讀寫沒有受到任何影響。而應用服務器上的iSCSI啟動器的存儲設備列表中已經看不到被刪除的磁盤。
            從以上的測試可以看出,iSCSI存儲系統提供了在不停止存儲服務的情況下刪除存儲設備的功能。
            3.正在讀寫時增加一個存儲設備。這種情況模擬在應用服務器正在讀寫時,需要增加存儲資源的情況。
            按照以下步驟測試(1)啟動IO控制器的iSCSI存儲服務,啟動應用服務器iSCSI啟動器軟件把iSCSI系統上一個存儲磁盤映射到本地,在應用服務器上啟動用應用程序對該磁盤進行讀寫操作。
            (2)在存儲資源中增加一塊物理磁盤,在IO控制器上調用scsi_add腳本,使得SCSI更新存儲設備列表,再調用iscsi_rescan腳本通過iSCSI存儲系統設備管理模塊提供的PROC接口發出重新掃描存儲設備列表的命令。
            (3)可以看到,應用服務器上應用程序的讀寫沒有受到任何影響。而應用服務器上的iSCSI啟動器的存儲設備列表中增加了剛剛所加進來的磁盤。
            從以上的測試可以看出,iSCSI存儲系統提供了在不停止存儲服務的情況下增加存儲設備的功能。
            塊設備支持模塊測試在此項測試中,我們在IO控制器上創建一個內存虛擬盤(所有讀寫操作均在內存中),一個硬件RAID0陣列,一個MD模塊RAID0虛擬設備。虛擬設備是一個塊設備,不具備SCSI接口,需要塊設備支持模塊的支持。我們在應用服務器上分別用IOMeter測試內存盤,SCSI磁盤和塊設備支持模塊的虛擬盤,得出IO吞吐率和IO延時。在此項測試中,應用服務器只有一臺。在塊大小為1MB,的情況下,測試結果如下表4IO吞吐率(MB/s)

            表5IO延時(ms)

            從以上兩表可以看到對于讀請求,虛擬RAID0卷的IO吞吐率是硬件RAID0卷的IO吞吐率的2.04倍。而對于寫請求,這個值是1.82倍。
            對于讀請求,虛擬RAID0卷的IO延時是硬件RAID0卷的IO延時的20%。而對于寫請求,這個值是23%。
            測試表明,塊支持模塊可以很好的支持虛擬塊設備,并且提供了高性能的協議轉換機制。測試中虛擬的塊設備的性能甚至高于硬件設備,這主要是由于塊設備層高速緩存(Cache)的作用。
            權利要求
            1.一種iSCSI存儲系統的實現方法,其特征在于,它依次包含以下步驟第1步在以下兩個網絡小型計算機系統接口,也稱iSCSI的存儲系統中的任何一個的iSCSI控制器上,啟動存儲服務,把iSCSI協議即該控制器軟件作為該系統的內核模塊加載到它的操作系統中第一種iSCSI存儲系統包括多個網絡應用服務器,也稱啟動器;一個管理控制臺;通過TCP/IP網絡協議分別和上述各啟動器和一個管理控制臺通訊的一臺千兆網交換機;根據iSCSI協議和上述千兆網交換通訊的iSCSI控制器;在Linux操作系統下并根據iSCSI協議與上述iSCSI控制器通訊的多臺存儲設備;第二種iSCSI存儲系統包括多個網絡應用服務器,也稱啟動器;一個管理控制臺;一臺千兆網交換機;一臺iSCSI控制器;多臺存儲設備;各啟動器和iSCSI控制器之間直線連接,千兆網交換機和各啟動器、管理控制臺、iSCSI控制器之間經TCP/IP網絡協議通訊,iSCSI控制臺和各存儲設備之間按照iSCSI協議在Linux操作系統下運行;上述iSCSI協議包含上層由網關綁定模塊及前端目標驅動即FETD模塊有一次連接而成;中間層由與上述前端目標器驅動模塊依次相連的IO負載控制模塊和多IO路徑模塊組成;下層,即物理層有一個和多IO路徑模塊相連的設備管理模塊;所述網卡綁定模塊,它是一種鏈路聚合式模塊,即它使多塊網卡虛擬為一塊網卡,都具有相同的IP地址;該模塊在Linux操作系統下,針對不同需要,配備了符合IEEE 802.3ad標準的多網卡輪轉和熱備份兩種模式;所述前端目標器驅動模塊,它是公知的;所述存儲設備管理模塊,在啟動器啟動iSCSI控制器存儲服務時,它掃描連接在iSCSI控制器上的各儲備設備,提供固定的虛擬設備標識符;在熱插拔存儲設備時,啟動對存儲設備進行增減的操作;它在iSCSI控制器上設定一個線性組合形式且用以標識存儲設備編號的虛擬目標標識符數組,依次內含該設備的主機適配器號,即host;通道號,即channel;目標號,即target;邏輯單元號,即lun;該模塊用上述四個變量確定一個存儲設備的位置;同時,iSCSI存儲系統的iSCSI控制器上維護著一個存儲設備列表以及表示存儲設備被掃描次數的數組;它為iSCSI控制臺提供了一個寫入命令以使該模塊重新對該存儲設備進行掃描的PROC接口;它還為iSCSI控制器提供了動態增減存儲設備的另一個PROC接口;在下述情況下iSCSI控制器啟動掃描存儲設備的操作iSCSI存儲系統的iSCSI控制器端加載控制軟件時;iSCSI系統在減少或增加了存儲設備后,存儲管理員向iSCSI控制器發出重掃描的命令;所述存儲設備模塊依次按以下步驟實施存儲設備掃描流程初始化模塊;有更多的host號否,若沒有,便返回;否則,執行下一步驟;Host中還有更多的設備否,若沒有,便返回初始化模塊下面的一步;否則,執行下一步驟;設備的類型是否為存儲磁盤,若不是,便返回初始化模塊下面的一步;否則,執行下一步驟;獲取設備的信息;構造設備信息,插入設備到表中;可用設備增1,返回初始化模塊下面的一步;所述存儲設備管理模塊依次按以下步驟實施存儲設備刪除流程管理員指定要刪除設備的標識符;從設備列表中得到該設備的信息;設置該設備的刪除標志;釋放該設備所有的未執行命令;設置該設備的引用計數為0,引用次數是指存儲管理設定的該設備的被掃描次數;返回;所述存儲管理模塊按以下步驟實施存儲設備增加流程管理員指定要增加的設備的標識符;設置該設備的增加標志;把該設備的標識符加入到存儲設備列表中;設置該設備的引用計數為0;自適應負載控制算法程序,它自動適應存儲設備的能力,控制低端存儲設備上的IO負載;它在上述表示一個存儲設備位置的數據組中,分別設置表示該設備同時所能處理的SCSI命令隊列的長度的域,同時設置表示目前正處于SCSI的執行隊列中的SCSI命令的個數的域,且在任何時候后者都要小于前者;同時,在中間層中,設置一個ST_HOLD_ON狀態,它表示所有到達中間層且準備完畢以便立即執行但因目前正處于SCSI的執行隊列中的SCSI命令的個數已到達該設備同時所能處理的SCSI命令隊列長度的闕值而未能得到執行的命令的狀態;所述實施負載自適應算法的程序依次含有以下程序模塊從命令隊列中得到一個需處理的SCSI命令;判別該命令是否處于ST_HOLD_ON狀態,若否,則執行下一步驟;判斷該命令是否是寫命令,若為寫命令且尚未接收到存儲數據,若是,則把該命令設置成目前正處于SCSI執行隊列中的一個正待執行的命令的狀態,執行完畢,則返回,若否,則設置成ST_HOLD_ON狀態,然后判斷目標存儲設備的同時所能處理的SCSI命令隊列長度是否大于目前正處于SCSI的執行隊列中的SCSI命令的個數,若否,則返回;若是,則執行SCSI命令并把存儲設備的目前正處于SCSI執行隊列中的SCSI命令的個數增1,要處理的SCSI命令的個數減1,返回;若從命令隊列中得到的要處理的SCSI命令處于ST_HOLD_ON狀態,則維持原狀態等待下一輪處理,執行下一步驟;該模塊再從命令隊列中得到下一步要處理的SCSI命令按以上步驟處理;若命令沒有超時,則循環反復,直到處理完命令隊列中的有要處理的SCSI命令為止;所述的多IO路徑模塊,它對不同的存儲隊列通道進行IO請求控制,實現輪轉或熱備份配置,即充分利用具有雙控功能磁盤陣列的雙通道功能,實現多個通道之間的冗余和提高;SCSI存儲系統異步IO能力;設定各主機適配器的最大通道數,記錄多IO路徑模塊中的SCSI適配器所對應的主機適配器號;對于雙控功能磁盤陣列而言,一個主機適配號所表示的SCSI適配器上的存儲設備的相關信息記錄在存儲設備列表中,另一個則保存在多IO路徑模塊定義的結構中,同時記錄兩個通道的狀態域;該模塊提供相應的PROC命令接口;在中間層用狀態ST_PATH_FAIL表達一個SCSI命令在現在的激活通道上執行失敗,一旦該模塊探測到該狀態,就把這個命令的狀態設置成ST_PATH_FAIL,并再次放入隊列中,同時選擇另外一個通道執行;多IO路徑模塊對SCSI命令的處理流程如下先判斷收到的SCSI命令是否為寫命令;若不是,則直接把該命令放入分發命令隊列中;否則,為寫命令分配數據緩沖區并把該命令放入等待隊列,等著數據到達;若數據到達,則從等待隊列中取出該寫命令,放入分發命令隊列;在確定的配置模式下,對于分發命令隊列中的命令進行判斷是否有可選擇的IO路徑,若沒有,則推出;若有,則根據設定策略選出一條可用的IO路徑,并把命令發送到該路徑再等待執行結果,若執行正確則返回,否則,把該命令放入重試隊列中,進行下一輪的路徑選擇。
            2.根據權利要求1所述的一種iSCSI存儲系統的實現方法,其特征在于在物理層,還有一個軟件RAID模塊與所述的多IO路徑模塊相連所述軟件RAID模塊,它把針對RAID存儲隊列的虛擬SCSI命令根據不同的RAID算法轉化為物理SCSI命令,并且把物理SCSI命令在各個單獨物理磁盤上的執行結果合并或對虛擬SCSI命令的響應結果;使RAID模塊的全局變量維護下述兩個命令隊列虛擬SCSI命令隊列,它必須至少包含虛擬SCSI命令的狀態和虛擬SCSI命令的標識;物理SCSI命令隊列,它至少必須包括如下字段物理SCSI命令的狀態,物理SCSI命令所對應的虛擬命令,以及該物理SCSI命令的序號;所述RAID模塊依次含有以下步驟根據虛擬SCSI命令的邏輯地址信息和其他參數,把一條虛擬SCSI命令分解成物理SCSI命令并把物理SCSI命令組成隊列,同時維護虛擬SCSI和物理SCSI命令之間的關系和狀態;由SCSI層對每個物理SCSI命令進行操作;每次有一個物理SCSI命令返回后,通過該命令檢測原始命令隊列,若發現對應的所有物理SCSI命令已經處理完畢,通過分析各個物理SCSI命令的響應結果形成一個對虛擬SCSI命令的響應結果。
            3.根據權利要求1所述的一種iSCSI存儲系統的實現方法,其特征在于在物理層,還有一個塊設備支持模塊與上述多IO路徑模塊相連所述塊設備支持模塊,它使iSCSI存儲系統的啟動器能連接多種非SCSI設備,包括虛擬塊設備,它是通過把SCSI命令轉化到塊IO請求來實現的;所述塊設備模塊依次含有以下執行步驟在從中間層接收一個SCSI命令后,判別該命令的目標是否為SCSI設備,若是,則把該命令發送給SCSI設備,返回;若否,則執行下一個步驟;判別該命令是否為查詢類命令,若是,則根據配置信息返回響應,再返回;若否,便執行下一步驟;判斷該命令是否為讀命令,若是,則分析出LBA和數據長度,再根據LBA地址算出虛擬設備中對應的偏移地址;再把偏移地址、數據長度和數據緩沖區地址傳送給塊設備讀取數據;等待塊設備把數據寫入到數據緩沖區后,塊設備支持模塊設置SCSI請求的狀態域,返回SCSI中間層;若是寫命令,則分析出LBA和數據長度后,再把啟動器端發送過來的數據存放到數據緩沖區中;再根據LBA地址算出虛擬設備中對應的偏移地址;把偏移地址、數據長度和數據緩沖區地址傳送給塊設備對塊設備寫入SCSI請求的數據緩沖區中的數據;等待塊設備層操作成功,塊設備支持模塊設置SCSI請求的狀態域并把它返回SCSI中間層。
            4.根據權利要求1所述的一種iSCSI存儲系統的實現方法,其特征在于在中間層中,所述前端目標驅動器模塊和IO負載控制模塊間有一個存儲設備映射模塊它提供存儲設備位置、iSCSI控制器IP地址和啟動器IP地址三者的映射關系,控制啟動器對存儲系統中存儲設備訪問的權限,據此,訪問權限分為三種級別完全訪問、只讀訪問和禁止訪問;它對存儲管理員改變設定如下格式的權限規劃[源IP地址][源地址掩碼][目的IP地址][Target ID][訪問權限];存儲設備映射模塊向存儲管理員以PROC形式提供寫入或查看規劃、啟動或停止存儲設備映射模塊的接口;存儲設備映射模塊把向PROC接口寫入的規劃解析成以上述鏈表形式組織的規劃,該模塊通過查詢這個鏈表決定一個啟動器對某個存儲設備訪問的權限;所述存儲設備有映射模塊依次按以下三個階段實現映射流程設備發現階段,它依次含有以下步驟接收啟動器的命令,判斷是否為設備發現命令,若否,則返回;若是,則執行下一步驟;判斷是否還有存儲設備,若否,則返回;若有,則執行下一步驟;根據以上規則判斷啟動器對存儲設備所標識的權限;根據權限判斷存儲設備對啟動器是否可見,若可見,則把設備標識符填入后向啟動器返回存儲設備列表;否則,返回“是否還有存儲設備”步驟;參數協商階段,它依次含有以下步驟存儲設備映射模塊從啟動器取得連接的客戶端和服務器的地址;存儲設備映射模塊判斷該存儲設備是否為一個對啟動器禁止的存儲設備,若為禁止的存儲設備,則主動中斷該啟動器到iSCSI控制器的網絡連接;否則,進行下一階段IO操作;IO請求階段,它依次含有以下步驟判斷SCSI命令是否為寫命令。若否轉到“對于讀命令”;對于寫命令,先分配緩沖區,并且根據規則設置這個命令的權限,最后把命令放入等待隊列;接收到數據后,把相應的SCSI命令從等待隊列中取出;檢測命令的權限,判別該命令可否被執行。若是,則把該命令放入分發隊列;若否,丟棄該命令并構造SCSI響應向啟動器報告錯誤;對于讀命令,直接根據規則設置這個命令的權限;檢測命令的權限,判別該命令可否被執行。若是,則把該命令放入分發隊列;若否,丟棄該命令并構造SCSI響應向啟動器報告錯誤。
            全文摘要
            一種iSCSI存儲系統的實現方法屬于存儲區域網絡領域,其特征在于在iSCSI控制器上實現了iSCSI協議,它包括實現不同的負載均衡方法的網卡綁定模塊、提供固定的虛擬設備標識符和熱插拔功能的存儲設備管理模塊、控制低端存儲設備并行IO負載的自適應IO負載控制程序以及對不同的存儲陣列通道進行IO請求控制的多IO路徑模塊。必要時,可增設控制啟動器對存儲設備的訪問權限的存儲設備映射模塊、實現SCSI命令和塊設備IO相互轉化的塊設備支持模塊以及軟件RAID模塊。它提高了數據塊的吞吐率及平均響應時間,在系統可用性及失效容錯等也有較大優勢。
            文檔編號H04L29/06GK1633131SQ200510011179
            公開日2005年6月29日 申請日期2005年1月14日 優先權日2005年1月14日
            發明者舒繼武, 薛巍, 潘家銘, 羅駿, 于冰, 鄭緯民 申請人:清華大學
            網友詢問留言 已有0條留言
            • 還沒有人留言評論。精彩留言會獲得點贊!
            1
            婷婷六月激情在线综合激情,亚洲国产大片,久久中文字幕综合婷婷,精品久久久久久中文字幕,亚洲一区二区三区高清不卡,99国产精品热久久久久久夜夜嗨 ,欧美日韩亚洲综合在线一区二区,99国产精品电影,伊人精品线视天天综合,精品伊人久久久大香线蕉欧美
            亚洲精品1区 国产成人一级 91精品国产欧美一区二区 亚洲精品乱码久久久久久下载 国产精品久久久久久久伊一 九色国产 国产精品九九视频 伊人久久成人爱综合网 欧美日韩亚洲区久久综合 欧美日本一道免费一区三区 夜夜爽一区二区三区精品 欧美日韩高清一区二区三区 国产成人av在线 国产精品对白交换绿帽视频 国产视频亚洲 国产在线欧美精品 国产精品综合网 国产日韩精品欧美一区色 国产日韩精品欧美一区喷 欧美日韩在线观看区一二 国产区精品 欧美视频日韩视频 中文字幕天天躁日日躁狠狠躁97 视频一二三区 欧美高清在线精品一区二区不卡 国产精品揄拍一区二区久久 99久久综合狠狠综合久久aⅴ 亚洲乱码视频在线观看 日韩在线第二页 亚洲精品无码专区在线播放 成人亚洲网站www在线观看 欧美三级一区二区 99久久精品免费看国产高清 91麻豆国产在线观看 最新日韩欧美不卡一二三区 成人在线观看不卡 日韩国产在线 在线亚洲精品 亚洲午夜久久久久中文字幕 国产精品成人久久久久久久 精品国产一区二区在线观看 欧美精品国产一区二区三区 中文在线播放 亚洲第一页在线视频 国产午夜精品福利久久 九色国产 精品国产九九 国产永久视频 久久精品人人做人人综合试看 国产一区二区三区免费观看 亚洲精品国产电影 9999热视频 国产精品资源在线 麻豆久久婷婷国产综合五月 国产精品免费一级在线观看 亚洲国产一区二区三区青草影视 中文在线播放 国产成人综合在线 国产在线观看色 国产亚洲三级 国产片一区二区三区 久久99精品久久久久久牛牛影视 亚洲欧美日韩国产 四虎永久免费网站 国产一毛片 国产精品视频在 九九热在线精品 99精品福利视频 色婷婷色99国产综合精品 97成人精品视频在线播放 精品久久久久久中文字幕 亚洲欧美一区二区三区孕妇 亚洲欧美成人网 日韩高清在线二区 国产尤物在线观看 在线不卡一区二区 91网站在线看 韩国精品福利一区二区 欧美日韩国产成人精品 99热精品久久 国产精品免费视频一区 高清视频一区 精品九九久久 欧美日韩在线观看免费 91欧美激情一区二区三区成人 99福利视频 亚洲国产精品91 久热国产在线 精品久久久久久中文字幕女 国产精品久久久久久久久99热 成人自拍视频网 国产精品视频久久久久久 久久影院国产 国产玖玖在线观看 99精品在线免费 亚洲欧美一区二区三区导航 久久久久久久综合 国产欧美日韩精品高清二区综合区 国产精品视频自拍 亚洲一级片免费 久久久久久九九 国产欧美自拍视频 视频一区二区在线观看 欧美日韩一区二区三区久久 中文在线亚洲 伊人热人久久中文字幕 日韩欧美亚洲国产一区二区三区 欧美亚洲国产成人高清在线 欧美日韩国产码高清综合人成 国产性大片免费播放网站 亚洲午夜综合网 91精品久久一区二区三区 国产无套在线播放 国产精品视频网站 国产成人亚洲精品老王 91在线网站 国产视频97 欧美黑人欧美精品刺激 国产一区二区三区免费在线视频 久久久国产精品免费看 99re6久精品国产首页 久久精品91 国产成人一级 国产成人精品曰本亚洲 日本福利在线观看 伊人成综合网 久久综合一本 国产综合久久久久久 久久精品成人免费看 久久福利 91精品国产91久久久久久麻豆 亚洲精品成人在线 亚洲伊人久久精品 欧美日本二区 国产永久视频 国产一区二 一区二区福利 国产一毛片 亚洲精品1区 毛片一区二区三区 伊人久久大香线蕉综合影 国产欧美在线观看一区 亚洲国产欧洲综合997久久 国产一区二区免费视频 国产91精品对白露脸全集观看 久久亚洲国产伦理 欧美成人伊人久久综合网 亚洲性久久久影院 久久99国产精一区二区三区! 91精品国产欧美一区二区 欧美日韩亚洲区久久综合 日韩精品一二三区 久久久夜色精品国产噜噜 国产在线精品福利91香蕉 久久久久久久亚洲精品 97se色综合一区二区二区 91国语精品自产拍在线观看性色 91久久国产综合精品女同我 日韩中文字幕a 国产成人亚洲日本精品 久久国产精品-国产精品 久久国产经典视频 久久国产精品伦理 亚洲第一页在线视频 国产精品久久久久三级 日韩毛片网 久久免费高清视频 麻豆国产在线观看一区二区 91麻豆国产福利在线观看 国产成人精品男人的天堂538 一区二区三区中文字幕 免费在线视频一区 欧美日韩国产成人精品 国产综合网站 国产资源免费观看 亚洲精品亚洲人成在线播放 精品久久久久久中文字幕专区 亚洲人成人毛片无遮挡 国产一起色一起爱 国产香蕉精品视频在 九九热免费观看 日韩亚洲欧美一区 九九热精品在线观看 精品久久久久久中文字幕专区 亚洲欧美自拍偷拍 国产精品每日更新 久久久久国产一级毛片高清板 久久天天躁狠狠躁夜夜中文字幕 久久精品片 日韩在线毛片 国产成人精品本亚洲 国产成人精品一区二区三区 九九热在线观看 国产r级在线观看 国产欧美日韩精品高清二区综合区 韩国电影一区二区 国产精品毛片va一区二区三区 五月婷婷伊人网 久久一区二区三区免费 一本色道久久综合狠狠躁篇 亚洲综合色站 国产尤物在线观看 亚洲一区亚洲二区 免费在线视频一区 欧洲精品视频在线观看 日韩中文字幕a 中文字幕日本在线mv视频精品 91精品在线免费视频 精品国产免费人成在线观看 精品a级片 中文字幕日本在线mv视频精品 日韩在线精品视频 婷婷丁香色 91精品国产高清久久久久 国产成人精品日本亚洲直接 五月综合视频 欧美日韩在线亚洲国产人 精液呈暗黄色 亚洲乱码一区 久久精品中文字幕不卡一二区 亚洲天堂精品在线 激情婷婷综合 国产免费久久精品久久久 国产精品亚洲二区在线 久久免费播放视频 五月婷婷丁香综合 在线亚洲欧美日韩 久久免费精品高清麻豆 精品久久久久久中文字幕 亚洲一区网站 国产精品福利社 日韩中文字幕免费 亚洲综合丝袜 91精品在线播放 国产精品18 亚洲日日夜夜 伊人久久大香线蕉综合影 亚洲精品中文字幕乱码影院 亚洲一区二区黄色 亚洲第一页在线视频 一区二区在线观看视频 国产成人福利精品视频 亚洲高清二区 国内成人免费视频 精品亚洲性xxx久久久 国产精品合集一区二区三区 97av免费视频 国产一起色一起爱 国产区久久 国产资源免费观看 99精品视频免费 国产成人一级 国产精品九九免费视频 欧美91精品久久久久网免费 99热国产免费 久久精品色 98精品国产综合久久 久久精品播放 中文字幕视频免费 国产欧美日韩一区二区三区在线 精品久久蜜桃 国产小视频精品 一本色道久久综合狠狠躁篇 91在线免费观看 亚洲精品区 伊人成综合网 伊人热人久久中文字幕 伊人黄色片 99国产精品热久久久久久夜夜嗨 久久免费精品视频 亚洲一区二区三区高清不卡 久久久久国产一级毛片高清板 国产片一区二区三区 久久狠狠干 99久久婷婷国产综合精品电影 国产99区 国产精品成人久久久久 久久狠狠干 青青国产在线观看 亚洲高清国产拍精品影院 国产精品一区二区av 九九热在线免费视频 伊人久久国产 国产精品久久久久久久久久一区 在线观看免费视频一区 国产精品自在在线午夜区app 国产精品综合色区在线观看 国产毛片久久久久久国产毛片 97国产免费全部免费观看 国产精品每日更新 国产尤物视频在线 九九视频这里只有精品99 一本一道久久a久久精品综合 久久综合给会久久狠狠狠 国产成人精品男人的天堂538 欧美一区二区高清 毛片一区二区三区 国产欧美日韩在线观看一区二区三区 在线国产二区 欧美不卡网 91在线精品中文字幕 在线国产福利 国内精品91久久久久 91亚洲福利 日韩欧美国产中文字幕 91久久精品国产性色也91久久 亚洲性久久久影院 欧美精品1区 国产热re99久久6国产精品 九九热免费观看 国产精品欧美日韩 久久久久国产一级毛片高清板 久久国产经典视频 日韩欧美亚洲国产一区二区三区 欧美亚洲综合另类在线观看 国产精品自在在线午夜区app 97中文字幕在线观看 视频一二三区 精品国产一区在线观看 国产欧美日韩在线一区二区不卡 欧美一区二三区 伊人成人在线观看 国内精品91久久久久 97在线亚洲 国产在线不卡一区 久久久全免费全集一级全黄片 国产精品v欧美精品∨日韩 亚洲毛片网站 在线不卡一区二区 99re热在线视频 久久激情网 国产毛片一区二区三区精品 久久亚洲综合色 中文字幕视频免费 国产视频亚洲 婷婷伊人久久 国产一区二区免费播放 久久99国产精品成人欧美 99国产在线视频 国产成人免费视频精品一区二区 国产不卡一区二区三区免费视 国产码欧美日韩高清综合一区 久久精品国产主播一区二区 国产一区电影 久久精品国产夜色 国产精品国产三级国产 日韩一区二区三区在线 久久97久久97精品免视看 久久国产免费一区二区三区 伊人久久大香线蕉综合电影网 99re6久精品国产首页 久久激情网 亚洲成人高清在线 国产精品网址 国产成人精品男人的天堂538 香蕉国产综合久久猫咪 国产专区中文字幕 91麻豆精品国产高清在线 久久国产经典视频 国产精品成人va在线观看 国产精品爱啪在线线免费观看 日本精品久久久久久久久免费 亚洲综合一区二区三区 久久五月网 精品国产网红福利在线观看 久久综合亚洲伊人色 亚洲国产精品久久久久久网站 在线日韩国产 99国产精品热久久久久久夜夜嗨 国产综合精品在线 国产区福利 精品亚洲综合久久中文字幕 国产制服丝袜在线 毛片在线播放网站 在线观看免费视频一区 国产精品久久久精品三级 亚洲国产电影在线观看 最新日韩欧美不卡一二三区 狠狠综合久久综合鬼色 日本精品1在线区 国产日韩一区二区三区在线播放 欧美日韩精品在线播放 亚洲欧美日韩国产一区二区三区精品 久久综合久久网 婷婷六月激情在线综合激情 亚洲乱码一区 国产专区91 97av视频在线观看 精品久久久久久中文字幕 久久五月视频 国产成人福利精品视频 国产精品网址 中文字幕视频在线 精品一区二区三区免费视频 伊人手机在线视频 亚洲精品中文字幕乱码 国产在线视频www色 色噜噜国产精品视频一区二区 精品亚洲成a人在线观看 国产香蕉尹人综合在线 成人免费一区二区三区在线观看 国产不卡一区二区三区免费视 欧美精品久久天天躁 国产专区中文字幕 久久精品国产免费中文 久久精品国产免费一区 久久无码精品一区二区三区 国产欧美另类久久久精品免费 欧美精品久久天天躁 亚洲精品在线视频 国产视频91在线 91精品福利一区二区三区野战 日韩中文字幕免费 国产精品99一区二区三区 欧美成人高清性色生活 国产精品系列在线观看 亚洲国产福利精品一区二区 国产成人在线小视频 国产精品久久久久免费 99re热在线视频 久久久久久久综合 一区二区国产在线播放 成人国产在线视频 亚洲精品乱码久久久久 欧美日韩一区二区综合 精品久久久久免费极品大片 中文字幕视频二区 激情粉嫩精品国产尤物 国产成人精品一区二区视频 久久精品中文字幕首页 亚洲高清在线 国产精品亚洲一区二区三区 伊人久久艹 中文在线亚洲 国产精品一区二区在线播放 国产精品九九免费视频 亚洲二区在线播放 亚洲狠狠婷婷综合久久久久网站 亚洲欧美日韩网站 日韩成人精品 亚洲国产一区二区三区青草影视 91精品国产福利在线观看 国产精品久久久久久久久99热 国产一区二区精品尤物 久碰香蕉精品视频在线观看 亚洲日日夜夜 在线不卡一区二区 国产午夜亚洲精品 九九热在线视频观看这里只有精品 伊人手机在线视频 91免费国产精品 日韩欧美中字 91精品国产91久久久久 国产全黄三级播放 视频一区二区三区免费观看 国产开裆丝袜高跟在线观看 国产成人欧美 激情综合丝袜美女一区二区 国产成人亚洲综合无 欧美精品一区二区三区免费观看 欧美亚洲国产日韩 日韩亚州 国产欧美日韩精品高清二区综合区 亚洲午夜国产片在线观看 精品久久久久久中文字幕 欧美精品1区 久久伊人久久亚洲综合 亚洲欧美日韩精品 国产成人精品久久亚洲高清不卡 久久福利影视 国产精品99精品久久免费 久久久久免费精品视频 国产日产亚洲精品 亚洲国产午夜电影在线入口 精品无码一区在线观看 午夜国产精品视频 亚洲一级片免费 伊人久久大香线蕉综合影 国产精品久久影院 久碰香蕉精品视频在线观看 www.欧美精品 在线小视频国产 亚洲国产天堂久久综合图区 欧美一区二区三区不卡 日韩美女福利视频 九九精品免视频国产成人 不卡国产00高中生在线视频 亚洲第一页在线视频 欧美日韩在线播放成人 99re视频这里只有精品 国产精品91在线 精品乱码一区二区三区在线 国产区久久 91麻豆精品国产自产在线观看一区 日韩精品成人在线 九九热在线观看 国产精品久久不卡日韩美女 欧美一区二区三区综合色视频 欧美精品免费一区欧美久久优播 国产精品网址 国产专区中文字幕 国产精品欧美亚洲韩国日本久久 日韩美香港a一级毛片 久久精品123 欧美一区二区三区免费看 99r在线视频 亚洲精品国产字幕久久vr 国产综合激情在线亚洲第一页 91免费国产精品 日韩免费小视频 亚洲国产精品综合一区在线 国产亚洲第一伦理第一区 在线亚洲精品 国产精品一区二区制服丝袜 国产在线成人精品 九九精品免视频国产成人 亚洲国产网 欧美日韩亚洲一区二区三区在线观看 在线亚洲精品 欧美一区二区三区高清视频 国产成人精品男人的天堂538 欧美日韩在线观看区一二 亚洲欧美一区二区久久 久久精品中文字幕首页 日本高清www午夜视频 久久精品国产免费 久久999精品 亚洲国产精品欧美综合 88国产精品视频一区二区三区 91久久偷偷做嫩草影院免费看 国产精品夜色视频一区二区 欧美日韩导航 国产成人啪精品午夜在线播放 一区二区视频在线免费观看 99久久精品国产自免费 精液呈暗黄色 久久99国产精品 日本精品久久久久久久久免费 精品国产97在线观看 99re视频这里只有精品 国产视频91在线 999av视频 亚洲美女视频一区二区三区 久久97久久97精品免视看 亚洲国产成人久久三区 99久久亚洲国产高清观看 日韩毛片在线视频 综合激情在线 91福利一区二区在线观看 一区二区视频在线免费观看 激情粉嫩精品国产尤物 国产成人精品曰本亚洲78 国产成人精品本亚洲 国产精品成人免费视频 国产成人啪精品视频免费软件 久久精品国产亚洲妲己影院 国产精品成人久久久久久久 久久大香线蕉综合爱 欧美一区二区三区高清视频 99热国产免费 在线观看欧美国产 91精品视频在线播放 国产精品福利社 欧美精品一区二区三区免费观看 国产一区二区免费视频 国产午夜精品一区二区 精品视频在线观看97 91精品福利久久久 国产一区福利 国产综合激情在线亚洲第一页 国产精品久久久久久久久久久不卡 九色国产 在线日韩国产 黄网在线观看 亚洲一区小说区中文字幕 中文字幕丝袜 日本二区在线观看 日本国产一区在线观看 欧美日韩一区二区三区久久 欧美精品亚洲精品日韩专 国产日产亚洲精品 久久综合九色综合欧美播 亚洲国产欧美无圣光一区 欧美视频区 亚洲乱码视频在线观看 久久无码精品一区二区三区 九九热精品免费视频 久久99精品久久久久久牛牛影视 国产精品成久久久久三级 国产一区福利 午夜国产精品视频 日本二区在线观看 99久久网站 国产亚洲天堂 精品国产一区二区三区不卡 亚洲国产日韩在线一区 国产成人综合在线观看网站 久久免费高清视频 欧美在线导航 午夜精品久久久久久99热7777 欧美久久综合网 国产小视频精品 国产尤物在线观看 亚洲国产精品综合一区在线 欧美一区二区三区不卡视频 欧美黑人欧美精品刺激 日本福利在线观看 久久国产偷 国产手机精品一区二区 国产热re99久久6国产精品 国产高清啪啪 欧美亚洲国产成人高清在线 国产在线第三页 亚洲综合一区二区三区 99r在线视频 99精品久久久久久久婷婷 国产精品乱码免费一区二区 国产在线精品福利91香蕉 国产尤物视频在线 五月婷婷亚洲 中文字幕久久综合伊人 亚洲精品一级毛片 99国产精品电影 在线视频第一页 久久99国产精品成人欧美 国产白白视频在线观看2 成人精品一区二区www 亚洲成人网在线观看 麻豆91在线视频 色综合合久久天天综合绕视看 久久精品国产免费高清 国产不卡一区二区三区免费视 欧美国产中文 99精品欧美 九九在线精品 国产中文字幕在线免费观看 国产一区中文字幕在线观看 国产成人一级 国产精品一区二区制服丝袜 国产一起色一起爱 亚洲精品成人在线 亚洲欧美精品在线 国产欧美自拍视频 99精品久久久久久久婷婷 久99视频 国产热re99久久6国产精品 视频一区亚洲 国产精品视频分类 国产精品成在线观看 99re6久精品国产首页 亚洲在成人网在线看 亚洲国产日韩在线一区 久久国产三级 日韩国产欧美 欧美在线一区二区三区 国产精品美女一级在线观看 成人午夜免费福利视频 亚洲天堂精品在线 91精品国产手机 欧美日韩视频在线播放 狠狠综合久久综合鬼色 九一色视频 青青视频国产 亚洲欧美自拍一区 中文字幕天天躁日日躁狠狠躁97 日韩免费大片 996热视频 伊人成综合网 亚洲天堂欧美 日韩精品亚洲人成在线观看 久久综合给会久久狠狠狠 日韩精品亚洲人成在线观看 日韩国产欧美 亚洲成aⅴ人片在线影院八 亚洲精品1区 99久久精品免费 国产精品高清在线观看 国产精品久久久免费视频 在线亚洲欧美日韩 91在线看视频 国产精品96久久久久久久 欧美日韩国产成人精品 91在线亚洲 热久久亚洲 国产精品美女免费视频观看 日韩在线毛片 亚洲永久免费视频 九九免费在线视频 亚洲一区网站 日本高清二区视频久二区 精品国产美女福利在线 伊人久久艹 国产精品久久久久三级 欧美成人精品第一区二区三区 99久久精品国产自免费 在线观看日韩一区 国产中文字幕一区 成人免费午夜视频 欧美日韩另类在线 久久99国产精品成人欧美 色婷婷中文网 久久天天躁夜夜躁狠狠躁2020 欧美成人伊人久久综合网 国产精品福利资源在线 国产伦精品一区二区三区高清 国产精品亚洲综合色区韩国 亚洲一区欧美日韩 色综合视频 国语自产精品视频在线区 国产高清a 成人国内精品久久久久影 国产在线精品香蕉综合网一区 国产不卡在线看 国产成人精品精品欧美 国产欧美日韩综合精品一区二区三区 韩国电影一区二区 国产在线视频www色 91中文字幕在线一区 国产人成午夜免视频网站 亚洲综合一区二区三区 色综合视频一区二区观看 久久五月网 九九热精品在线观看 国产一区二区三区国产精品 99久热re在线精品996热视频 亚洲国产网 在线视频亚洲一区 日韩字幕一中文在线综合 国产高清一级毛片在线不卡 精品国产色在线 国产高清视频一区二区 精品日本久久久久久久久久 亚洲国产午夜精品乱码 成人免费国产gav视频在线 日韩欧美一区二区在线观看 欧美曰批人成在线观看 韩国电影一区二区 99re这里只有精品6 日韩精品一区二区三区视频 99re6久精品国产首页 亚洲欧美一区二区三区导航 欧美色图一区二区三区 午夜精品视频在线观看 欧美激情在线观看一区二区三区 亚洲热在线 成人国产精品一区二区网站 亚洲一级毛片在线播放 亚洲一区小说区中文字幕 亚洲午夜久久久久影院 国产自产v一区二区三区c 国产精品视频免费 久久调教视频 国产成人91激情在线播放 国产精品欧美亚洲韩国日本久久 久久亚洲日本不卡一区二区 91中文字幕网 成人国产在线视频 国产视频91在线 欧美成人精品第一区二区三区 国产精品福利在线 久久综合九色综合精品 欧美一区二区三区精品 久久国产综合尤物免费观看 久久99青青久久99久久 日韩精品免费 久久国产精品999 91亚洲视频在线观看 国产精品igao视频 色综合区 在线亚洲欧国产精品专区 国产一区二区三区在线观看视频 亚洲精品成人在线 一区二区国产在线播放 中文在线亚洲 亚洲精品第一国产综合野 国产一区二区精品久久 一区二区三区四区精品视频 99热精品久久 中文字幕视频二区 国产成人精品男人的天堂538 99精品影视 美女福利视频一区二区 久久午夜夜伦伦鲁鲁片 综合久久久久久久综合网 国产精品国产欧美综合一区 国产99视频在线观看 国产亚洲女在线精品 婷婷影院在线综合免费视频 国产亚洲3p一区二区三区 91成人爽a毛片一区二区 亚洲一区二区高清 国产欧美亚洲精品第二区首页 欧美日韩导航 亚洲高清二区 欧美激情观看一区二区久久 日韩毛片在线播放 亚洲欧美日韩高清中文在线 亚洲日本在线播放 国产精品一区二区制服丝袜 精品国产一区二区三区不卡 国产不卡在线看 国产欧美网站 四虎永久在线观看视频精品 国产黄色片在线观看 夜夜综合 一本色道久久综合狠狠躁篇 欧美亚洲综合另类在线观看 国产91在线看 伊人久久国产 欧美一区二区在线观看免费网站 国产精品久久久久三级 久久福利 日韩中文字幕a 亚洲午夜久久久久影院 91在线高清视频 国产亚洲一区二区三区啪 久久人精品 国产精品亚洲午夜一区二区三区 综合久久久久久 久久伊人一区二区三区四区 国产综合久久久久久 日韩一区精品视频在线看 国产精品日韩欧美制服 日本精品1在线区 99re视频 无码av免费一区二区三区试看 国产视频1区 日韩欧美中文字幕一区 日本高清中文字幕一区二区三区a 亚洲国产欧美无圣光一区 国产在线视频一区二区三区 欧美国产第一页 在线亚洲欧美日韩 日韩中文字幕第一页 在线不卡一区二区 伊人久久青青 国产精品一区二区在线播放 www.五月婷婷 麻豆久久婷婷国产综合五月 亚洲精品区 久久国产欧美另类久久久 99在线视频免费 伊人久久中文字幕久久cm 久久精品成人免费看 久久这里只有精品首页 88国产精品视频一区二区三区 中文字幕日本在线mv视频精品 国产在线精品成人一区二区三区 伊人精品线视天天综合 亚洲一区二区黄色 国产尤物视频在线 亚洲精品99久久久久中文字幕 国产一区二区三区免费观看 伊人久久大香线蕉综合电影网 国产成人精品区在线观看 日本精品一区二区三区视频 日韩高清在线二区 久久免费播放视频 一区二区成人国产精品 国产精品免费精品自在线观看 亚洲精品视频二区 麻豆国产精品有码在线观看 精品日本一区二区 亚洲欧洲久久 久久中文字幕综合婷婷 中文字幕视频在线 国产成人精品综合在线观看 91精品国产91久久久久福利 精液呈暗黄色 香蕉国产综合久久猫咪 国产专区精品 亚洲精品无码不卡 国产永久视频 亚洲成a人片在线播放观看国产 一区二区国产在线播放 亚洲一区二区黄色 欧美日韩在线观看视频 亚洲精品另类 久久国产综合尤物免费观看 国产一区二区三区国产精品 高清视频一区 国产精品igao视频 国产精品资源在线 久久综合精品国产一区二区三区 www.五月婷婷 精品色综合 99热国产免费 麻豆福利影院 亚洲伊人久久大香线蕉苏妲己 久久电影院久久国产 久久精品伊人 在线日韩理论午夜中文电影 亚洲国产欧洲综合997久久 伊人国产精品 久草国产精品 欧美一区精品二区三区 亚洲成人高清在线 91免费国产精品 日韩精品福利在线 国产一线在线观看 国产不卡在线看 久久99青青久久99久久 亚洲精品亚洲人成在线播放 99久久免费看国产精品 国产日本在线观看 青草国产在线视频 麻豆久久婷婷国产综合五月 国产中文字幕一区 91久久精品国产性色也91久久 国产一区a 国产欧美日韩成人 国产亚洲女在线精品 一区二区美女 中文字幕在线2021一区 在线小视频国产 久久这里只有精品首页 国产在线第三页 欧美日韩中文字幕 在线亚洲+欧美+日本专区 精品国产一区二区三区不卡 久久这里精品 欧美在线va在线播放 精液呈暗黄色 91精品国产手机 91在线免费播放 欧美视频亚洲色图 欧美国产日韩精品 日韩高清不卡在线 精品视频免费观看 欧美日韩一区二区三区四区 国产欧美亚洲精品第二区首页 亚洲韩精品欧美一区二区三区 国产精品视频免费 在线精品小视频 久久午夜夜伦伦鲁鲁片 国产无套在线播放 久热这里只精品99re8久 欧美久久久久 久久香蕉国产线看观看精品蕉 国产成人精品男人的天堂538 亚洲人成网站色7799在线观看 日韩在线第二页 一本色道久久综合狠狠躁篇 国产一区二区三区不卡在线观看 亚洲乱码在线 在线观看欧美国产 久久福利青草精品资源站免费 国产玖玖在线观看 在线亚洲精品 亚洲成aⅴ人在线观看 精品91在线 欧美一区二三区 日韩中文字幕视频在线 日本成人一区二区 日韩免费专区 国内精品在线观看视频 久久国产综合尤物免费观看 国产精品系列在线观看 一本一道久久a久久精品综合 亚洲免费播放 久久精品国产免费 久久人精品 亚洲毛片网站 亚洲成a人一区二区三区 韩国福利一区二区三区高清视频 亚洲精品天堂在线 一区二区三区中文字幕 亚洲国产色婷婷精品综合在线观看 亚洲国产成人久久笫一页 999国产视频 国产精品香港三级在线电影 欧美日韩一区二区三区四区 日韩国产欧美 国产精品99一区二区三区 午夜国产精品理论片久久影院 亚洲精品中文字幕麻豆 亚洲国产高清视频 久久免费手机视频 日韩a在线观看 五月婷婷亚洲 亚洲精品中文字幕麻豆 中文字幕丝袜 www国产精品 亚洲天堂精品在线 亚洲乱码一区 国产日韩欧美三级 久久999精品 伊人热人久久中文字幕 久热国产在线视频 国产欧美日韩在线观看一区二区三区 国产一二三区在线 日韩国产欧美 91精品国产91久久久久 亚洲一区小说区中文字幕 精品一区二区免费视频 国产精品视频免费 国产精品亚洲综合色区韩国 亚洲国产精品成人午夜在线观看 欧美国产日韩精品 中文字幕精品一区二区精品