crush演算法
Ⅰ ceph 強一致性 原子性怎麼去測試
ceph 強一致性 原子性怎麼去測試
一般這類測試系統設備,都會有一個MSA報告,裡面的P/TV、R/T指標要小於某個值(一般是10%),反映這套系統測試結果的可重復性、一致性。此報告參考的標準是ISO/TS 16949:2002。像之前我們用的的致遠電子的電機測試系統,就帶了個MSA報告,我們驗收時要用於參考的。
Crush演算法是ceph的兩大創新之一,簡單來說,ceph摒棄了傳統的集中式存儲元數據定址的方案,轉而使用CRUSH演算法完成數據的定址操作。CRUSH在一致性哈希基礎上很好的考慮了容災域的隔離,能夠實現各類負載的副本放置規則,例如跨機房、機架感知等。Crush演算法有相當強大的擴展性,理論上支持數千個存儲節點。
Ⅱ Linux裡面ceph是什麼
Linux裡面ceph
Ceph是一個可靠地、自動重均衡、自動恢復的分布式存儲系統,根據場景劃分可以將Ceph分為三大塊,分別是對象存儲、塊設備存儲和文件系統服務。在虛擬化領域里,比較常用到的是Ceph的塊設備存儲,比如在OpenStack項目里,Ceph的塊設備存儲可以對接OpenStack的cinder後端存儲、Glance的鏡像存儲和虛擬機的數據存儲,比較直觀的是Ceph集群可以提供一個raw格式的塊存儲來作為虛擬機實例的硬碟。
Ceph相比其它存儲的優勢點在於它不單單是存儲,同時還充分利用了存儲節點上的計算能力,在存儲每一個數據時,都會通過計算得出該數據存儲的位置,盡量將數據分布均衡,同時由於Ceph的良好設計,採用了CRUSH演算法、HASH環等方法,使得它不存在傳統的單點故障的問題,且隨著規模的擴大性能並不會受到影響。
Ⅲ 如何基於 Ceph 構建高性能塊存儲服務
Ceph是一個分布式存儲系統,支持對象文件快介面,設計目標是:
• 所有組件橫向擴展
• 沒有單點故障
• 可以在普通廠商硬體使用
• 所有機制都能自我管理
• 開源
分布式存儲的應用場景相對於其存儲介面,現在流行分為三種:
1.對象存儲: 也就是通常意義的鍵值存儲,其介面就是簡單的GET,PUT,DEL和其他擴展,如七牛、又拍,Swift,S3等。
2.塊存儲: 這種介面通常以QEMUDriver或者KernelMole的方式存在,這種介面需要實現Linux的Block Device的介面或者QEMU提供的Block Driver介面,如Sheepdog,AWS的EBS,青雲的雲硬碟和阿里雲的盤古系統,還有Ceph的RDB(RDB是Ceph面向塊存儲的介面)。
3、文件存儲: 通常意義是支持POSIX介面,它跟傳統的文件系統如Ext4是一個類型的,但區別在於分布式存儲提供了並行化的能力,如Ceph的CephFS(CephFS是Ceph面向文件存儲的介面),但是有時候又會把GFS,HDFS這種非POSIX介面的類文件存儲介面歸入此類。
提到存儲的種類就不得不提到另外一個話題:存儲不能做統一化嗎?因為必須要有多個不同的軟體棧去管理不同的存儲設備:SSD,SATA等。
Ceph就此提出了不同觀點,RADOS提供了基礎的存儲設備的管理、數據控制流訪問的管理,提供的是一個可靠持久的數據存儲平台,基於其上,我們可以實現多個不同的介面戶來實現面向不同需求的對接,比如對象存儲我們有一個單獨的庫實現去滿足不同的存儲需要,比如我們塊存儲是通過RDP來實現。
統一存儲並不意味著所有存儲都的同一個介面,同一個實現,同一個軟體棧,它其實只是使用了同一個設備管理的生命周期和數據訪問的有效控制,它提供了一個相對合理,非常適合運維的,利於成本,利於軟體可靠性控制的的機制去保證我們的存儲的可靠。
舉一個例子,大部分存儲廠商甚至網路廠商都有一個自己的核心軟體棧,如文件系內核。基於其上演化出各種不同的產品線。如果廠商要追求各個產品線的極致是不是就應該每個產品完全獨立來追求極致,但事實上一個核心的底層技術棧需要高質量的代碼、完備的測試和長期的使用。在Ceph這里,一個分布式系統的並發IO、分布式恢復、數據端到端校驗等等關鍵實現是唯一實現,成熟的系統系統在這些實現上需要經過一定量級和時間的考驗,這才是Ceph所謂的統一存儲,而不是其他的介面堆疊式開發。
【Ceph和其他開源分布式存儲、其他商用存儲的區別之處在哪?】
眾所周知,很多傳統廠商如日立、富士通等存儲大廠也採用了Ceph作為它們存儲硬體的載體,Ceph能提供企業級的存儲服務一定有它的優勢,才能讓傳統的存儲廠商棄而採用開源的存儲方案。
1、中心化系統我們認為它在數據控制系統方面做的較好,在遷移運維方面提供較好的實現,但卻有元數據的瓶頸。在訪問數據時需要經過元數據伺服器的查詢再去尋找相應的數據伺服器會在大規模擴展時遇到性能瓶頸問題。
2、全分布式系統雖然提供較好的數據訪問能力,能高效處理客戶端的LO請求,但是卻沒有提供一個非常好的數據控制的實現,比如故障處理能力不足,數據恢復的困難,如果跳出中心化的元數據存儲系統它沒辦法做到強一致性的數據恢復。
彈性的數據分布策略和物理拓撲輸入實現了高可用性和高持久性,Ceph的高性能重構還體現在利用CRush演算法對數進行約束,避免數據分布到所有的集群的一個節點上,利用Ceph設計並提供的一個由CRush演算法來支持一個高自由化的存儲集群的設計,實現高可靠性,高持久性,高性能。
Ⅳ ceph的crush演算法究竟是怎麼樣的
CRUSH演算法通過每個設備的權重來計算數據對象的分布。對象分布是由cluster map和data distribution policy決定的。cluster map描述了可用存儲資源和層級結構(比如有多少個機架,每個機架上有多少個伺服器,每個伺服器上有多少個磁碟)。data distribution policy由placement rules組成。rule決定了每個數據對象有多少個副本,這些副本存儲的限制條件(比如3個副本放在不同的機架中)。
CRUSH算出x到一組OSD集合(OSD是對象存儲設備):
(osd0, osd1, osd2 … osdn) = CRUSH(x)
CRUSH利用多參數HASH函數,HASH函數中的參數包括x,使得從x到OSD集合是確定性的和獨立的。CRUSH只使用了cluster map、placement rules、x。CRUSH是偽隨機演算法,相似輸入的結果之間沒有相關性。
Ⅳ 如何在ceph中找出存放的數據
CRUSH演算法通過每個設備的權重來計算數據對象的分布。對象分布是由cluster map和data distribution policy決定的。cluster map描述了可用存儲資源和層級結構(比如有多少個機架,每個機架上有多少個伺服器,每個伺服器上有多少個磁碟)。data distribution policy由placement rules組成。rule決定了每個數據對象有多少個副本,這些副本存儲的限制條件(比如3個副本放在不同的機架中)。CRUSH算出x到一組OSD集合(OSD是對象存儲設備):(osd0, osd1, osd2 … osdn) = CRUSH(x)CRUSH利用多參數HASH函數,HASH函數中的參數包括x,使得從x到OSD集合是確定性的和獨立的。CRUSH只使用了cluster map、placement rules、x。CRUSH是偽隨機演算法,相似輸入的結果之間沒有相關性。
Ⅵ 一般大家都會選擇哪款 SDS 一體機
建議客戶選擇SDS的時候,首先需要問一下自己兩個問題:1、主要應用場景是什麼?2、最關注的前三位的技術指標是什麼?而且還要清楚SDS發展在什麼階段(目前SDS還處在社會主義的初級階段),把預期和現實拉得近一些,有些過高的要求在這個階段SDS還不能提供。
關於SDS技術評價通常包括以下7個維度:可靠性、穩定性、擴展性、功能、性能、易用性、兼容性。
針對SDS塊存儲前三位技術指標維度為:
三大應用場景都把可靠性和穩定性排在了前兩位,之所以這樣排列因為存儲是IT系統的基石。所謂的可靠性就是局部故障不會導致數據丟失和業務中斷,這一點理所應當排在第一位;穩定性是指不會因為局部故障造成性能大幅抖動,給業務響應造成影響,比如說看個小電影中途老卡誰受得了。
說到這有人會問,這兩點對於傳統陣列是必須和默認的要求?我想說,傳統陣列都是昂貴、專用的硬體堆起來,發生硬體故障的概率很低,而SDS大都部署在廉價的標准x86伺服器上,x86伺服器發生硬體故障的概率要高很多;並且SDS都是分布式系統,要管理幾十台、乃至成千上萬台x86伺服器上,這樣發生硬體故障的概率會呈數量級的上升。如何保證大規模分布式系統的可靠性和穩定性也正是SDS首要解決的難點。
Amazon的S3系統由上百萬台伺服器組成,每分鍾都會有很多設備下線和上線,能保證這樣大規模集群的可靠性和穩定性,應該沒幾個廠家有這樣的技術吧?
另外還別忘了,SDS還處在「社會主義初級階段」並不是拿出來一個廠家就能保證幾千台伺服器的SDS系統可靠和穩定的。
VSI和VDI環境通常規模很大,而且規模增長的速度也較快,所以把擴展性放在了第三位。對於資料庫應用,性能是毋容置疑非常重要的一個指標,所以排在了第三位。
眼見未必為實,測試中的那些「貓膩」
終於想清楚我要的SDS長什麼樣了,忽然又想起一件大事「誰家的產品能達到我的要求呢?」
一個最直接的辦法就是拿測試來說吧(測試還是蠻麻煩的一件事,准備測試環境、編寫測試規范、查看測試結果……)。或許還有一個偷懶的辦法,就是「你們有和我的需求差不多的案例嗎?我去問問那家企業用的咋樣啊」,但耳聽為虛眼見為實,聽一面之詞總是不踏實。
相比之下測試是一個較為讓人放心的辦法,但如果你不熟悉SDS的水,同樣有些坑你也發現不了,嘿嘿。
好了,下面這一段就是從測試和技術構架角度幫助客戶判斷關鍵技術指標優劣。
1、B域、C域,1/3節點損壞和RTO為0
可靠性在SDS上主要體現在兩個方面,當集群中磁碟或節點發生故障時,數據會不會丟失?業務會不會中斷?中斷的時長是多少?
這里有兩個指標需要關註:1、容錯度,2、故障恢復時間。
先說一下容錯度這個指標。
因為主流的SDS都採用副本技術,以三副本為例,丟失1份數據,應該還有2份數據存在,數據不會丟,也就是容錯度為1/3個節點。但如果超過1/3的節點同時down機,集群還能工作嗎?這個不一定所有廠家都能做到。
很多SDS的容錯域都是提前配置好的。以3副本9個節點為例,通常會配置3個容錯域ABC、每個容錯域各3個節點,每個容錯域保存獨立的副本數據。例如當以一個容錯域A的3台機器都故障時,還有兩2個副本存在,數據不會丟失,業務照常運行,這就是通常所說的能容忍1/3節點宕機。這樣的要求大多數廠家都能做到,但如果同時B域或者C域也有機器down機呢?這時候多半會出現兩副本都丟失情況,系統異常了。
故障恢復時間這個指標也很關鍵。當系統中發生節點宕機,故障恢復的時間當然越快越好了,最高的要求是故障恢復時間等於0。要實現這個指標很不容易,因為當SDS系統中節點發生故障時,要恢復這個故障,需要做很多事:第一步,發現這個故障;第二步,選出一個節點接替故障節點,並進行數據重構;第三步,重新刷新定址空間,讓客戶機能獲取數據位置的變化。每一步都需要時間花費,特別對大規模集群來講,想把故障恢復時間控製得很小更是難上加難。宣稱故障恢復時間為零的SDS廠家並不多。
所以故障恢復時間的數量級是衡量一個SDS可靠性等級的一個非常重要的因子。用戶可以根據前端業務對故障恢復時間的敏感程度,設立相應的要求標准。
2、Ceph性能抖動的問題
對於SDS來講,它的穩定性主要關注點在:當系統發生磁碟/節點故障,恢復數據而產生數據遷移時,前端的性能表現是否穩定。
在前面可靠性段落中談到了,SDS故障恢復有三個步驟,每一步處理不好都會影響性能表現。特別是數據重構和重新定址這兩個環節,會對性能穩定性造成很大的影響。
例如著名的開源產品Ceph,不止一個客戶反映當系統中出現節點宕機的情況下,性能下降和波動很厲害,對業務影響很大。只所以出現這個問題首先是和它元數據管理和定址的方式(Crush演算法)有關,即在節點動盪時,元數據(其實是ceph內部保存的資源列表)發生變化,從而導致數據的地址發生變化,最終導致大量的沒有必要的數據遷移,規模越大,這個問題暴露的越明顯。其次是它數據遷移採用整盤拷貝的方式,會有無效遷移導致的網路帶寬的擁擠。
還有一個坑透露一下,有些SDS系統在拔盤或者宕節點時,可以不發生數據重構,當磁碟或者節點重新上線或歸位時才重構。因此,穩定性測試時最好觀察一下,磁碟或者節點歸位後的表現。甚至建議,用頻繁的節點上/下線來測試它的穩定性,因為節點抖動還是會時常發生的。
3、VSAN的局限
擴展性很難測試,因為你要准備幾百台、上千台的伺服器環境是不可能,除非你是土豪,那怎麼辦?沒辦法,看構架吧。市場上主流SDS分為有中央元數據管理節點的非對稱構架和無中央管理節點的全對稱構架兩大類,前者相比後者擴展性受限。簡單的理解就是「非對稱構架」中好比有個指揮官,一個指揮官能管的人比較有限的。「全對稱構架」中是沒有指揮官的,全憑自覺性,像是一大堆人在幹活,一個病了,無需向領導請假,會有另外一個人立馬自動接替他的工作。舉例證明:VSAN是有中央管理節點的,它官方宣稱的單集群支持最大節點數64個;鵬雲網路的ZettaStor是無中央節點的,能支持萬級的節點數量。因此從具體實例上也能看出,構架決定了其擴展能力。
4、SSD緩沖擊穿
目前快閃記憶體技術發展得很快,性能比傳統磁介質硬碟高了幾個數量級,正是因為快閃記憶體技術的發展也給SDS造就了可以在性能上PK傳統陣列的基礎。
如果你很有錢的話完全可以用SSD做主存。但目前SSD價格還較貴,性價比較高的方式是用SSD做緩存,通常一個存儲節點上配個幾百GB-1TB的SSD做緩存。SSD緩存對性能的貢獻在小數據量時會表現的非常好,一旦數據量足夠大,SSD被穿透,那就實打實地看落盤(寫到硬碟持久化層)的性能表現了。如果你的系統數據量很小,SSD緩存的容量足夠你支持業務峰值,那可以多些關注SDS緩存加速的性能表現。如果你的系統數據量很大,那SSD會長時間被穿透,那你就重點一下落盤的性能表現了。
目前SDS廠家在SSD緩存利用效率上,水平都差不太多,沒有太多很獨到的演算法出現。倒是落盤這個環節,因為選擇的技術路線不同,表現不一。有的就是差不多發揮原有磁碟的性能,甚至還低;有的利用一些IO演算法,把普通磁碟的性能表現提升幾倍,像鵬雲網路的ZettaStor在落盤時採用了「變隨機為半順序」的IO優化演算法,把隨機IO裸盤的速度提升了3-5倍。鵬雲網路之所以能做這樣的IO優化,因為ZettaStor是完全自主開發的。採用開源方案的廠家要實現起來估計會很難,這是要動到其核心文件系統層的。
有些廠家在性能測試時會用很小的卷、很小的數據去測試,看上去IOPS會很高,但真實環境不會是這么小的負載,所以一旦多創建些大卷,進行長時間大數據量的性能測試,SSD被寫穿透時,性能立馬一落千丈,鳳凰變烏雞了。
不記得那位大咖說過一句話,「不談延遲的性能測試都是耍流氓」。
看一個系統的延遲小不小,一個是實測,另外從構架上也能看出些端倪。就是看一下它的IO路徑是否夠短。例如,直接寫裸磁碟的總比經過文件系統層轉換再寫裸磁碟的IO路徑短很多吧,這就是為什麼Ceph想降低延遲很難的原因所在。眾所周知,Ceph的塊存儲不是直接訪問裸磁碟的,而是通過文件系統把裸磁碟轉換成塊設備給應用的。
Ⅶ 雲存儲工程師的技能樹是怎樣的
1. 分塊思想。分布式的基本思想就是分而治之,幾乎所有的分布式存儲系統都會對一個文件切成一個一個的塊(block)。
2. 數據分布演算法。分布式存儲系統需要把所有分割的塊對象存儲到不同的機器中,這些塊應該如何分布使得既能保證數據均勻,又能使節點增加或者減少時盡量減少數據遷移,即數據分布演算法,比如crush演算法、一致性hash演算法等。以前遇到一個面試題大概意思是說有N個文件需要保存到M台機器中,存儲策略是什麼,最簡單的演算法就是對文件求hash取模,這樣既能保證數據均衡分布,又能高效索引(再去求hash取模就找到了文件存儲位置),萬一我增加個存儲節點該怎麼辦呢。
3. 冗餘副本。一個文件被分割成了若干塊後被分布在不同的機器上,萬一網路故障或者某台機器掛了,文件就訪問不了了,為了保證可用性和可靠性,通常都是通過冗餘副本來實現,即一個塊會復製成多個相同的塊副本(通常3副本),並分布在不同的機器上,這樣即使某個塊所在的機器訪問不了了,也能通過其它塊讀取。這些副本同樣需要考慮如何分布的問題,盡量不要在同一個故障域中。
4. 糾刪碼。採用以上副本的方式保護數據,缺點是需要佔用多倍的存儲空間來提供冗餘,成本太高,你也可以考慮使用糾刪碼的數據保護方法,能夠使用較少的冗餘存儲空間提供一樣的可靠性等級,當然讀寫性能要下降些,典型時間換空間的例子。
5. 數據同步和一致性。每個塊都被分割成了多個副本,這些副本如何保證一致性,讀寫效率和一致性之間如何權衡,了解CAP理論和NWR策略,各種一致性模型,比如最終一致性、強一致性等。
6.數據索引。一個文件被分割成塊並分布在不同的機器,如何重新找到這些塊組裝成原來的文件。你可以用一個專門的服務來維護和存儲文件和塊之間的映射關系(HDFS namenode),也可以通過計算的方法找到這些映射關系(Ceph crushmap)。
7.其它。比如網路通信、RPC、序列化等。
8.塊存儲、文件系統存儲、對象存儲區別。
Ⅷ 有誰了解《Candy Crush》的方塊落下的演算法
核心演算法: 這里把游戲的關鍵設計放在三個盒子和一個坐標上: 大盒子:一個兩維數組,記錄著方塊點陣的開與關(把游戲的舞台想像 成一個點陣),在下面也把這個東西稱為地圖 兩個5*5小盒子:兩維數組,一個盛放著正在下落的方塊,一個盛放在 下一個下落的