何漢東, 張 倩
(中電海康集團有限公司, 杭州 310013)
Ceph分布式系統的ISCSI高可用集群①
何漢東, 張 倩
(中電海康集團有限公司, 杭州 310013)
在分布式存儲集群環境中, 為了兼容現有存儲協議, 提高集群可擴展性, 通常都會支持ISCSI存儲協議. 而現有ISCSI服務的高可用主要通過主從備份的方式實現, 該方式會導致資源利用不充分, 容易造成單節點負載過重等情況. 本文基于Ceph分布式存儲系統的優勢, 采用raft一致性算法等設計并實現ISCSI高可用集群. ISCSI集群使用自定義的節點選擇策略實現服務負載均衡, 并通過raft分布式協議實現服務故障遷移. 實驗表明, 本文提出的方案是有效的, 能夠實現服務故障遷移, 保證集群負載均衡.
Ceph; ISCSI高可用; 分布式存儲; 負載均衡
ISCSI(Internet Small Computer System Interface)服務是構建IP-SAN(Storage Area Network)的一種重要技術手段, 具有成本低廉、維護簡單、易于擴展、使用廣泛等特性[1,2]. ISCSI技術通過使用TCP/IP協議封裝SCSI存儲協議, 達到操作管理存儲設備的作用[3].
但是, 在使用ISCSI服務時, 客戶端需要通過一個固定的IP地址連接服務端. 當IP地址對應的服務端發生異常時, 客戶端將不能正常使用存儲服務. 經過研究發現, 針對這種情況, 業界普遍的一種解決方案是服務器冗余配置. 如圖1所示, 方案使用冗余策略, 在客戶端配置多路徑選擇、傳輸端實現路由器冗余、在服務器端實現ISCSI服務主從備份等方式實現ISCSI服務的高可用部署[4]. 而使用這種策略的原因與其ISCSI后端存儲是傳統存儲陣列密切相關, 即所有的ISCSI服務部署在一個強大的Master存儲服務器上, 數據同步備份到Slave存儲服務器上. 當服務器故障時, 將所有服務遷移到Slave節點上.
許多文獻基于該解決方案, 根據自身的需求與實際環境, 采用或修改部分策略, 使用不同的維護工具,以實現ISCSI高可用. 如文獻[4]通過改進心跳算法、實現故障接管和數據鏡像同步等, 提高ISCSI的可靠性;文獻[5]使用網絡塊DRBD和PaceMaker工具維護ISCSI服務, 以檢測并遷移ISCSI服務.

圖1 ISCSI服務的IO路徑及冗余策略
但在分布式存儲系統中, 主從備份方式的ISCSI高可用部署并不能充分利用分布式存儲帶來的優勢. 首先, 分布式存儲系統管理的節點性能各異, 某一節點可能不足以支撐大量的ISCSI服務, 容易造成ISCSI服務節點頻繁故障; 其次, 不能充分利用節點資源, 從而實現均衡負載. 然而, 針對分布式存儲陣列, 業界仍然采用主從備份方式實現ISCSI服務的高可用, 暫時未發現基于ISCSI分布式集群架構相關的文獻.
針對主從備份方式不能有效利用分布式節點資源的情況, 本文以Ceph[6]分布式存儲管理系統為基礎, 采用分布式思想設計并實現ISCSI服務集群. 本文設計的ISCSI集群充分利用節點資源, 將ISCSI服務均衡分布在各個存儲節點上; 同時, 集群統一管理ISCSI服務, 自動監測節點狀態, 實現服務故障遷移, 并保證上層業務I/O操作的連續性.
Ceph是一個軟件定義存儲(SDS, Software Define Storage)的分布式管理系統, 其通過Paxos算法保證集群狀態的一致性, 消除了單節點故障[7,8]. RBD是Ceph的塊存儲功能模塊, 其性能優異, 可作為ISCSI服務的后端存儲設備[9].
如圖2所示為ISCSI服務的三層邏輯體系架構. 層級之間通過TCP/IP協議進行通信, 相對獨立, 互不影響.底層為物理存儲層, 使用Ceph分布式集群可靠的存儲服務. 中間層為ISCSI服務層, 提供高可用的ISCSI服務.上層為用戶層, 客戶端通過ISCSI工具直連ISCSI Target服務, 實現遠程操縱存儲設備的目的.
1.1 負載均衡及節點選擇策略
目前ISCSI服務的負載均衡一般通過多路徑選擇(multipath)實現. 這種方式需要在客戶端進行復雜的配置, 極度依賴配置人員對于整個集群狀態的掌握程度.本文設計的ISCSI集群在服務部署和遷移時依據節點選擇策略進行ISCSI服務部署, 從而將ISCSI服務均衡分布到集群節點上, 避免個別節點負載過高.

圖2 分布式存儲ISCSI高可用架構
如圖3所示, ISCSI集群在部署ISCSI服務時, 主要通過predicate和priority兩階段進行節點的智能選擇. 在predicate階段, 主要判斷節點是否能夠通過如表1所示的硬性指標條件; 在priority階段, 依據配置文件的策略配置, 使用對應的策略函數對符合predicate條件的節點進行優先值計算, 從而選擇最符合的節點進行服務部署或遷移.

圖3 節點選擇策略流程

表1 predicate階段判定的硬性指標
priority階段支持三種選擇策略: 最少ISCSI服務選擇策略、Round Robin輪詢選擇策略和基于資源的優先級選擇策略. 選擇策略遵循如下前提定義:
1) ISCSI配置文件中的一個Target配置記作一個ISCSI服務;
2) n個分布式節點從小到大進行連續編號(從0開始), 編號i作為節點標記;
3) 假設一個ISCSI服務消耗服務器CPU、內存、網絡帶寬資源為(x, y, z), 服務器總資源為(a, b, c), 則可算出單個節點支持ISCSI服務的權重. 其計算公式為:

其具體描述和使用場景如表2所示.

表2 priority的節點選擇策略
由于基于資源優先級部署策略較為復雜, 本文對其進行詳細描述. 資源優先級策略依賴于“堆”數據結構, 其根據節點的權重wj建立一個最大堆. 在ISCSI服務部署時, 遍歷堆數組, 以wj概率決定將ISCSI服務部署在該節點j上. 當選中部署節點后, 會導致該節點的權重wj降低, 重新調整以該節點為根的子樹, 使之成為堆.當堆最大值w0小于閥值threshhold時(比如0.5), 會導致首次命中的概率變小, 后續命中的概率變大, 不符合算法目的, 需要將概率隨機輸出反轉, 使算法正確運行.其算法偽代碼描述如下所示:

針對實際物理環境, 用戶通過配置文件指定priority階段的選擇策略. 集群通過讀取配置文件參數,使用特定策略選擇, 從而優化ISCSI集群的每個節點的負載能力, 降低由于業務高負載引起的節點異常.
1.2 ISCSI高可用方案
本文的ISCSI高可用設計方案, 主要依靠故障節點發現和資源遷移(用戶數據遷移、ISCSI服務遷移、IP遷移)兩方面的設計保證服務的可用性和可靠性. 同時, 應用Raft[10]一致性算法來解決分布式集群中節點故障決策、數據存儲一致性等各種決策問題.
1.2.1 故障節點發現與數據存儲
ISCSI服務節點狀態通過心跳應答機制進行故障檢測, 由Raft算法選舉產生的leader節點作為裁決節點進行最終判定. 文獻[10]詳細描述了Raft算法在集群正常和異常情況下Leader節點選舉與數據一致性維護的科學性原理.
本文利用Raft一致性算法少數服從多數的判定標準, 即只要超過半數節點(N/2+1個節點)的結果一致, 則leader節點就認為該結果是正確的這一準則, 來判斷節點狀態. 如果在一段固定時間內(如60秒), 某個節點被半數以上節點報告為異常, 則Leader認為該節點故障并踢出集群, 同時更新集群節點狀態信息.
同時, 由于Leader節點的權威性, 本文設計的ISCSI集群配置數據的更改都只能通過Leader節點進行請求. 同時, 由Leader節點將改變的數據結果發送同步到各個節點上. Leader只有確保數據已經同步并寫入到(N/2+1)個節點磁盤后, 即能夠保證數據一致性后, 才會返回操作成功.
3) 現場條件。油站與閥門的高差Z=15 m;主管敷設距離L1=5 m,支管敷設距離L2=25 m;重力加速度g=9.81 m/s2。
如圖4所示, 在一個獨立的物理節點中, 運行三個組件: agent、server和monitor.

圖4 ISCSI集群組件關系
Agent組件定時向所有節點發送心跳, 通過響應情況判斷其他節點狀態. 如果節點超時未返回響應, 則向當前的leader節點進行匯報. Leader節點接受所有節點agent的消息, 從而更新集群節點狀態, 并將節點狀態更新到server組件中. 當某個節點故障或者恢復后,leader設置該節點ISCSI服務遷移標識, 并應用1.1節中的遷移策略決定遷移的節點.
Server組件負責存儲數據, 包括節點狀態信息和ISCSI服務配置信息. 當server組件存儲的數據發生變化時, 會向Leader進行報告, 由Leader節點判定該數據是否最新的, 是否能夠同步到每個節點上, 并達到各節點數據新的一致性狀態.
Monitor組件是ISCSI服務管理組件, 它定時向ISCSI集群獲取節點的狀態. 如果發現其所處的節點處于異常狀態或者ISCSI集群超時未響應, 則認為節點本身存在異常, 然后將該節點上所有的ISCSI服務資源釋放. 當monitor節點發現ISCSI服務需要遷移, 則通過ISCSI集群獲取該節點的ISCSI配置, 并進入ISCSI服務遷移子程序.
1.2.2 服務資源遷移
ISCSI服務資源遷移總體上分為三個部分: 后端用戶數據的遷移, ISCSI服務遷移和IP地址的遷移. 在遷移過程中, 首先獲取待遷移節點的ISCSI服務配置文件,根據配置文件將Ceph塊設備映射到健康節點上, 然后重新部署ISCSI服務, 最后進行IP地址遷移. 服務遷移不僅包括故障節點的ISCSI遷移, 還包括節點重新加入集群時服務恢復的遷移.
該遷移過程主要由monitor組件負責, 其遷移過程偽代碼如下所示:

拆分遷移將服務一個個獨立地重新部署在ISCSI集群節點中, 與新建服務流程大致相同, 在此不做詳細描述. 服務整體遷移分為如下幾個步驟:
首先進行用戶數據的遷移. 如圖5所示, RBD塊由多個objects組成, 每個object對應著一個PG組, 通過PG與OSD的映射關系, 將數據實際存儲在OSD上. 當數據進行遷移時, 只需從OSD重新獲取數據并在健康節點上組織成RBD塊設備, 就完成數據的遷移. 當故障節點恢復時, 有可能會對同一個塊設備進行數據寫入操作, 這樣是會破壞塊設備數據的. 因此, monitor組件將檢測故障節點并進行故障節點的資源釋放, 保護后端設備數據安全.
其次部署ISCSI服務. Monitor組件通過向Leader節點請求IP地址對應的ISCSI服務配置文件, 然后導入到當前節點的ISCSI配置程序. ISCSI配置程序根據配置文件信息, 重新生成ISCSI服務, 至此完成ISCSI服務遷移操作.

圖5 Ceph RBD存儲遷移示例
最后進行IP地址遷移. 每個服務節點對應一個虛擬IP地址. ISCSI集群動態綁定虛擬IP、ISCSI服務、存儲節點三者, 并將其關系保存在server組件中. 只有當IP對應的節點發生異常時, IP地址才會進行遷移. 此時,故障節點IP將臨時遷移到某個指定健康節點上; 當故障節點重新加入ISCSI集群, monitor組件則會檢查IP對應的節點是否與server組件記錄的信息匹配. 如果發現IP對應的ISCSI服務只是臨時遷移到某個健康節點上,則monitor將釋放健康節點上該IP對應的ISCSI服務, 并將IP以及其關聯的ISCSI服務遷移回源節點上.
1.3 業務連續性管理
如圖6所示, 客戶端連接ISCSI服務主要是依靠TCP/IP網絡, 只要維持服務對應的IP地址不變, 客戶端在ISCSI遷移成功后重新建立Session會話, 并根據上層應用邏輯繼續I/O業務流程. 雖然ISCSI服務連接是全程保持會話狀態的, 但是當ISCSI節點異常或者集群服務遷移過程中, 會造成當前會話狀態的丟失. 等到遷移完成后, 即使ISCSI客戶端建立新的會話連接, 仍然很容易造成數據的不一致性.
為了保持ISCSI服務的連接會話, 可以使用分布式緩存服務器memcached存儲ISCSI的回話狀態. 如圖7所示, 每次I/O操作都將記錄在memcached服務器中, 直到寫操作實際落盤后, 才刪除memcached里的相關操作.當服務遷移成功后, ISCSI服務端通過memcached遍歷會話日志, 并重新向client請求未完成的I/O操作.
相比使用memcached這種實現復雜的機制, 一種更加簡單有效的方法是直接關閉ISCSI服務以及RBD Cache, 從而保證會話數據的一致性. 雖然這樣做會降低部分I/O性能, 但由于RBD是分布式存儲設備, 關閉緩存對其性能影響有限, 而且幾乎不需要實現成本.

圖6 ISCSI客戶端重新建立會話

圖7 利用memcached保持會話
如果對ISCSI性能要求不高的話, 本文建議直接關閉緩存. 在ISCSI集群的實現驗證階段也是通過關閉緩存的方式保證業務的連續性.
Consul是一個使用raft算法的通用服務框架, 集成了服務的注冊與發現、節點故障檢測和key-value數據庫等功能. 通過Consul接口可以快速實現檢測和存儲ISCSI服務狀態. Consul已經實現了類似server和agent組件的功能. 在此基礎上實現monitor組件, 定時訪問Consul集群, 請求當前的leader節點信息和ISCSI集群節點狀態, 基于節點狀態進行邏輯處理. 在ISCSI服務部署及遷移階段, 只有leader節點的monitor組件才有權利進行節點選擇, 然后更新到Consul的Key-Value數據庫中. 從節點的monitor組件根據對應數據庫信息進行實際服務遷移流程.
因此, ISCSI高可用集群的實現集成了Consul框架、monitor組件以及ISCSI服務, 應用了Ceph分布式存儲集群. 其實現部署圖如圖8所示.

圖8 ISCSI集群實現部署
每個節點基礎配置如下: Intel Xeon E5系列CPU、3*2T的HDD硬盤、128GB內存、萬兆網卡. client為普通的計算機, 可通過網絡連接服務集群. 在ISCSI高可用集群的驗證環境中, 集群節點間通過網絡進行消息通信, 選用最少ISCSI服務策略作為ISCSI服務部署和遷移的目標節點選擇策略, 同時關閉Ceph和ISCSI服務緩存, 以保證業務的連續性.
本文主要通過切斷網絡通信的方式, 模擬某個節點故障的情況, 從而驗證ISCSI高可用集群的服務遷移功能.

表3 ISCSI高可用集群功能驗證
由于ISCSI高可用集群和Ceph集群是相互獨立的,而ISCSI集群需要等待Ceph集群恢復成功后, 才能進行恢復過程. 所以總故障恢復時間為:
故障恢復總時間=Ceph集群恢復時間+ISCIS集群恢復時間
ISCSI集群恢復時間=故障發現時間+ISCSI服務遷移時間
通過表3所示的驗證結果, 可以認為ISCSI集群的服務遷移是有效的. 通過對比故障寫入數據與源數據,發現兩份數據的消息摘要相同, 證明了寫入業務的連續性.
本文通過分析ISCSI服務在分布式存儲環境下的狀況, 提出了ISCSI高可用集群的設計方案. 該ISCSI高可用集群支持負載均衡策略選擇, 應用raft一致性算法實現服務故障遷移等高可用功能. 同時, 對于如何保持無狀態集群中的會話給出一套切實可行的方案. 最后,通過開源Consul服務框架實現ISCSI高可用集群, 并進行了功能驗證, 表明了ISCSI高可用集群的有效性與可用性.
1Satran J, Meth K, Sapuntzakis C, et al. Internet small computer systems interface (iSCSI).The Internet Society,2004.
2Aiken S, Grunwald D, Pleszkun AR, et al. A performance analysis of the iSCSI protocol. Proc. 20th IEEE/11th NASA Goddard Conference on Mass Storage Systems and Technologies, 2003. San Diego, CA, USA. 2003. 123–134.
3Chadalapaka M, Satran J, Meth K, et al. Internet Small Computer System Interface (iSCSI) Protocol (Consolidated).RFC7143,IETF, 2014.
4Haas F. Replicate everything! highly available iSCSI storage with DRBD and pacemaker. Linux Journal, 2012, 2012(217):Article No.5.
5王施人, 陜振, 張淑萍, 等. 基于iSCSI存儲集群的設計與實現. 計算機工程與設計, 2010, 31(11): 2598–2601.
6Weil SA, Brandt SA, Miller EL, et al. Ceph: A scalable,high-performance distributed file system. Proc. 7th Symposium on Operating Systems Design and Implementation. Seattle, Washington, USA. 2006. 307–320.
7Lamport L. Paxos made simple. ACM SIGACT News(Distributed Computing Column), 2001, 32(4): 51–58.
8Van Renesse R, Altinbuken D. Paxos made moderately complex. ACM Computing Surveys (CSUR), 2015, 47(3):Article No.42.
9Gudu D, Hardt M, Streit A. Evaluating the performance and scalability of the ceph distributed storage system. Proc. 2014 IEEE International Conference on Big Data (Big Data).Washington DC, USA. 2014. 177–182.
10Ongaro D, Ousterhout J. In search of an understandable consensus algorithm. Proc. 2014 USENIX Conference on USENIX Annual Technical Conference. Philadelphia, PA,USA. 2014. 305–320.
ISCSI High Availability Cluster in Ceph Distributed System
HE Han-Dong, ZHANG Qian
(CETHIK GROUP Co. Ltd., Hangzhou 310013, China)
Commonly, the distributed storage cluster support ISCSI protocol for compatibility and scalability. But, the high availability of ISCSI services is mainly achieved through a master slave remote system which wastes resources and easily makes the server overload. This paper uses raft consistency algorithms to implement a high availability cluster of ISCSI service based on the advantages of Ceph. In order to implement the high availability, the cluster supports load balancing using sensible selection policy and services migration after detecting the failover of the server. The experiments show that the proposed scheme is effective, and can achieve services migration, and ensure the load balancing.
Ceph; high availability of ISCSI; distributed storage; load balancing
何漢東,張倩.Ceph分布式系統的ISCSI高可用集群.計算機系統應用,2017,26(7):104–109. http://www.c-s-a.org.cn/1003-3254/5867.html
2016-11-10; 收到修改稿時間: 2017-01-04