天天看點

Docker安裝ElasticSearch和Elasticsearch-Head以及IK分詞器

ElasticSearch 是一個分布式、高擴充、高實時的搜尋引擎。它能很友善的使大量資料具有搜尋、分析和探索的能力。充分利用ElasticSearch的水準伸縮性,能使資料在生産環境變得更有價值。ElasticSearch 的實作原理主要分為以下幾個步驟,首先使用者将資料送出到Elastic Search 資料庫中,再通過分詞控制器去将對應的語句分詞,将其權重和分詞結果一并存入資料,當使用者搜尋資料時候,再根據權重将結果排名,打分,再将傳回結果呈現給使用者,本文介紹如果通過Docker進行安裝Elasticsearch單節點和叢集

一、安裝單節點Elasticsearch

1、拉取Elasticsearch

docker pull elasticsearch:6.8.7           

2、建立資料卷

主要用于将容器内的資料和主控端進行挂載,避免容器重新開機和挂掉的時候資料丢失

  • 建立目錄
# -p是建立多級目錄
mkdir -p /data/es           
  • 進入剛剛建立的es目錄,建立資料存放目錄和日志存放目錄
# 進入目錄
cd /data/es
# 建立資料目錄和日志目錄
mkdir data log
# 這兩個目錄的使用者權限要與啟動es的使用者相同,否則會出現沒有權限讀取,這裡為了友善直接給開放最大權限
chmod 777 data log           
  • 建立配置檔案
vim es.yml           
  • 檔案中加入以下内容
cluster.name: elasticsearch-cluster
node.name: es-node
http.port: 9200
network.host: 0.0.0.0
http.cors.enabled: true
http.cors.allow-origin: "*"           

3、啟動

docker run -d --name es -p 9200:9200 -p 9300:9300 --restart always -v /data/es/data/:/usr/share/elasticsearch/data -v /data/es/log/:/usr/share/elasticsearch/logs -v /data/es/es.yml:/usr/share/elasticsearch/config/elasticsearch.yml -e "discovery.type=single-node" elasticsearch:6.8.7           
  • 最後通過浏覽器測試是否啟動成功

4、安裝IK分詞器

Elasticsearch分詞器,對中文分詞不是太友好。這裡我們可以下載下傳開源的

IK

分詞器

  • 進入es容器
docker exec -it es bash           
  • 進入plugin目錄并安裝分詞器
# 進入目錄
cd plugins/
# 安裝分詞器
wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.8.7/elasticsearch-analysis-ik-6.8.7.zip           

5、安裝Elasticsearch-Head

提供了操作Elasticsearch的界面

  • 拉取鏡像
docker pull mobz/elasticsearch-head:5           
  • 運作
docker run -d -p --name eshead 9100:9100 docker.io/mobz/elasticsearch-head:5           

最後通過浏覽器打開,并進行連接配接測試是否連接配接成功,這時候對ES叢集進行操作時會出現

406

異常,需要我們去配置下

# 進入head容器
docker exec -it eshead bash

# 編輯配置檔案,如果沒有vim指令自行安裝vim
vim _site/vendor.js

# 在未編輯的模式下使用以下指令查詢
/contentType
輸入i開啟編輯模式,application/x-www-form-urlencoded 改為 application/json;charset=UTF-8

# 按鍵盤的ESC健退出編輯模式,然後查詢下一個
/var inspectData = s.contentType
輸入i開啟編輯模式,将application/x-www-form-urlencoded 改為 application/json;charset=UTF-8

# 輸入wq儲存并退出,最後退出容器并重新開機容器
exit
docker restart eshead           

到此就安裝好單節點的Elasticsearch啦,但是有個地方要注意,ES的

版本号一定要和分詞器的版本對應

二、安裝叢集版的Elasticsearch

這裡隻介紹如何安裝叢集,不再介紹安裝分詞器等。。

1、建立配置檔案

這裡還是延續安裝單節點,在

/data/es

目錄中建立,如果伺服器沒有該目錄就自行建立

vim es.yml           

加入以下内容

cluster.name: elasticsearch-cluster
node.name: es-node1
network.host: 0.0.0.0
network.publish_host: 192.168.1.97
http.port: 9200
transport.tcp.port: 9300
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
discovery.zen.ping.unicast.hosts: ["192.168.1.97:9300","192.168.1.98:9300"]
discovery.zen.minimum_master_nodes: 2           
  • 在第二台伺服器也建立該配置檔案并加入以下内容
cluster.name: elasticsearch-cluster
node.name: es-node2
network.host: 0.0.0.0
network.publish_host: 192.168.1.98
http.port: 9200
transport.tcp.port: 9300
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
discovery.zen.ping.unicast.hosts: ["192.168.1.98:9300","192.168.1.97:9300"]
discovery.zen.minimum_master_nodes: 2           

以下為配置的描述

配置 描述
cluster.name 用于唯一辨別一個叢集,不同的叢集,其   不同,叢集名字相同的所有節點自動組成一個叢集
node.name 節點名,預設随機指定一個name清單中名字。一個叢集中

node名字不能重複

network.host 允許通路的IP,預設為

0.0.0.0

network.publish_host 設定其它結點和該結點互動的ip位址,如果不設定它會自動判斷,值必須是個真實的ip位址
http.port 設定對外服務的http端口,預設為9200
transport.tcp.port 設定節點之間互動的tcp端口,預設是9300
http.cors.enabled 是否允許跨域
http.cors.allow-origin 允許的域名,

*

表示所有
node.master 該結點是否有資格被選舉為主結點(候選主結點),用于處理請求和管理叢集。如果結點沒有資格成為主結點,那麼該結點永遠不可能成為主結點;如果結點有資格成為主結點,隻有在被其他候選主結點認可和被選舉為主結點之後,才真正成為主結點
node.data 配置該結點是資料結點,用于儲存資料,執行資料相關的操作
discovery.zen.ping.unicast.hosts 叢集中節點的IP位址
discovery.zen.minimum_master_nodes 自動發現master節點的最小數,如果這個叢集中配置進來的master節點少于這個數目,es的日志會一直報master節點數目不足,甚至會出現主備切換時誤認為有兩個激活的master節點。最好為

主節點總數 / 2 + 1

,預設

1

2、運作

分别運作兩台伺服器中的Elasticsearch,這裡不在介紹拉取鏡像

docker run -d --name es -p 9200:9200 -p 9300:9300 --restart always -v /data/es/data/:/usr/share/elasticsearch/data -v /data/es/log/:/usr/share/elasticsearch/logs -v /data/es/es.yml:/usr/share/elasticsearch/config/elasticsearch.yml elasticsearch:6.8.7           

這裡的指令比安裝單節點少了個環境變量

-e "discovery.type=single-node "

,運作成功後通過head去測試下連接配接,如果都連接配接成功的話就算是成功啦,如果失敗,就自己去看看哪裡配置錯了哦

本文到此就結束咯,有任何疑問歡迎在評論區發表

繼續閱讀