目錄
-
-
- 概述
-
- 全文索引
- ES簡介
- ES的下載下傳、安裝、啟動
-
- 下載下傳
- win版安裝、啟動
- linux版安裝
- linux版啟動、停止
- Kibana的安裝、啟動
-
- ES常見的調試方式
- Kibana的安裝
- Kibana的啟動、停止
- Kibana的使用
- 常見問題
-
- 再次啟動es時抛出異常:某些檔案沒有權限
- kibana粘貼代碼報錯
-
概述
全文索引
資料可分為2類
- 結構化資料:格式固定、有長度限制,一般用關系資料庫來存儲。
- 非結構化資料:無固定格式、不限制長度,eg. 郵件内容、word⽂檔内容。
非結構化資料的2種處理方式
- 順序掃描:從前往後依次掃描,eg. 在一篇文章中搜尋“java”,會在這篇文章中從前往後掃描,找到“java”出現之處,效率低下。
- 全文搜尋:存儲時提取關鍵字作為索引,根據預先建立的索引來檢索,效率高。(全文索引的原理)
全文索引的特點|優點
- 檢索效率高
- 支援海量資料
- 檢索靈活、自動糾錯
- 索引易維護
全文索引的使用場景
- 存儲、檢索海量的非結構化文本資料
- 需要使用互動式的⽂本查詢,使用者輸入部分關鍵字,需要提供相應的預選項
- 需要靈活的文本搜尋,使用者輸入有誤時需要自動糾錯
全文索引關注的是搜尋(讀),寫的性能相對差一些。
全文搜尋引擎的實作方式
- mysql:支援全文索引,但性能差、支援的數量級低。
- Lucene:Java編寫的一個全文搜尋引擎,并非完整的應⽤程式,隻是⼀個代碼庫,強大但使用複雜。Solr、ES都是基于Lucene的,對Lucene進行了封裝,簡化了操作。
- Solr:支援分布式,成熟可靠、高容錯、可擴充,支援GB級别的資料,常用于企業級應用。
- ElasticSearch:後起之秀,純java編寫,支援分布式,支援TB、PB級别的資料,提供Restful風格的API,可實作資料的聚合、分析。
ES簡介
es的特點
- 基于Lucene,支援全文索引、結構化檢索
- 純java編寫,支援分布式,高性能、可擴充
- 可處理PB級别的海量資料
- 提供Restful風格的API
- 自動糾錯
- 支援資料的統計、分析,接近實時搜尋
es的使用場景
- 文本内容的全文檢索,eg.日志搜尋,github、維基百科
- 資料監控、聚合、分析,eg. 報表統計、分析
ES的下載下傳、安裝、啟動
下載下傳
官網下載下傳位址:https://www.elastic.co/cn/downloads/elasticsearch
如果覺得下載下傳速度慢,可以使用華為雲的鏡像:https://mirrors.huaweicloud.com/elasticsearch/
win下載下傳zip,linux下載下傳tar.gz。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TPR1kMFRVT3NmeNRzZE9Ee4YVZv5kMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zROBlL4kjN2EDOwATMxAjMxAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
es是純java編寫的,需要jdk的支援。es預設自帶了一個jdk,在解壓目錄下的jdk目錄下,這個也是es預設使用(需要)的jdk版本。
如果已經配置了jdk的環境變量,會優先使用系統環境變量中配置的jdk。如果系統環境變量中配置的jdk版本與自帶的jdk版本(需要的jdk版本)不一緻,es啟動時會報警告
future versions of Elasticsearch will require Java 11; your Java version from [/usr/local/jdk/jre] does not meet this requirement
es向下相容jdk8,不影響正常使用。
官方說後續要移除不自帶jdk的es,不推薦使用,我們下載下傳帶jdk的es即可。自帶的jdk版本很新,不穩定,通常在系統環境變量中配置jdk,不使用自帶的jdk。
win版安裝、啟動
1、解壓,修改配置檔案 conf/elasticsearch.yml
#目前節點名稱
node.name: node-1
#叢集的初始主節點
cluster.initial_master_nodes: ["node-1"]
不配置這2項也可以啟動es,但啟動kibana時會連接配接不上es,導緻kibana啟動失敗。
2、輕按兩下bin/elasticsearch.bat啟動,×掉視窗即停止
列印出 started、通路位址 則說明啟動成功,浏覽器通路列印的位址(127.0.0.1:9200)可看到es伺服器資訊。
linux版安裝
把安裝包放到/usr/local下
1、解壓
tar -zxvf elasticsearch-7.6.2-linux-x86_64.tar.gz
mv elasticsearch-7.6.2-linux-x86_64 es
rm elasticsearch-7.6.2-linux-x86_64.tar.gz -I
2、修改 config/elasticsearch.yml
#叢集名稱,預設是elasticsearch,es會自動把同一網段中叢集名稱相同的節點作為一個叢集
# cluster.name: elasticsearch
#目前節點的名稱,一般以node-1,node-2,node-x來命名
node.name: node-1
#此節點是否有選舉成為master的資格,預設true
#node.master: true
#此節點是否要存儲資料,預設true
#node.data: true
#預設綁定127.0.0.1,隻允許本地連接配接,将其設定為0.0.0.0即可允許其它機器連接配接
network.host: 0.0.0.0
#預設使用9200端口
#http.port: 9200
#叢集的初始主節點
cluster.initial_master_nodes: ["node-1"]
日志、資料的預設存儲位置分别是es主目錄的logs、data目錄,不用修改。
3、修改config/jvm.options
es處理的資料量級很大,排序、聚合很消耗記憶體,正式服需要給es設定較大的jvm堆記憶體。
預設設定的堆記憶體是1g,官方推薦設定為可用記憶體的一半,剩下的記憶體留給Lucene,但盡量不要超過32g,過大的堆記憶體會降低cpu性能、gc回收垃圾的速度。建議設定為伺服器可用記憶體的1/2或者2/3。
#如果是虛拟機、個人伺服器,可以設定小些,eg. 500m
-Xms10g
-Xmx10g
如果伺服器提供不了設定的記憶體,會報錯
error:
Java HotSpot™ 64-Bit Server VM warning: INFO: os::commit_memory(0x00007f7826330000, 274790678528, 0) failed; error=‘Cannot allocate memory’ (errno=12)
at org.elasticsearch.tools.launchers.JvmErgonomics.flagsFinal(JvmErgonomics.java:126)
at org.elasticsearch.tools.launchers.JvmErgonomics.finalJvmOptions(JvmErgonomics.java:88)
at org.elasticsearch.tools.launchers.JvmErgonomics.choose(JvmErgonomics.java:59)
at org.elasticsearch.tools.launchers.JvmOptionsParser.jvmOptions(JvmOptionsParser.java:137)
at org.elasticsearch.tools.launchers.JvmOptionsParser.main(JvmOptionsParser.java:95)
4、修改檔案描述符的最大數量
es很吃資源,要求fd的最大數量至少是65535,而linux一般預設是4096
# 檢視fd最大數量限制,如果沒有達到65535,則進行修改
ulimit -Hn
vim /etc/security/limits.conf
# 在 #End of file 這一行前面加上2行
# es根據 #End of file 判斷檔案結尾,配置要放在這行之前
* soft nofile 65536
* hard nofile 65536
*表示linux所有的使用者,也可以換為要啟動es的使用者。
5、修改vm.max_map_count
預設為65530,es要求至少為262144
vim /etc/sysctl.conf
#添加一行
vm.max_map_count=262144
#立刻生效
sysctl -p
說明:另一種方式 sysctl -w vm.max_map_count=262144 隻是臨時修改,重新開機linux就失效。
6、防火牆中開放對應的端口
firewall-cmd --add-port=9200/tcp --zone=public --permanent
firewall-cmd --reload
linux版啟動、停止
1、es不能用root賬戶啟動。如果沒有其它賬号,可以添加一個
useradd 使用者名
2、啟動es的賬戶要有解壓目錄的rwx權限
#以root(解壓目錄的屬主)身份執行,注意要加 -R 表示遞歸
chmod 777 -R es
3、執行 解壓目錄下/bin 下的 elasticsearch 即可啟動es伺服器
#可以加 -d 背景運作
./bin/elasticsearch
啟動時會生成一些檔案,對于新生成的檔案沒有權限,可以切回root重新授權。
列印出 started 說明啟動成功,可檢視es伺服器資訊:
# ip:port , 也可以在浏覽器中直接通路該位址
curl 127.0.0.1:9200
4、停止
jps 或 ps -ef|grep elasticsearch 找到es程序的pid,kill -9殺掉即可。
ps -ef|grep elasticsearch 會顯示一堆資訊,殺掉第一個程序即可。
logs下面有es的慢查詢日志、gc日志。
Kibana的安裝、啟動
ES常見的調試方式
- curl:win、linux指令行通用
curl get http://127.0.0.1:9200
#預設請求方式時預設get,預設協定時預設http
curl 127.0.0.1:9200
- Postman
- Kibana:專業的es調試工具,有代碼提示,很友善,推薦
kibana是使用node.js寫的,運作kibana會起一個node server,十分占記憶體。
Kibana的安裝
1、下載下傳好放到 /usr/local 下
官網下載下傳位址:https://www.elastic.co/cn/downloads/kibana
如果覺得官網下載下傳速度慢,可以使用華為雲的鏡像,隻是沒有最新的版本:https://mirrors.huaweicloud.com/kibana/
win下載下傳zip,linux下載下傳tar.gz,kibana的版本盡量與es版本保持一緻,不一緻可能出現一些問題。
2、解壓、重命名
tar -zxvf kibana-7.8.0-linux-x86_64.tar.gz
mv kibana-7.8.0-linux-x86_64 kibana
rm kibana-7.8.0-linux-x86_64.tar.gz -I
3、修改配置檔案 config/kibana.yml
#設定kibana綁定的網絡位址,預設localhost,隻允許本地通路kibana的頁面
server.host: "0.0.0.0"
#指定es叢集節點,預設為["http://localhost:9200"]
elasticsearch.hosts: ["http://localhost:9200"]
#es的使用者名、密碼,如果有
#elasticsearch.username: "chy"
#elasticsearch.password: "abcd"
如果隻連接配接本地es,則無需修改配置
4、防火牆開放5601端口
firewall-cmd --add-port=5601/tcp --zone=public --permanent
firewall-cmd --reload
Kibana的啟動、停止
1、和es一樣,kibana要以非root賬戶啟動,且該賬戶要具有kibana目錄的rwx權限
#切換到kibana的上級目錄,檢視是否具有kibana的rwx權限
ls -l | grep kibana
#如果沒有,切換到root賬戶添權重限。注意要加-R表示遞歸
chmod 777 kibana -R
2、執行 bin/kibana 啟動kibana
bin/kibana &
win版是輕按兩下 bin/kibana.bat 啟動。
kibana是使用node.js編寫的,啟動時會啟動一個node server,啟動慢、占記憶體。
3、浏覽器通路 ip:5601 進入kibana首頁
4、kibana的停止
win版×掉kibana的指令行視窗關閉,linux通過kill -9殺掉kibana的程序來關閉
Kibana的使用
Management -> Dev Tool 進入調試頁面
url不用寫 http://host:port 部分,會自動使用kibana.yml中配置的es叢集節點。eg. http://192.168.1.2:9200/mall/_mapping,可以直接寫 /mall/_mapping或 mall/_mapping
在Search Profiler中可檢視本次操作的耗時、性能分析。
kibana常用快捷鍵
Ctrl+/ #打開目前相關的api文檔
Ctrl+I #自動縮進
Ctrl+Enter #執行
注釋用 # ,單獨成行
常見問題
再次啟動es時抛出異常:某些檔案沒有權限
原因:第一次啟動es時會生成一些檔案,這些新生成的檔案沒有授權。雖然抛出了異常,但es仍是啟動成功的。
解決:切換到root(es目錄屬主),重新授權
chmod 777 /usr/local/es -R
kibana粘貼代碼報錯
一般是:每行開頭有多餘的空格,行尾有多餘的換行符,将每行行首多餘的空格、行尾多餘的換行符删掉,Ctrl+I 自動縮進。