ES的起源
1999年一個名爲Lucene的開源項目誕生,lucene是一個用java寫成的檢索工程庫,2005年成爲apache的頂級項目,對full-text檢索非常高效,但是難於應用,難於配置,難以擴展制約了lucene發展。基於此2004年Shay Banon開發了一個名爲Compass的基於lucene的產品,目標是讓搜索更簡單的應用於java程序的同時更易於擴展性的需求。2010年Shay全部重寫了Compass形成了我們現在常用的分佈式搜索引擎Elasticsearch。
Elasticsearch是分佈式、可擴展、實時的搜索與數據分析引擎,每個節點都是es的一個實例,集羣就是一組es節點的集合,集羣可以根據需求和配置動態的增長。
es應用簡單的 REST APIs通過http的方式訪問集羣(允許客戶端應用以多種不同語言編寫)。我畫了一個醜爆了的下圖
現在Elastic家族已經發展出了以elasticsearch爲核心的多種套件,es5.0以前是elk,es5.0後加入了Beats ,與原來的elk組合成elastic stack,功能更加強大。
es7.0以後將openJDK捆綁在了es安裝包內。(估計是因爲oracle開始收費了,所以用的openjdk)
ES相關文件夾
在es的安裝目錄下一共有8個文件夾(7.0以下版本爲7個文件夾沒有jdk)
bin:此文件夾中包含用於啓動es的二進制腳本及安裝插件的插件
config:配置文件的存放目錄,核心配置文件爲elasticsearch.yml
data:存放節點上的所有索引、分片的數據
jdk(7.0以下版本沒有)
lib:存放elasticsearch需要的jar包
logs:日誌文件存放位置
modules:es的可拆分模塊被拆分出來放在這裏面(個人理解應該是爲了模塊化可插拔的開發,java9支持模塊化開發了)
plugins:插件文件位置。每個插件都包含在一個子目錄中(比如:head插件,就位於/plugins/head文件夾下。)
ES核心配置文件
elasticsearch.yml
默認情況下所有註釋都是被註釋掉的,需要根據需求自己放開
jvm.options:jvm的配置信息
僅由空格組成的行被忽略,#開頭的行爲註釋也被忽略
以-開頭的行爲所有版本的jvm都必須遵循的準則,例如以下配置表示:表示無論java幾,分給jvm的最大內存是2g
- Xmx2g
以數字開頭表示只有jvm版本與數字匹配時該配置才適用,例如以下配置表示:只有java8可用
8 :-Xmx2g
以數字-開頭表示僅在JVM版本大於或等於該數字時才適用,例如以下配置表示:java8以上版本分配給jvm的最大內存是2g
8- :-Xmx2g
以數字-數字開頭表示僅當JVM版本在兩個數字範圍內時才適用,例如以下配置表示:java8,java9分配給jvm的最大內存是2g
8 - 9 : - Xmx2g
-Xms最小佔用內存 -Xmx最大佔用內存
log4j2.properties:log打印的配置
日誌級別默認爲error:status=error
啓動ES
在安裝文件夾下bin目錄下有啓動的二進制文件
elasticsearch是linux和mac的啓動腳本,進入安裝目錄下,執行如下命令在linux/mac下啓動elasticsearch
./bin/elasticsearch[ -d -p 文件名]
-d:es作爲守護進程一直在後臺運行,-p:保存進程id到指定文件夾,這兩個關鍵字也可以不加、
elasticsearch.bit是windows的啓動批處理腳本,雙擊可以直接啓動
Node節點
每一個節點都是elasticsearch的一個實例即一個運行在jvm內的進程
通常來說一個節點對應一個host(一般生產環境下爲了提高效率會一個物理機佈一個節點)。
每個節點又一個唯一id(uuid)
每個節點都有一個名稱(默認爲hostname)
本地測試的時候可以在elasticsearch.yml文件夾下設置node.name,也可以用命令:
$ ./bin/elasticsearch -E node.name=nodename
來設置node.name
Cluster集羣
每個節點都屬於一個集羣
一個集羣是由一個或多個以分佈式方式協同工作的節點組成的。
集羣名稱(cluster.name)默認爲elasticsearch,docker鏡像上的集羣名稱默認爲docker-cluster,集羣名稱最好設置爲有意義且唯一併且能標識公司或者功能的名稱。
集羣名稱可以通過elasticsearch.yml的cluster.name進行配置,或通過命令行設置
./bin/elasticsearch -E cluster.name=你的集羣名稱