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: true
node.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: false
node.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: false
node.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: 0.0.0.0
# 對外提供服務的端口
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: 0.0.0.0
# 對外提供服務的端口
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: 0.0.0.0
# 對外提供服務的端口
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: 0.0.0.0
# 對外提供服務的端口
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
使用地址 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: true
http.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. 總結
以上內容也參考了很多其他大神的總結,此處就不一一列出博客地址了。在此對你們的付出表示感謝。