Docker部署ElasticSearch7.11.1并挂载+配置X-Pack设置帐号密码+Kibana7.11.1+IK插件
一、ElasticSearch是什么
Elasticsearch也使用Java開發并使用Lucene作為其核心來實現所有索引和搜索的功能,但是它的目的是通過簡單的RESTful API來隱藏Lucene的復雜性,從而讓全文搜索變得簡單。不過,Elasticsearch不僅僅是Lucene和全文搜索,我們還能這樣去描述它:
分布式的實時文件存儲,每個字段都被索引并可被搜索
分布式的實時分析搜索引擎,可以擴展到上百臺服務器,處理PB級結構化或非結構化數據
二、Docker 部署 ElasticSearch
ElasticSearch的默認端口是9200,我們把宿主環境9200端口映射到Docker容器中的9200端口,就可以訪問到Docker容器中的ElasticSearch服務了,同時我們把這個容器命名為es。
這里有一點要注意,需要修改-e ES_JAVA_OPTS配置JVM參數 Xmx 最大堆大小和 -Xms 最小堆大小,防止啟動占用內存過大默認2g而出現的服務閃退
這里一般會占用9200和9300兩個端口:
-
9200作為Http協議,主要用于外部通訊
-
9300作為Tcp協議,jar之間就是通過tcp協議通訊
-
ES集群之間是通過9300進行通訊
我創建在/mnt下,這個自己選擇,然后對目錄進行授權
創建的目錄:
授權:不然掛載的時候會因為權限不足導致服務無法啟動
啟動命令:
elasticsearch.yml:
cluster.name: elasticsearch-cluster # 節點名稱 node.name: elasticsearch-node1 # # 綁定host,0.0.0.0代表當前節點的ip network.host: 0.0.0.0 # # 設置其它節點和該節點交互的ip地址,如果不設置它會自動判斷,值必須是個真實的ip地址(本機ip),因為我使用的是docker啟動,不是簡單127.0.0.1,要查看具體分配的ip network.publish_host: 172.18.0.2 # # 設置對外服務的http端口,默認為9200 http.port: 9200 # # 設置節點間交互的tcp端口,默認是9300 transport.tcp.port: 9300 # # 是否支持跨域,默認為false http.cors.enabled: true # # 當設置允許跨域,默認為*,表示支持所有域名,如果我們只是允許某些網站能訪問,那么可以使用正則表達式。比如只允許本地地址。 /https?:\/\/localhost(:[0-9]+)?/ http.cors.allow-origin: "*" # # 表示這個節點是否可以充當主節點 node.master: true # # 是否充當數據節點 node.data: true # # 所有主從節點ip:port discovery.seed_hosts: ["172.18.0.2:9300"] # # 這個參數決定了在選主過程中需要 有多少個節點通信 預防腦裂 discovery.zen.minimum_master_nodes: 1 # 跨域允許設置的頭信息,默認為X-Requested-With,Content-Type,Content-Lengt http.cors.allow-headers: Authorization # 這條配置表示開啟xpack認證機制,使用密碼登錄 xpack.security.enabled: true xpack.security.transport.ssl.enabled: true由于修改了配置,因此需要重啟ElasticSearch容器。
docker restart es訪問9200端口,如下服務便啟動成功
三、配置X-Pack設置es用戶密碼
為什么要配置X-Pack,外網裸奔這么刺激容易被攻擊。正式環境建議內網訪問、內網訪問、內網訪問
打開 elasticsearch.yml文件
在最后增加如下參數
# 跨域允許設置的頭信息,默認為X-Requested-With,Content-Type,Content-Lengt http.cors.allow-headers: Authorization # 這條配置表示開啟xpack認證機制 xpack.security.enabled: true xpack.security.transport.ssl.enabled: true接著在容器在容器中,來到
/usr/share/elasticsearch/bin執行
./elasticsearch-setup-passwords interactive進行各種密碼的配置
重啟服務,訪問如下便成功:
四、docker安裝kibana
kibana主要是用來編輯請求語句的,方便學習操作es的語法,雖然使用curl也可以,但是總感覺不是很直觀和方便。有時在進行編寫程序,`寫查詢語句時,可以使用kibana進行書寫,然后再粘貼到程序中。同時使用Kibana能執行高級的數據分析,并能以圖表、表格和地圖的形式查看數據
授權
kibana.yml
啟動:
docker run -d -it --restart=always --privileged=true --name=kibana -p 5601:5601 -v/mnt/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml docker.io/kibana:7.11.1訪問5601端口,如下便成功
五、Docker 部署 ElasticSearch-Head
ElasticSearch-head就是一款能連接ElasticSearch搜索引擎,并提供可視化的操作頁面對ElasticSearch搜索引擎進行各種設置和數據檢索功能的管理插件,如在head插件頁面編寫RESTful接口風格的請求,就可以對ElasticSearch中的數據進行增刪改查、創建或者刪除索引等操作。類似于使用navicat工具連接MySQL這種關系型數據庫,對數據庫做操作。head同時也是集群管理工具。
- 拉取鏡像
- 運行容器
展示如下:
上圖為概覽頁面效果,簡單說明下以上5個畫了紅框的地方
- green,綠色。這代表所有的主分片和副本分片都已分配。你的集群是 100% 可用的。
- yellow,黃色。所有的主分片已經分片了,但至少還有一個副本是缺失的。不會有數據丟失,所以搜索結果依然是完整的。不過,你的高可用性在某種程度上被弱化。如果更多的分片消失,你就會丟數據了。所以可把yellow 想象成一個需要及時調查的警告。
- red,紅色。至少一個主分片以及它的全部副本都在缺失中。這意味著你在缺少數據:搜索只能返回部分數據,而分配到這個分片上的寫入請求會返回一個異常。 如果只有一臺主機的話,其實索引的健康狀況也是yellow,所有上圖顯示為yellow。因為一臺主機,集群沒有其他的主機可以防止副本,所以說,這就是一個不健康的狀態,因此集群也是十分有必要的。
表示在Elasticsearch已經創建的索引(index)。包含了索引的名稱、索引的大小(size)、索引的數據量(docs),并且通過【信息】和【動作】可以查看索引信息或者給索引建別名。
表示Elasticsearch節點。上圖中的帶有感嘆號的Unassigned表示未分配的節點,帶有星號的表示是主節點,其節點名稱叫:Hu9Suoy,并能查看節點信息。
表示索引分片,Elasticsearch數據就存儲在這些分片中。
查看Elasticsearch相關的信息和刷新head插件。
這樣,我們就完成了用Docker提供Elasticsearch服務,而不污染宿主機環境了,這樣還有一個好處,如果想同時啟動多個不同版本的Elastcsearch或者其他服務,Docker也是一個理想的解決方案。
六、安裝IK分詞器
默認的分詞器對中文并不友好,因此我們需要自己安裝一個對中文友好的IK分詞器,github鏈接,一定要注意,elasticsearch的版本一定要與ik的版本匹配。我的elasticsearch版本是7.11.1,那么對應的ik版本也是7.11.1.
進入運行elascticsearch的docker容器,來到/usr/share/elasticsearch/bin目錄下:運行
便自己安裝上ik分詞器了,然后重啟es
參考文章
關于ik的測試及遇到的問題,參考我另一篇文章
總結
以上是生活随笔為你收集整理的Docker部署ElasticSearch7.11.1并挂载+配置X-Pack设置帐号密码+Kibana7.11.1+IK插件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java中List的父类与子类如何转换
- 下一篇: 互联网晚报 | 8月27日 星期五 |