從2014年到現(xiàn)在接觸ES(Elasticsearch)已經(jīng)兩年多了,感觸良多尤其ES的開盒即用特性完全區(qū)別于之前接觸復雜的hadoop和solor。ES不需要你對它了解就能很快入門,而且ES的實時搜索,自動拓展,自愈功能深深吸引我。最近很多朋友也開始使用向我問了很多常見問題,我在這總結了一些使用中踩過的坑希望大家對ES有更多的了解。
專注于為中小企業(yè)提供成都做網(wǎng)站、網(wǎng)站制作服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)西市免費做網(wǎng)站提供優(yōu)質的服務。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了超過千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設實現(xiàn)規(guī)模擴充和轉變。簡介
Elasticsearch是基于Lucene開發(fā)的一個準實時搜索服務,搜索延時在秒級。ES存儲主要通過自身解析json數(shù)據(jù),然后json里面的key映射為Lucene里面的字段,使用lucene進行搜索和索引。ES不僅支持普通的全文搜索和按詞搜索,還支持模糊匹配,近義詞搜索,聚合,排序,geo等特性。ES的開源特性也使得它社區(qū)活躍,版本迭代更新迅速,現(xiàn)在主要分為2.0和5.0兩個大版本,建議大家使用最新的5.0版本會更容易升級和獲取一些更高級的特性。
下面是一些上線或者線上使用Elasticsearch需要了解的特性
es主要依賴于硬盤和內存,所以對CPU要求不高,一般8核就行,如果并發(fā)比較多可以適當增加。
硬盤決定你es寫入讀取數(shù)據(jù)速度,磁盤建議用15k的機械硬盤,并配置為raid0,如果集群節(jié)點<5個,請使用raid5,這樣保證一個硬盤故障不會影響服務。雖然es本身可以通過分片去保證數(shù)據(jù)的冗余,但是es每個節(jié)點大量數(shù)據(jù)爬行還是對較小的集群有一定影響。(土豪直接上SSD,需要正確配置I/O調度程序,陣列卡建議>h710,否則就像ssd跑車上安裝一個拖拉機引擎)
1. ES的內存使用分為兩部分ES緩存和Lucene通過內核緩存加速一些數(shù)據(jù)。
2 .如果服務器內存 `nG> 64G`,ES的內存盡量設置低于32G,建議大31G.因為es使用“內存指針壓縮”技術,一旦內存內存大于32G這項技術將失效,內存有效使用只有原來的60%~70%。你不必為內存浪費而擔心,因為lucene會通過系統(tǒng)把一些聚合和排序的數(shù)據(jù)緩存起來方便你快速查詢使用。
3.如果服務器內存 `nG <64G`,建議給ES分配 內存 (n-2)/2G. 首先2G是給系統(tǒng)預留,然后es和lucene
4.如果你想繼續(xù)你的實時查詢,盡量不要使用swap(交換分區(qū)),建議關閉系統(tǒng)swap使用
建議千兆光纖,高速網(wǎng)絡可以保證集群節(jié)點故障后快速恢復,以及添加節(jié)點后快速再平衡。
盡量不要跨機房,除非需要災備,或者有足夠的帶寬,否則你將迎來es節(jié)點數(shù)據(jù)同步的無限等待。
因為所有es節(jié)點需要實時同步‘索引列表’,‘文檔類型’,‘字段名’等信息,所以在節(jié)點數(shù)固定的情況下索引,字段名等不要太多否則會給es的master節(jié)點造成壓力。
簡單舉例:我要保存用戶提交字段和信息,各個字段名因為是動態(tài)生成,理論上是無上限的,但是es的master要實時的同步這些字段信息到每個節(jié)點,如果現(xiàn)在只有100個字段還好,要是有1000個字段就會產生問題,如果有2000個字段就嚴重到無法使用了,當然索引的數(shù)量也是同樣的意義,
es的每個索引默認總計10個分片,5個主分片,每個主分片對應一個副分片。
1. 當然很多情況下這個無法滿足你實際需求,例如你的集群有8個節(jié)點,計劃單個索引超過100億條數(shù)據(jù),為了讓這個索引查詢速度快一點,你可以增加索引分片數(shù)量:1.增加主副分片對數(shù),增加副分片的數(shù)量。這樣不僅加速搜索還增加了數(shù)據(jù)的冗余。
2.一些只讀的索引可以使用‘optimize的API’進行把每個索引合并為一個單獨數(shù)據(jù)段,這樣可以節(jié)省資源加速操作,但是需要注意這樣會消耗一定IO,如果當前節(jié)點請求繁忙,不要進行此類操作。
3.在使用索引的時候盡量使用索引別名,在以后索引重建或者索引名變更時避免宕機維護。
1.并發(fā)請求不要一次太多,否則超過es內部隊列長度將失敗。
2.如果一次一定要提交太多任務寫入盡量添加失敗判斷,一旦失敗等待3~5秒重試操作,否則數(shù)據(jù)將丟失。
3.文檔盡量一次寫入不要更改和刪除,因為es的更改和刪除只是給舊數(shù)據(jù)做了一個標簽,查詢的時候依然會查詢匹配,只是不在結果中計算。
故障處理
如果有ES集群單節(jié)點掉出集群不要慌張ES有自愈的能力,你只需要保證集群穩(wěn)定,磁盤充足即可自動修復。
如果集群突然大多節(jié)點掉出集群,且出現(xiàn)分片丟失,那你需要考慮分片丟失是否能夠接受,如果不能你可以通過同時停止全部節(jié)點,并啟動全部節(jié)點進入時間門來嘗試恢復全部數(shù)據(jù)。
正常情況下少數(shù)節(jié)點掉出集群,導致一些只讀的分片丟失,可以把這些掉出的節(jié)點重新加入回集群即可恢復分片。
http://nginxs.blog.51cto.com/
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。