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写索引的流程