Elasticsearch集群搭建
- 2019 年 10 月 16 日
- 筆記
Elasticsearch單機版安裝:https://www.cnblogs.com/biehongli/p/11643482.html
1、Elasticsearch集群版安裝,這裡進行模擬,是偽集群版的安裝,我使用一台機器,通過修改埠號的方式進行偽集群的搭建。
注意:由於單機版的安裝過程中出現了各種錯誤,所以集群版我是直接複製修改好的單機版的(注意:home/hadoop/soft/el_slave/elasticsearch-5.4.3-slaver1/data裡面有一個nodes文件夾,將該文件夾刪除即可,下面也會提及)。我沒有再次通過解壓縮安裝包的方式,因為單機版報了不少錯誤,所以用解決完錯誤的更快些。
Elasticsearch集群版的搭建,是一主二從的方式,即一個master主節點,兩個slaver從節點。(備註,我第一次搭建的作為了主節點了,請自行腦補)。
我這裡先創建一個el_slave文件夾,然後將第一次單機版的Elasticsearch複製兩份,備用。
1 [elsearch@slaver4 soft]$ mkdir el_slave 2 [elsearch@slaver4 soft]$ ls 3 elasticsearch-5.4.3 elasticsearch-head-master el_slave node-v8.16.2-linux-x64 4 [elsearch@slaver4 soft]$ cp -r elasticsearch-5.4.3/ el_slave/ 5 [elsearch@slaver4 soft]$ ls 6 elasticsearch-5.4.3 elasticsearch-head-master el_slave node-v8.16.2-linux-x64 7 [elsearch@slaver4 soft]$ cd el_slave/ 8 [elsearch@slaver4 el_slave]$ ls 9 elasticsearch-5.4.3 10 [elsearch@slaver4 el_slave]$ mv elasticsearch-5.4.3/ elasticsearch-5.4.3-slaver1 11 [elsearch@slaver4 el_slave]$ cp -r elasticsearch-5.4.3-slaver1/ elasticsearch-5.4.3-slaver2 12 [elsearch@slaver4 el_slave]$ ls 13 elasticsearch-5.4.3-slaver1 elasticsearch-5.4.3-slaver2 14 [elsearch@slaver4 el_slave]$
2、開始zao起來,修改主節點的配置文件/home/hadoop/soft/elasticsearch-5.4.3/config/elasticsearch.yml。添加如下所示的內容。
1 # 指定集群的名稱 2 cluster.name: biehl01 3 # 給master起一個名稱,叫master 4 node.name: master 5 # 告訴此節點,它就是master 6 node.master: true 7 # 綁定的ip地址和默認埠號9200 8 network.host: 192.168.110.133
操作如下所示:

修改主節點配置文件,以後重啟一下elasticsearch,查看效果,如下所示:

3、主節點修改,完畢開始修改從節點的配置文件,修改內容如下所示:
1 # 從節點cluster.name要和master主節點的名稱要保持一致 2 cluster.name: biehl01 3 # 從節點起一個名稱 4 node.name: slave1 5 # 綁定的ip地址 6 network.host: 192.168.110.133 7 # 修改默認的埠號,默認9200 8 http.port: 8200 9 10 # 找到master主節點 11 discovery.zen.ping.unicast.hosts: ["192.168.110.133"]
從節點一配置如下所示:

從節點二配置文件裡面添加如下所示內容:
1 # 從節點cluster.name要和master主節點的名稱要保持一致 2 cluster.name: biehl01 3 # # 從節點起一個名稱 4 node.name: slave2 5 # # 綁定的ip地址 6 network.host: 192.168.110.133 7 # # 修改默認的埠號,默認9200 8 http.port: 7200 9 # 10 # # 找到master主節點,discovery.zen.minimum_master_nodes的值計算是節點總數/2 + 1(三個節點就是寫2即可) 11 # discovery.zen.minimum_master_nodes: 2 12 discovery.zen.ping.unicast.hosts: ["192.168.110.133"]
從節點二配置如下所示:

修改完畢,主節點,從節點一二,開始啟動,三個節點,發現自己有點單蠢了呢。開始三個節點後台啟動,使用jps顯示三個進程,但是介面就是顯示不了從節點一二,主要造成這個的原因是我複製了主節點,然後分析一下原因,我前台啟動,發現報錯了,錯誤如下所示:
1 # 主節點的報錯 2 [master] failed to send join request to master [{slave1}{rYUCm8sMRzaXu84zRj3duQ}{qL5ICfOKQKyDTaRytL5vGg}{192.168.110.133}{192.168.110.133:9301}], reason [RemoteTransportException[[slave1][192.168.110.133:9301][internal:discovery/zen/join]]; nested: NotMasterException[Node [{slave1}{rYUCm8sMRzaXu84zRj3duQ}{qL5ICfOKQKyDTaRytL5vGg}{192.168.110.133}{192.168.110.133:9301}] not master for join request]; ], tried [3] times 3 4 # 從節點的報錯 5 [slave1] failed to send join request to master [{slave2}{rYUCm8sMRzaXu84zRj3duQ}{jY1TxxwdSkaZkQqdsNTGaQ}{192.168.110.133}{192.168.110.133:9302}], reason [RemoteTransportException[[slave2][192.168.110.133:9302][internal:discovery/zen/join]]; nested: NotMasterException[Node [{slave2}{rYUCm8sMRzaXu84zRj3duQ}{jY1TxxwdSkaZkQqdsNTGaQ}{192.168.110.133}{192.168.110.133:9302}] not master for join request]; ], tried [3] times
錯誤原因:每個節點索引分片的分配在每新增一個節點都要重新進行一次分配。
在home/hadoop/soft/el_slave/elasticsearch-5.4.3-slaver1/data裡面有一個nodes文件夾,將該文件夾刪除即可。然後重啟從節點一,從節點二,問題解決。
1 [elsearch@slaver4 elasticsearch-5.4.3-slaver1]$ ls 2 bin config data hs_err_pid11491.log lib LICENSE.txt logs modules NOTICE.txt plugins README.textile 3 [elsearch@slaver4 elasticsearch-5.4.3-slaver1]$ cd data/ 4 [elsearch@slaver4 data]$ ls 5 nodes 6 [elsearch@slaver4 data]$ rm -rf nodes/ 7 [elsearch@slaver4 data]$ ls
1 [elsearch@slaver4 elasticsearch-5.4.3-slaver2]$ ls 2 bin config data hs_err_pid11491.log lib LICENSE.txt logs modules NOTICE.txt plugins README.textile 3 [elsearch@slaver4 elasticsearch-5.4.3-slaver2]$ cd data/ 4 [elsearch@slaver4 data]$ ls 5 nodes 6 [elsearch@slaver4 data]$ rm -rf nodes/ 7 [elsearch@slaver4 data]$ ls
重新啟動三個節點,啟動以後如下所示:
注意:elasticsearch 集群搭建起來,為什麼head只顯示master?(為什麼我啟動三個es後 head中只顯示了一個master節點)。這種問題,我估計就是自己是複製的主節點的,需要將home/hadoop/soft/el_slave/elasticsearch-5.4.3-slaver1/data/nodes,這個nodes文件夾刪除,重新生成,我是這樣操作的。

Elasticsearch-head插件的web介面效果如下所示:

至此,ElasticSearch的集群版就已經搭建完畢了。ElasticSearch集群的搭建可以使用更多的參數。你可以通過新增更多的參數配置,來實驗ElasticSearch集群版的搭建。
4、elasticsearch的基礎概念總結:
1)、elasticsearch集群:elasticsearch集群是由一個或者多個節點組成的集合。每一個集群都有一個唯一的名稱。默認是elasticsearch,我們可以自己設置的cluster_name的值,cluster_name的值非常重要,一個節點就是通過集群的名稱加入集群的。然後,每一個節點都有自己的名稱。節點是可以存儲數據,參與集群索引數據,以及搜索數據的獨立服務。
2)、索引,是含有相同屬性的文檔集合。
3)、類型,索引可以定義一個或者多個類型,文檔必須屬於一個類型。
4)、文檔,文檔是可以被索引的基本數據單位。索引在elasticsearch中是通過一個名稱來識別的,必須是英文字母小寫的,且不含中劃線的,我們通過這個索引來對文檔進行增刪查改的操作。
5)、索引、類型、文檔之間的關係,索引相當於資料庫裡面的database即資料庫,類型相當於資料庫裡面的table即數據表,文檔相當於資料庫SQL裡面的一行記錄。
6)、分片,每個索引都有多個分片,每個分片是一個Lucene索引。
7)、備份,拷貝一份分片就完成了分片的備份。
注意:elasticsearch在創建索引的時候,默認創建5個分片,一份備份,這個數據可以進行修改。分片的數量只能在創建索引的時候進行指定,不能在後期進行修改,備份可以進行動態修改的。
5、Elasticsearch的基本用法,基本操作,基本使用。
elasticsearch是以RESTFul api風格來命名自己的api的。api的基本格式,http://<ip地址>:<port埠號>/<索引>/<類型>/<文檔id>
注意:api的url裡面的元素基本都是elasticsearch的基本概念都是名詞,elasticsearch的動作都是常用http動詞get/put/post/delete來決定的。
6、索引的創建分為非結構化創建("mappings": { }的json格式值是空的)、結構化創建("mappings": { }的json格式值非空的)。
1)、創建非結構化索引,操作如下所示(注意:這裡使用head插件進行創建非結構化索引的哦):

創建完畢以後可以看到一個彈出框,表示創建成功了。

創建的索引,在概覽可以看到自己創建的索引了,student是創建的索引的名稱(切記,索引名稱小寫,不可以出現中劃線)。每一個方框就是elasticsearch的分片,粗線方框是es的主分片,主分片旁邊細線方框是es的備份分片,對應關係,粗線方框0的備份分片是細線方框0。依次類推。

2)、創建非結構化索引,操作如下所示(注意:這裡使用head插件進行創建結構化索引的哦):

查看創建的結構化索引,如下所示(修改了記得點擊刷新哦):

postman是一個擁有可視化介面的http模擬器,可以驗證json結構。之前介紹過,這裡簡單使用一下。
現在查看一下新創建的索引,如下所示:

7、es的索引創建完畢以後就可以進行es的數據插入。插入分為指定文檔id插入和自動產生文檔id插入。文檔id是什麼呢,文檔id是一個唯一索引值,指向我們的文檔數據。

在head插件概覽裡面查看docs的變化,docs代表了該索引下所有文檔的數量值。

在head插件的數據瀏覽可以看到剛才插入的一條數據的。
如何讓es自動指定文檔id呢。如下所示:

自己可以去head插件的概述和數據瀏覽進行查看,這裡僅展示了數據瀏覽的數據。如下所示:

8、修改Elasticsearch的文檔數據。分為直接修改文檔、通過腳本修改文檔。

這種通過指定文檔id進行直接修改的效果如下所示:

通過腳本修改文檔。操作如下所示:

不同的方式,請求成功以後自己使用head查看效果即可。

9、刪除Elasticsearch的文檔、刪除Elasticsearch的索引。

刪除以後發現數據已經被刪除了。

如何刪除一個索引呢,可以直接使用head插件進行刪除即可。也可以使用請求刪除索引。

使用postman的http請求刪除索引,如下所示(注意:刪除索引,是高危操作,索引刪除,其下的數據也將全部刪除):

10、Elasticsearch的查詢,分為簡單查詢,條件查詢,聚合查詢。(注意:Elasticsearch的查詢才是重中之重哦!)。

Elasticsearch的條件查詢如下所示:

如何對Elasticsearch查詢進行關鍵詞的查詢。查詢出的數據順序,以_score欄位進行默認倒排的。

查詢出的數據順序,以_score欄位進行默認倒排的。如何指定數據顯示的順序呢,如下所示:

Elasticsearch聚合查詢如下所示:

複雜的聚合函數使用如下所示,可以計算最小值,平均值,最大值等等:

11、Elasticsearch的高級查詢。高級查詢包含子條件查詢(也叫做葉子條件查詢),指特定欄位查詢所指特定值。複合條件查詢,指以一定的邏輯組合子條件查詢。子條件查詢包含Query context、Filter context。
1)、Query context是指在查詢過程中,除了判斷文檔是否滿足查詢條件外,es還會計算一個_score來標識匹配的程度,旨在判斷目標文檔和查詢條件匹配的有多好。Query context常用查詢,包含全文本查詢,即針對文本類型數據。欄位級別查詢,針對結構化數據,如數字、日期等等。全文本查詢有模糊匹配,短語匹配,多個欄位的匹配查詢,以及語法的查詢等等。
模糊匹配查詢,如下所示,但是模糊匹配有一個缺點,就是比如模糊查詢"java入門",會查詢出"java高級編程","elasticsearch入門"等等這些詞語。

Elasticsearch短語匹配如下所示:

Elasticsearch多欄位模糊匹配查詢。

Elasticsearch語法查詢。語法查詢,是根據一定的語法規則進行的查詢,一般用作數據搜索,支援通配符,boolean查詢,範圍查詢,正則表達式查詢。

語法查詢的多欄位查詢如下所示:

Elasticsearch欄位的查詢,即結構化數據的查詢。term是具體項的含義,range是範圍的含義。如下所示:

Elasticsearch範圍的查詢,gte是大於等於的含義,lte是小於等於的含義。gt是大於的含義,lt是小於的含義。

2)、Filter context的含義,Filter context在查詢過程中,只判斷該文檔是否滿足條件,只有yes或者no。Filter context主要用來做數據過濾的,查詢的結果會被快取起來。

Query Context和Filter Context的複合查詢,常用查詢如固定分數查詢、布爾查詢。,如下所示:
Elasticsearch在查詢返回後會給一個評分_score這個值,固定分數查詢就是將分數固定下來,boost可以設置分數的值,如下所示:

布爾查詢如下所示,should是或者的關係,滿足條件之一即查詢出來,must是必須滿足兩者才查詢出來,must就不截圖了,替換成should即可測試:

布爾查詢和過濾組成的組合查詢,must的反義是must_not,自己可以進行測試即可,must和should的替換自行測試,如下所示:

作者:別先生
部落格園:https://www.cnblogs.com/biehongli/
如果您想及時得到個人撰寫文章以及著作的消息推送,可以掃描上方二維碼,關注個人公眾號哦。
