Elasticsearch + Kibana + X-Pack + Head叢集安裝部署
目錄
1. 概述
近期使用到Elasticsearch作為資料的儲存與檢索引擎,初期安裝了2.4.0版本,找對應版本的外掛還著實費了些時間。後由於引入spark的版本和Elasticsearch 2.4.0版本不匹配,所以決定將Elasticsearch 升級到5.5.0版本。
升級之後的Elasticsearch感覺在各方面都便捷很多:
- 首先Elastic幫我們把各個元件的版本進行了統一,也把原來比較分散的元件進行了整合,比如在5.x之前各種單獨的元件(Shield, Watcher, Marvel, Graph, Reporting)現在都整合到X-Pack中,Sense也整合進了Kibana中。
- 其次是資料型別做了部分改變,Elasticsearch5.0率先集成了Lucene6版本,效能得到很大的提升。據說與之前版本相比,磁碟空間少一半;索引時間少一半;查詢效能提升25%;IPV6也支援了。
- ELK(Elasticsearch、Logstash、Kibana)組合中又新增一個開源專案Beats, 從此可以改名:ELKB
2. 部署規劃
部署環境此處我使用的windows,但整個部署過程也同樣適用於Linux。
2.1 Elasticsearch節點型別介紹
當我們啟動Elasticsearch的例項,就會啟動至少一個節點。相同叢集名的多個節點的連線就組成了一個叢集。
在預設情況下,叢集中的每個節點都可以處理http請求和叢集節點間的資料傳輸,叢集中所有的節點都知道叢集中其他所有的節點,可以將客戶端請求轉發到適當的節點。
節點有以下幾個型別:
-
主(master)節點
node.master設定為True(預設)的時候,它有資格被選作為主節點,控制整個叢集。
-
資料(data)節點
在一個節點上node.data設定為True(預設)的時候。該節點儲存資料和執行資料相關的操作,如增刪改查,搜尋,和聚合。
-
客戶端(client)節點
當一個節點的node.master和node.data都設定為false的時候,它既不能保持資料也不能成為主節點,該節點可以作為客戶端節點,可以響應使用者的情況,把相關操作傳送到其他節點。
-
部落(tribe)節點
當一個節點配置
tribe.*
的時候,它是一個特殊的客戶端,它可以連線多個叢集,在所有連線的叢集上執行搜尋和其他操作。
Elasticsearch的data node除了放資料以外,也可以兼任master和client的角色,對於一個規模較大,使用者較多的叢集,master和client在一些極端使用情況下可能會有效能瓶頸甚至記憶體溢位,從而使得共存的data node故障。data node的故障恢復涉及到資料的遷移,對叢集資源有一定消耗,容易造成資料寫入延遲或者查詢減慢。
如果將master和client獨立出來,一旦出現問題,重啟後幾乎是瞬間就恢復的,對使用者幾乎沒有任何影響。另外將這些角色獨立出來的以後,也將對應的計算資源消耗從data node剝離出來,更容易掌握data node資源消耗與寫入量和查詢量之間的聯絡,便於做容量管理和規劃。
2.1.1 主(master)節點說明
主節點的主要職責是和叢集操作相關的內容,如建立或刪除索引,跟蹤哪些節點是群集的一部分,並決定哪些分片分配給相關的節點。穩定的主節點對叢集的健康是非常重要的。
預設情況下任何一個叢集中的節點都有可能被選為主節點。索引資料和搜尋查詢等操作會佔用大量的cpu,記憶體,io資源,為了確保一個叢集的穩定,分離主節點和資料節點是一個比較好的選擇。雖然主節點也可以協調節點,路由搜尋和從客戶端新增資料到資料節點,但最好不要使用這些專用的主節點。一個重要的原則是,儘可能做盡量少的工作。
建立一個獨立的主節點只需在配置檔案中新增如下內容:
node.master: truenode.data: false
為了防止資料丟失,配置 discovery.zen.minimum_master_nodes 設定是至關重要的(預設為1),每個主節點應該知道形成一個叢集的最小數量的主資格節點的數量。
discovery.zen.minimum_master_nodes解釋如下:
該處解釋的即通常我們所說的腦裂問題。假設我們有一個叢集,有3個主資格節點,當網路發生故障的時候,就有可能其中一個節點不能和其他節點進行通訊了。這個時候,當discovery.zen.minimum_master_nodes設定為1的時候,就會分成兩個小的獨立叢集,當網路好的時候,就會出現資料錯誤或者丟失資料的情況。當discovery.zen.minimum_master_nodes設定為2的時候,一個網路中有兩個主資格節點,可以繼續工作,另一部分,由於只有一個主資格節點,則不會形成一個獨立的叢集,這個時候當網路恢復的時候,節點又會重新加入叢集。
設定這個值的原則是:
(master_eligible_nodes / 2)+ 1
這個引數也可以動態設定:
PUT localhost:9200/_cluster/settings { “transient”: { “discovery.zen.minimum_master_nodes”: 2 } }
2.1.2 資料(data)節點說明
資料節點主要是儲存索引資料的節點,主要對文件進行增刪改查操作,聚合操作等。資料節點對cpu,記憶體,io要求較高,在優化的時候需要監控資料節點的狀態,當資源不夠的時候,需要在叢集中新增新的節點。資料節點的配置如下:
node.master: falsenode.data: true
資料節點路徑設定,每一個主節點和資料節點都需要知道分片,索引,元資料的物理儲存位置,path.data預設位為 $ES_HOME/data,可以通過配置檔案 elasticsearch.yml進行修改,例如:
path.data: /data/es/data/
這個設定也可以在命令列上執行,例如:
./bin/elasticsearch –path.data /data/es/data
這個路徑最好進行單獨配置,這樣Elasticsearch的目錄和資料的目錄就會分開。當刪除了Elasticsearch主目錄的時候,不會影響到資料。通過rpm安裝預設是分開的。
資料目錄可以被多個節點共享,甚至可以屬於不同的叢集,為了防止多個節點共享相同的資料路徑,可以在配置檔案elasticsearch.yml中新增:
node.max_local_storage_nodes: 1
注意:在相同的資料目錄不要執行不同型別的節點(例如:master, data, client)這很容易導致意外的資料丟失。
2.1.3 客戶端(client)節點說明
當主節點和資料節點配置都設定為false的時候,該節點只能處理路由請求,處理搜尋,分發索引操作等,從本質上來說該客戶節點表現為智慧負載平衡器。獨立的客戶端節點在一個比較大的叢集中是非常有用的,他協調主節點和資料節點,客戶端節點加入叢集可以得到叢集的狀態,根據叢集的狀態可以直接路由請求。
警告:新增太多的客戶端節點對叢集是一種負擔,因為主節點必須等待每一個節點叢集狀態的更新確認!客戶節點的作用不應被誇大,資料節點也可以起到類似的作用。配置如下:
node.master: falsenode.data: false
2.1.4 部落(tribe)節點說明
部落節點可以跨越多個叢集,它可以接收每個叢集的狀態,然後合併成一個全域性叢集的狀態,它可以讀寫所有節點上的資料,部落節點在elasticsearch.yml中的配置如下:
tribe: t1: cluster.name:cluster_one t2: cluster.name:cluster_two
T1和T2是任意的名字代表連線到每個叢集。上面的示例配置兩叢集連線,名稱分別是T1和T2。預設情況下部落節點通過廣播可以做為客戶端連線每一個叢集。大多數情況下,部落節點可以像單節點一樣對叢集進行操作。
注意:以下操作將和單節點操作不同,如果兩個叢集的名稱相同,部落節點只會連線其中一個。由於沒有主節點,當設定local為true事,主節點的讀操作會被自動的執行,例如:叢集統計,叢集健康度。主節點級別的寫操作將被拒絕,這些應該是在一個叢集進行。部落節點可以通過塊(block)設定所有的寫操作和所有的元資料操作,例如:
tribe: blocks: write:true metadata: true
部落節點可以也可以在選中的索引塊中進行配置,例如:
tribe: blocks: write.indices:hk*,ldn* metadata.indices: hk*,ldn*
當多個叢集有相同的索引名的時候,預設情況下,部落的節點將選擇其中一個。這可以通過tribe.on_conflict setting進行配置,可以設定排除那些索引或者指定固定的部落名稱。
2.2 其他元件介紹
以上對Elasticsearch各節點的作用瞭解以後,下面對其他需要安裝的元件做簡單介紹。
2.2.1 Kibana
Kibana 是一個開源的分析和視覺化平臺,旨在與 Elasticsearch 合作。Kibana 提供搜尋、檢視和與儲存在 Elasticsearch 索引中的資料進行互動的功能。開發者或運維人員可以輕鬆地執行高階資料分析,並在各種圖表、表格和地圖中視覺化資料。
Kibana可以安裝在任意一個節點上,也可每個節點都進行安裝。不過一般建議是安裝在客戶端(client)節點之上,對Elasticsearch進行監控和操作。
2.2.2 X-Pack
X-Pack是一個Elastic Stack的擴充套件,將安全,警報,監視,報告和圖形功能包含在一個易於安裝的軟體包中。在Elasticsearch 5.0.0之前,您必須安裝單獨的Shield,Watcher和Marvel外掛才能獲得在X-Pack中所有的功能。在Elasticsearch 5版本之後,一般情況下只需要安裝一個官方推薦的X-pack擴充套件包即可。
注意:必須在叢集中的所有節點安裝X-Pack外掛。
2.2.3 Head
Head是Elasticsearch的一個前端外掛,可以很方便的檢視ES的執行狀態和資料。
Head外掛建議安裝在客戶端節點上。
2.3 節點規劃
測試環境選擇了4個節點,1個主(master)節點,2個數據(data)節點,1個客戶端(client)節點。
如果你的是多master節點,只需要增加master節點,修改下discovery.zen.minimum_master_nodes引數即可。
節點 | IP | 角色 | 安裝元件 |
---|---|---|---|
node1 | 192.168.1.91 | master-1 | es(含x-pack) |
node2 | 192.168.1.92 | data-1 | es(含x-pack) |
node3 | 192.168.1.93 | data-2 | es(含x-pack) |
node4 | 192.168.1.94 | client-1 | es(含x-pack)、kibana(含x-pack)、head |
3. Elasticsearch安裝
3.1 JDK安裝
每個節點都必須安裝jdk環境,安裝過程略。
3.2 Elasticsearch環境安裝
下載Elasticsearch安裝包並解壓。
修改配置檔案 elasticsearch-5.5.0/config/elasticsearch.yml
.
3.2.1 配置master-1
# 叢集名稱,保證唯一 cluster.name: duoduozb-es # 節點名稱,僅僅是描述名稱,用於在日誌中區分 node.name: master-1 # 節點描述,可預設 node.attr.rack: r1 # 是否是master節點,master節點存放元資料 node.master: true # 是否是data資料節點,data資料節點存放資料 node.data: false # 是否是ingest節點,ingest節點可以在資料真正進入index前,通過配置pipline攔截器對資料ETL node.ingest: false # 資料的存放路徑,可掛載多個盤 path.data: C:/bigdata/elasticsearch/es-data/data # 日誌的存放路徑 path.logs: C:/bigdata/elasticsearch/es-data/logs # 當前節點IP地址 network.host: 192.168.1.91 # 對外提供服務的埠 http.port: 9200 # 叢集間通訊埠 transport.tcp.port: 9300 # 設定叢集自動發現機器IP集合 discovery.zen.ping.unicast.hosts: ["192.168.1.91:9300", "192.168.1.92:9300", "192.168.1.93:9300", "192.168.1.94:9300"] # 為了避免腦裂,叢集節點數量最少為候選主節點數量 半數+1 discovery.zen.minimum_master_nodes: 1
3.2.2 配置data-1
# 叢集名稱,保證唯一 cluster.name: duoduozb-es # 節點名稱,僅僅是描述名稱,用於在日誌中區分 node.name: data-1 # 節點描述,可預設 node.attr.rack: r2 # 是否是master節點,master節點存放元資料 node.master: false # 是否是data資料節點,data資料節點存放資料 node.data: true # 是否是ingest節點,ingest節點可以在資料真正進入index前,通過配置pipline攔截器對資料ETL node.ingest: true # 資料的存放路徑,可掛載多個盤 path.data: C:/bigdata/elasticsearch/es-data/data # 日誌的存放路徑 path.logs: C:/bigdata/elasticsearch/es-data/logs # 當前節點IP地址 network.host: 192.168.1.92 # 對外提供服務的埠 http.port: 9200 # 叢集間通訊埠 transport.tcp.port: 9300 # 設定叢集自動發現機器IP集合 discovery.zen.ping.unicast.hosts: ["192.168.1.91:9300", "192.168.1.92:9300", "192.168.1.93:9300", "192.168.1.94:9300"] # 為了避免腦裂,叢集節點數量最少為候選主節點數量 半數+1 discovery.zen.minimum_master_nodes: 1
3.2.3 配置data-2
# 叢集名稱,保證唯一 cluster.name: duoduozb-es # 節點名稱,僅僅是描述名稱,用於在日誌中區分 node.name: data-2 # 節點描述,可預設 node.attr.rack: r3 # 是否是master節點,master節點存放元資料 node.master: false # 是否是data資料節點,data資料節點存放資料 node.data: true # 是否是ingest節點,ingest節點可以在資料真正進入index前,通過配置pipline攔截器對資料ETL node.ingest: true # 資料的存放路徑,可掛載多個盤 path.data: C:/bigdata/elasticsearch/es-data/data # 日誌的存放路徑 path.logs: C:/bigdata/elasticsearch/es-data/logs # 當前節點IP地址 network.host: 192.168.1.93 # 對外提供服務的埠 http.port: 9200 # 叢集間通訊埠 transport.tcp.port: 9300 # 設定叢集自動發現機器IP集合 discovery.zen.ping.unicast.hosts: ["192.168.1.91:9300", "192.168.1.92:9300", "192.168.1.93:9300", "192.168.1.94:9300"] # 為了避免腦裂,叢集節點數量最少為候選主節點數量 半數+1 discovery.zen.minimum_master_nodes: 1
3.2.4 配置client-1
# 叢集名稱,保證唯一 cluster.name: duoduozb-es # 節點名稱,僅僅是描述名稱,用於在日誌中區分 node.name: client-1 # 節點描述,可預設 node.attr.rack: r4 # 是否是master節點,master節點存放元資料 node.master: false # 是否是data資料節點,data資料節點存放資料 node.data: false # 是否是ingest節點,ingest節點可以在資料真正進入index前,通過配置pipline攔截器對資料ETL node.ingest: false # 資料的存放路徑,可掛載多個盤 path.data: C:/bigdata/elasticsearch/es-data/data # 日誌的存放路徑 path.logs: C:/bigdata/elasticsearch/es-data/logs # 當前節點IP地址 network.host: 192.168.1.94 # 對外提供服務的埠 http.port: 9200 # 叢集間通訊埠 transport.tcp.port: 9300 # 設定叢集自動發現機器IP集合 discovery.zen.ping.unicast.hosts: ["192.168.1.91:9300", "192.168.1.92:9300", "192.168.1.93:9300", "192.168.1.94:9300"] # 為了避免腦裂,叢集節點數量最少為候選主節點數量 半數+1 discovery.zen.minimum_master_nodes: 1
3.3 瀏覽器檢視
依次啟動各節點Elasticsearch服務:
elasticsearch-5.5.0/bin/elasticsearch
使用地址 ofollow,noindex" target="_blank">http://192.168.1.94:9200/ 進行叢集訪問。顯示資訊如下:
{ "name" : "client-1", "cluster_name" : "duoduozb-es", "cluster_uuid" : "blJJr58QRa2L3YWJ7twkRg", "version" : { "number" : "5.5.0", "build_hash" : "260387d", "build_date" : "2017-06-30T23:16:05.735Z", "build_snapshot" : false, "lucene_version" : "6.6.0" }, "tagline" : "You Know, for Search" }
4. Kibana安裝
4.1 Kibana安裝配置
下載Kibana安裝包並解壓。
修改配置檔案 config/kibana.yml
.
server.port: 5601 server.host: "0.0.0.0" elasticsearch.url: "http://192.168.1.94:9200" kibana.index: ".kibana"
4.2 瀏覽器檢視
啟動Kibana服務:
bin/kibana
使用地址 http://192.168.1.94:5601/ 進行訪問。
5. X-Pack安裝
5.1 Elasticsearch安裝X-Pack
為所有節點的Elasticsearch安裝X-Pack外掛。
bin/elasticsearch-plugin install x-pack
注意:中途會讓你輸入兩次 Y 表示確認安裝。
如果解除安裝,請執行:
bin/elasticsearch-plugin remove x-pack
5.2 Kibana安裝X-Pack
為客戶端節點的Kibana安裝X-Pack外掛。
bin/kibana-plugin install x-pack
如果解除安裝,請執行:
bin/kibana-plugin remove x-pack
5.3 自定義密碼
安裝完成X-Pack之後重啟Elasticsearch和Kibana。再次登陸Elasticsearch和Kibana,會提示需要輸入使用者名稱和密碼。
預設使用者名稱:elastic
預設密碼:changeme
其中內建了三個賬號,分別是:
username | role | 許可權 |
---|---|---|
elastic | superuser | 內建的超級使用者 |
kibana | kibana_system | 使用者kibana用來連線elasticsearch並與之通訊。Kibana伺服器以該使用者身份提交請求以訪問叢集監視API和 .kibana索引。不能訪問index。 |
logstash_system | logstash_system | 使用者Logstash在Elasticsearch中儲存監控資訊時使用 |
可通過以下操作自定義設定各個賬號的密碼:
./bin/x-pack/setup-passwords interactive
也可通過以下操作進行自動生成密碼:
./bin/x-pack/setup-passwords auto
注意:以上設定適用於linux,我在windows安裝發現沒有上述命令。
在windows上,可以通過登入Kibana進行密碼的修改。


注意:設定完Kibana賬號密碼以後,需要重新啟動Kibana服務。
啟動Kibana服務之前,還有一項重要的工作,修改kibana.yml,設定連線elasticsearch的使用者名稱和密碼,否則如果你已經修改了elasticsearch的預設使用者名稱和密碼,啟動kibana服務時會提示連線不上elasticsearch的錯誤。
elasticsearch.username: "elastic"elasticsearch.password: "elastic"
5.4 啟用禁用X-Pack
預設情況下,所有X-Pack功能都被啟用;通過修改elasticsearch.yml, kibana.yml以及logstash.yml配置檔案;您可以啟用或禁用特定的X-Pack功能。
設定 | 描述 |
---|---|
xpack.graph.enabled | 設定為false禁用X-Pack圖形功能 |
xpack.ml.enabled | 設定為false禁用X-Pack機器學習功能 |
xpack.monitoring.enabled | 設定為false禁用X-Pack監視功能 |
xpack.reporting.enabled | 設定為false禁用X-Pack報告功能 |
xpack.security.enabled | 設定為false禁用X-Pack安全功能 |
xpack.watcher.enabled | 設定false為禁用觀察器 |
6. Head安裝
Head主要是可以用比較直觀的方式來檢視Elasticsearch的所有索引和內容,在5.x中這部分功能被整合在x-pack裡,官方已經不太推薦使用,所以如果安裝了x-pack,就沒必要再次安裝head了。如果不想安裝x-pack,需要單獨安裝head外掛,在此記錄下安裝步驟。
6.1 官方介紹
elasticsearch-head是一個elasticsearch的叢集管理工具,它是完全由html5編寫的獨立網頁程式,可以通過外掛把它整合到es,很方便對es進行各種操作的客戶端。
github地址: https://github.com/mobz/elasticsearch-head
6.2 安裝步驟
elasticsearch5.0以上版本不支援直接安裝head外掛,需要啟動一個服務。
因為head外掛本質上還是一個nodejs的工程,因此需要安裝node,使用npm來安裝依賴的包。
(1) 下載nodejs: https://nodejs.org/en/download/ 此處選擇v8.12.0版本。
nodejs安裝完成後,npm會被自動安裝。可以使用 node -v
和 npm -v
檢視版本。
(2) 使用npm安裝grunt:
npm install -g grunt-cli
(3) 在elasticsearch-head-master目錄下,執行命令:
npm install
(4) 編輯elasticsearch-5.5.0/config/elasticsearch.yml,加入以下內容:
http.cors.enabled: truehttp.cors.allow-origin: "*"http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type
(6) 在elasticsearch-head-master/目錄下,執行啟動命令:
grunt server
(7) 瀏覽器訪問:
如果elasticsearch未安裝x-pack,是不需要步驟(4)的,以上步驟完成以後,在瀏覽器輸入以下地址訪問:
但是前面我們安裝了x-pack,並重新設定了密碼。此時必須有步驟(4),並且瀏覽器中訪問形式如下:
http://192.168.1.94:9100/?auth_user=elastic&auth_password=elastic
7. 其他外掛安裝
7.1 IK分詞外掛
7.1.1 介紹
IK分詞外掛是我們較常用的中文分詞外掛。
github地址: https://github.com/medcl/elasticsearch-analysis-ik
7.1.2 安裝
版本選擇與elasticsearch對應的版本。比如我的elasticsearch版本為5.5.0,選擇的ik的版本也是5.5.0.
(1) 下載安裝包並解壓到 \elasticsearch-5.5.0\plugins
目錄下,重新命名為 analysis-ik
.
拷貝analysis-ik下的config資料夾到 \elasticsearch-2.4.0\config
目錄下,並重命名為 ik
。
重啟ES.
所有節點均需以上安裝操作。
7.2 pinyin外掛
7.2.1 介紹
有時在淘寶搜尋商品的時候,會發現使用漢字,拼音,或者拼音混合漢字都會出來想要的效果,該功能就是通過拼音搜尋外掛實現的。
github地址: https://github.com/medcl/elasticsearch-analysis-pinyin
7.2.2 安裝
在地址 https://github.com/medcl/elasticsearch-analysis-pinyin/releases 選擇對應的版本下載。
將安裝包解壓到 \elasticsearch-5.5.0\plugins
目錄下,並重命名為 'pinyin'.
重啟ES.
所有節點均需以上安裝操作。
8. 總結
以上內容也參考了很多其他大神的總結,此處就不一一列出部落格地址了。在此對你們的付出表示感謝。