目錄結構:
data——nodes——indices——shade(lucence分片)
比如:/opt/search/elasticsearch-node1/data/elasticsearch/nodes/0/indices/logstash-custom-2018.07.27/0/index
這裡第乙個0即是es的節點,indices是es的索引,第二個0是兩個主分片之一,再下面的index是lucence級別的索引,不在es管控範圍了
-rw-rw-r-- 1 elk elk 28810702 jul 27 12:07 _azn.fdt
-rw-rw-r-- 1 elk elk 26297 jul 27 12:07 _azn.fdx
-rw-rw-r-- 1 elk elk 3284 jul 27 12:07 _azn.fnm
-rw-rw-r-- 1 elk elk 7354691 jul 27 12:07 _azn_lucene50_0.doc
-rw-rw-r-- 1 elk elk 3752835 jul 27 12:07 _azn_lucene50_0.pos
-rw-rw-r-- 1 elk elk 10424860 jul 27 12:07 _azn_lucene50_0.tim
-rw-rw-r-- 1 elk elk 203984 jul 27 12:07 _azn_lucene50_0.tip
-rw-rw-r-- 1 elk elk 6571232 jul 27 12:07 _azn_lucene54_0.***
-rw-rw-r-- 1 elk elk 1489 jul 27 12:07 _azn_lucene54_0.dvm
-rw-rw-r-- 1 elk elk 581435 jul 27 12:07 _azn.nvd
-rw-rw-r-- 1 elk elk 98 jul 27 12:07 _azn.nvm
-rw-rw-r-- 1 elk elk 570 jul 27 12:07 _azn.si
-rw-rw-r-- 1 elk elk 8744349 jul 27 14:16 _gt5.fdt
-rw-rw-r-- 1 elk elk 6505 jul 27 14:16 _gt5.fdx
-rw-rw-r-- 1 elk elk 3284 jul 27 14:16 _gt5.fnm
-rw-rw-r-- 1 elk elk 1694649 jul 27 14:16 _gt5_lucene50_0.doc
-rw-rw-r-- 1 elk elk 936611 jul 27 14:16 _gt5_lucene50_0.pos
-rw-rw-r-- 1 elk elk 2835340 jul 27 14:16 _gt5_lucene50_0.tim
-rw-rw-r-- 1 elk elk 50466 jul 27 14:16 _gt5_lucene50_0.tip
-rw-rw-r-- 1 elk elk 1631937 jul 27 14:16 _gt5_lucene54_0.***
-rw-rw-r-- 1 elk elk 1525 jul 27 14:16 _gt5_lucene54_0.dvm
-rw-rw-r-- 1 elk elk 140036 jul 27 14:16 _gt5.nvd
-rw-rw-r-- 1 elk elk 98 jul 27 14:16 _gt5.nvm
-rw-rw-r-- 1 elk elk 570 jul 27 14:16 _gt5.si
lucence級別的索引是這種格式的,同乙個檔名不同字尾的一大堆合起來是乙個索引segment。
es實時索引原理:
先校驗json,確保索引對映語法正確。lucence每次生成的倒排索引,成為乙個segment,然後用另乙個commit檔案,記錄索引內所有的segment,生成segment的資料來源則是記憶體中的buffer,lucence會把文件攢到記憶體buffer裡,定時(預設1s重新整理一下)或者等到呼叫/_flush函式(可以根據業務情況手動設定重新整理頻率,不要太頻繁)時把buffer區的內容寫到新的segment裡,也就是新的倒排索引,然後更新commit檔案。相當於乙個個索引的桶,segment生成後將不會改變。以實現實時索引。segment會隨機merge成更大的segment,同時刪除舊的segment。
注意buffer在往segment裡刷資料時,首先會寫道檔案系統的快取裡,這時雖然可以查詢得到,但一旦出現斷電等情況索引資料不會被持久化。
一般八核/十二核伺服器單節點es足夠跑滿,它跟redis這種不一樣,redis單執行緒,沒法利用多核優化,所以要開多個例項
du -sh * 檢視目錄檔案大小
df -h檢視硬碟分割槽占用
一般下,乙個index下乙個type足夠,而且es中type的概念不清晰,只是個標識
磁碟同步translog buffer:
這個就是為了避免memory buffer刷到檔案系統快取中時突發意外情況丟失資料,memory buffer刷的同時,文件會被記錄在translog buffer中,有點類似redis的aof。同時commit point的時間點也在,類似git。由此保證資料完整,和mysql等rdb不同的是,mysql的binlog可以持久化,而es的translog會定時重新整理。需要注意的是,translog本身也是寫到檔案系統快取裡的,它每隔5s會被強制重新整理到磁碟上。無副本的情況下,可能導致5s的資料丟失。
同樣需要注意,開的es副本占用的資源和單節點es相同。
segment從檔案系統重新整理到磁碟,更新commit
清空translog
預設30分鐘間隔/512mb閾值(或者呼叫/_flush介面)
Sphinx實時索引
1,首先建立乙個表用來儲存主索引和增量索引的id值 create table if not exists sph counter s id int 10 unsigned not null auto increment,p id int 11 not null,primary key s id 2,...
Sphinx 實時索引
index rtsearchd 實時索引不需要indexer,直接開啟searchd。usr local sphinx bin searchd c usr local sphinx etc csft rt.conf sphinx的實時索引配置本身並不需要資料來源 source 它的資料是要通過程式利...
Sphinx 實時索引
index rtsearchd 實時索引不需要indexer,直接開啟searchd。usr local sphinx bin searchd c usr local sphinx etc csft rt.conf sphinx的實時索引配置本身並不需要資料來源 source 它的資料是要通過程式利...