Elasticsearch(二) Docker 部署 Elasticsearch 及 Kibana (安裝過程填坑)


在學習elasticsearchkibana 時,使用Docker 進行快速部署,但是,在虛擬機進行部署的時候,遇到了一些問題,在這就重頭記錄一下整個部署的過程。

鏡像的下載

使用 Docker 來部署,其實是非常的簡單的,這里我們選取的 elasticsearchkibana 的版本均為 7.4.2

# 下載 elasticsearch
docker pull elasticsearch:7.4.2
# 下載 kibana
docker pull kibana:7.4.2
# 查看下載的鏡像
docker images

image-20201213214117426

創建 Elasticsearch 實例

在創建 Elasticsearch 實例之前,先在本機中創建一個自己的目錄 , 如:/mydata/elasticsearch , 然后再目錄底下創建三個文件夾 dataconfigplugins,為后面創建elasticsearch實例時,可以做一個文件映射,便於我們對 es 實例進行修改。
同時,在 config 文件夾里,新建 elasticsearch.yml 配置文件,並配置 es 可以被遠程的任何機器進行訪問

mkdir -p /mydata/elasticsearch/data
mkdir -p /mydata/elasticsearch/config
mkdir -p /mydata/elasticsearch/plugins
# 寫入配置
echo "http.host: 0.0.0.0" >> /mydata/elasticsearch/config/elasticsearch.yml
# 這里需要設置一下文件夾的權限。原因: 做文件夾映射后,需要對 本機文件夾 進行讀寫操作,如果不給權限的話,docker 將沒有權限來完成讀寫,后期啟動會報錯
chmod -R 777 /mydata/elasticsearch

啟動 elasticsearch 實例

docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms64m -Xmx256m" \
-v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \
-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-d elasticsearch:7.4.2

# 查看運行的實例
docker ps

-e "discovery.type=single-node" : 設置 es 為單節點運行
-e ES_JAVA_OPTS="-Xms64m -Xmx256m": 設置 es 的最小內存使用 64M ,最大內存使用為 256 M
-v : 設置 本機文件夾與實例內部的映射

訪問 http://主機IP:9200 ,能看到如下信息,即為創建成功

創建 kibana 實例

kibana只需要創建實例,關聯我們剛剛的 es 即可

# 這里需要將主機 IP 修改為 對應的主機IP
docker run --name kibana -e ELASTICSEARCH_HOSTS=http://本機ip:9200 \
-p 5601:5601 -d kibana:7.4.2 

如果使用虛擬機搭建環境,建議將虛擬機設置為固定 IP,也方便后期的訪問

訪問 http://主機ip:5601 ,看到如下頁面即為創建成功

啟動時的各種報錯

Elasticsearch

[1]expecting token of type [START_OBJECT] but found [VALUE_STRING]

image-20201213215359977

錯誤原因: elasticsearch.yml 文件內部錯誤

解決方案: 仔細檢查yml文件中的配置項書寫格式: name:(空格)value 注意 冒號后面后個空格

[2] java.nio.file.AccessDeniedException: /usr/shar/elasticsearch/data/nodes

錯誤原因: 沒有權限,做文件夾關聯之后,docker 內部的 es 需要將 data 數據同時保存到 本機的 文件夾上,權限不足,無法寫入

解決方案: 對共享的文件夾開放權限,重啟es實例即可

# 開放所有權限  這里修改為對應的本機文件夾路徑即可
chmod -R 777 /mydata/elasticsearch
# 重啟 es 
docker restart elasticsearch

Kibana

[1] {.. "message" : "Unable to revive connection: http://ip:9200/"}

image-20201213221158620

錯誤原因:Docker容器中啟動服務和直接在Linux環境下安裝服務,會有ip上的區別,不在是服務器的物理ip, 而是容器對外暴露對的ip,。

解決方案: 通過docker inspect elasticsearch查看ES實例暴露出來的ip 。停止並刪除現有的Kibana容器,然后重新啟動kibana並添加環境變量參數:-e ELASTICSEARCH_HOSTS="http://es暴露的IP:9200"

# 停止實例
docker stop kibana
# 刪除實例
docker rm kibana
# 查看 es 實例暴露的IP
docker inspect elasticsearch
# 重新創建實例
docker run --name kibana -e ELASTICSEARCH_HOSTS=http://172.17.0.3:9200 \
-p 5601:5601 -d kibana:7.4.2 

查看 es 實例暴露的IP:

但是如上解決方案存在一個問題:這個 IPAddress 是 docker 容器 自動分配的,也就是說,每當主機重啟,或者實例重啟之后,這個 ip 是會變化的,也就使得 需要再次配置 kibana,故 在這提供一個新的解決方案

解決方案二:

1、創建一個 docker 的 bridge 網絡

# 查看docker網絡信息
docker network ls
# 新建一個bridge網絡
docker network create --driver bridge --subnet=172.18.0.0/16 --gateway=172.18.0.1 mynet
# 查看新建網絡信息
docker network inspect mynet

2、停止和刪除原來的 elasticsearch 和 kibana

docker stop elasticsearch
docker rm elasticsearch
docker stop kibana
docker rm kibana

3、使用新的 bridge 創建 elasticsearch 和 kibana 實例 並直接指定 IP

# 創建 elasticsearch 實例
docker run --name elasticsearch --network mynet --ip 172.18.0.5
-p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms64m -Xmx256m" \
-v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-d elasticsearch:7.4.2
# 創建 kibana 實例
docker run --name kibana  --network mynet --ip 172.18.0.103 \
-e ELASTICSEARCH_HOSTS=http://172.18.0.5:9200 \
-p 5601:5601 -d kibana:7.4.2

解釋一下為什么要新建一個新的 bridge 網絡環境:

Docker創建容器時默認采用bridge網絡,自行分配ip,不允許自己指定。在實際部署中,我們需要指定容器ip,不允許其自行分配ip,尤其是搭建集群時,固定ip是必須的。故,如果需要分配固定的ip,我們可以創建自己的bridge網絡 ,如: mynet,創建容器的時候指定網絡為mynet並指定ip即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM