es分月存儲
⑴ ES的存儲系統
ES 內嵌式存儲系統ES (內嵌式存儲系統(embedded storage,ES))
內嵌式存儲系統(embedded storage,ES),就是把存儲介質內嵌在伺服器中,就好比現在PC中的硬碟。
優點是安裝簡單,維護方便。
缺點是每個伺服器所能夠連接的存儲介質很有限,同時存儲容量和存取速度都受到伺服器性能的限制。內嵌式存儲系統的一個致使缺點是所存儲信息的安全性和可用性必須依賴伺服器,如果伺服器出現故障,其所存儲的信息將不可用。
所以說,內嵌式存儲系統是一個封閉的系統。
⑵ 闃塊噷ESSD鍜孲SD鍝涓濂界敤錛
鎺㈢儲闃塊噷浜戠殑瀛樺偍鏂伴珮搴︼細ESSD涓嶴SD鐨勫崜瓚婂瑰喅
鍦ㄩ樋閲屼簯鐨勪笘鐣岄噷錛屾暟鎹鐨勫熀鐭蟲槸浜戞湇鍔″櫒ECS鐨勫熀鐭斥斺斾簯鐩樸備綔涓轟簯瀛樺偍鐨勪郊浣艱咃紝浜戠洏浠ュ叾鍗撹秺鐨勬ц兘銆佸彲闈犳у拰閫傚簲鎬э紝婊¤凍涓嶅悓涓氬姟鍦烘櫙鐨勯渶奼傘傚叾涓錛孍SSD鍜孲SD鏇存槸鍚勮嚜浠h〃浜嗗瓨鍌ㄦ妧鏈鐨勫墠娌垮拰緇忓吀錛屽畠浠鍚勮嚜鍏峰囩嫭鐗圭殑欖呭姏鍜岄傜敤鍦烘櫙銆
SSD浜戠洏錛氱ǔ瀹氫笌楂樻晥騫跺瓨
SSD浜戠洏鏄浜戝瓨鍌ㄤ腑鐨勫父闈掓爲錛屽嚟鍊熺ǔ瀹氱殑楂橀殢鏈鴻誨啓鎬ц兘鍜岄珮鍙闈犳э紝瀹冩垚涓篒/O瀵嗛泦鍨嬪簲鐢ㄧ殑鐞嗘兂閫夋嫨銆傛棤璁烘槸涓灝忓瀷鍏崇郴鏁版嵁搴擄紝榪樻槸NoSQL鏁版嵁搴擄紝SSD浜戠洏閮借兘杞繪澗搴斿癸紝鎻愪緵鍑鴻壊鐨勫搷搴旈熷害鍜屾寔涔呯殑鏁版嵁淇濇姢銆傚叾鎶鏈鍩虹鍖呮嫭25GE緗戠粶鍜孯DMA鎶鏈錛岀『淇濆湪澶勭悊澶ч噺鏁版嵁鏃訛紝鎬ц兘濡備笣鑸嫻佺晠銆
ESSD浜戠洏錛氭瀬鑷存ц兘鐨勯潻鏂
鑰孍SSD浜戠洏鍒欐槸涓嬈″瓨鍌ㄦ妧鏈鐨勯潻鏂幫紝瀹冨熀浜庢柊涓浠e垎甯冨紡鍧楀瓨鍌ㄦ灦鏋勶紝鍗曠洏鎬ц兘鍙杈懼埌鎯婁漢鐨100涓囬殢鏈鴻誨啓鎿嶄綔錛屼笖鍗曡礬鏃跺歡鏇翠綆銆傝繖縐嶆瀬鑷寸殑鎬ц兘浣垮叾鍦ㄥぇ鍨嫿LTP鏁版嵁搴撱佸垎甯冨紡鏃ュ織澶勭悊絳夊満鏅涓鐙鍗犻硨澶淬侲SSD鎻愪緵浜嗗洓縐嶆ц兘綰у埆錛屽尯鍒鍦ㄤ簬鍗曠洏鎬ц兘鐨勪笂闄愶紝浠ユ弧瓚充笉鍚屼笟鍔″歸熷害鐨勬瀬鑷磋拷奼傘
鎬т環姣斾箣閫夛細楂樻晥浜戠洏
瀵逛簬閭d簺榪芥眰鎬т環姣旂殑鐢ㄦ埛錛岄珮鏁堜簯鐩樻槸鐞嗘兂涔嬮夈傝櫧鐒墮殢鏈鴻誨啓鎬ц兘紼嶉婁簬ESSD鍜孲SD錛屼絾鍏跺湪寮鍙戜笌嫻嬭瘯涓氬姟鍜岀郴緇熺洏鍦烘櫙涓琛ㄧ幇鍑鴻壊錛屽吋欏炬ц兘涓庣粡嫻庢э紝鏄寰堝氫紒涓氳搗姝ラ樁孌電殑棣栭夈
娣樻卑涓庤繘鍖栵細鏅閫氫簯鐩樼殑钀藉箷
鏅閫氫簯鐩樹綔涓轟笂涓浠d駭鍝侊紝鍏舵ц兘鍜屽彲闈犳у凡緇忛愭笎钀藉悗錛岀洰鍓嶆i愭ユ貳鍑哄競鍦猴紝鍙栬屼唬涔嬬殑鏄鏇村姞鍏堣繘鐨凟SSD鍜孲SD銆傚湪閫夋嫨浜戠洏鏃訛紝鍔″繀鑰冭檻鎮ㄧ殑涓氬姟闇奼傦紝浠ョ『淇濇暟鎹鐨勯珮閫熸祦杞鍜屼笟鍔$殑欏虹晠榪愯屻
緇間笂鎵榪幫紝闃塊噷浜戠殑ESSD鍜孲SD灝卞儚涓ゆ妸鍒╁墤錛屼竴鎶婂湪鎬ц兘涓婄嫭姝ユ睙婀栵紝鍙︿竴鎶婂湪紼沖畾鎬у拰鎬т環姣斾笂鍗犳嵁浼樺娍銆傛牴鎹鎮ㄧ殑涓氬姟鐗規э紝鏄庢櫤鍦伴夋嫨鍚堥傜殑浜戠洏綾誨瀷錛屽皢涓烘偍鐨勪簯璁$畻涔嬫棶澧炴坊寮哄姴鍔ㄥ姏銆
⑶ es存儲目錄分析
Elasticsearch中生成的數據文件一般來說主要有三種,分別是state、index和translog。
查看ES存儲目錄,可發現有多個_state目錄,目錄高敗下存放了以.st為後綴的文件。例如
這些st文件內容在ES源碼里被稱之為MetaData,緩存了諸如NodeState,ClusterState,IndexState,ShardState等戚配顫信息
nodes/0/_state/:
這層目錄在節點級別,該目錄下的global-1.st文件存儲的是MetaData中除去IndexMetaData的部分,即一些集群級別的配置和templates。node-0.st中存儲的是NodeId。
nodes/0/indices/2Scrm6nuQOOxUN2ewtrNJw/_state/:
這層目錄在index級別,2Scrm6nuQOOxUN2ewtrNJw是IndexId,該目錄下的state-2.st文件存儲的是IndexMetaData。
nodes/0/indices/2Scrm6nuQOOxUN2ewtrNJw/0/_state/:
這層目錄在shard級別,該目錄下的state-0.st存儲的是ShardStateMetaData,包含是否是primary和allocationId等信息。
可以看到,集群相關的MetaData和Index的MetaData是在不同的目錄中存儲的。另外,集群相關的Meta會賣脊在所有的MasterNode和DataNode上存儲,而Index的Meta會在所有的MasterNode和存儲了該Index數據的DataNode上存儲。
⑷ ES數據存儲可靠性和寫入流程
https://www.elastic.co/guide/en/elasticsearch/guide/2.x/near-real-time.html
https://www.elastic.co/guide/en/elasticsearch/guide/2.x/merge-process.html
1、數據存儲可靠性保證原理
1.1 translog機制
當一個文檔寫入Lucence後是存儲在內存中的,即使執行了refresh操作仍然是在文件系統緩存中,如果此時伺服器宕機,那麼這部分數據將會丟失
當進行文檔寫操作時會先將文檔寫入Lucene,然後寫入一份到translog,寫入translog是落盤的
tips:如果對可靠性要求不是很高,也可以設置非同步落盤,可以提高性能,由配置index.translog.rability和index.translog.sync_interval控制
tips:translog是追加寫入,因此性能比較好
先寫入Lucene再寫入translog。原因是寫入Lucene可能會失敗,為了減少寫入失敗回滾的復雜度,因此先寫入Lucene
1.2 flush操作
refresh_interval定時觸發 或當translog達到index.translog.flush_threshold_size(默認512mb),ES會觸發一次flush操作:先執行refresh操作將buffer中的數據生成segment,然後調用lucene的commit方法將所有內存中的segment fsync到磁碟,最後會清空translog中的數據(6.x版本為了實現sequenceIDs,不刪除translog) 。
1.3 merge操作
refresh操作會產生大量的小segment,因此產生的每個文件都會消耗文件句柄,內存,CPU 使用等各種資源。更重要的是每個查詢請求都要順序檢查每個segment; segment越多檢索會越慢.
ES會運行一個檢測任務,在後台把近似大小的segment合並成一個新的大segment,並刪除舊segment
1.4、多副本機制
ES有多副本機制(默認是1個副本),一個分片的主副分片不能分片在同一個節點上,進一步保證數據的可靠性。
2、ES寫索引的流程