天天看點

Docker 安裝部署中間件 ElasticSearch 和 Kibana

環境說明:

Centos 8.1 

Docker 版本 : 19.03.8

ElasticSearch: 6.4.0

Kibana: 6.4.0

主機IP:172.16.244.140

一、鏡像下載下傳.

docker pull elasticsearch:6.4.0    #下載下傳 6.4.0版本鏡像

docker pull kibana:6.4.0           #下載下傳 kibana 6.4.0版本鏡像
           
Docker 安裝部署中間件 ElasticSearch 和 Kibana

運作鏡像創庫容器:

二、建構elasticsearch容器,并驗證是否成功

在建構前選設定: sysctl -w vm.max_map_count=262144 虛拟記憶體 。否則有可能啟動失敗。

mkdir -p /elk/es/data /elk/es/plugins 
建立後分别授抒權限
chmod 777 /elk/es/data/
#建立相應目錄用于容器外挂
es/data : 存放es的資料檔案目錄
es/plugins : 存放es的插件安裝目錄,比如ik分詞器

           

docker run:

docker run -p 9200:9200 -p 9300:9300 --name elasticsearch -e "discovery.type=single-node" -e "cluster.name=elasticsearch" -v /elk/es/plugins:/usr/share/elasticsearch/plugins -v /elk/es/data:/usr/share/elasticsearch/data  -d elasticsearch:6.4.0


--name ${容器名} #指定容器名
-e | --env ${環境變量} #用來設定環境變量和指定值
     single-node 表示建立單節點服務。
     叢集名為 elasticsearch
-v  進行目錄挂載到縮主機。
           
Docker 安裝部署中間件 ElasticSearch 和 Kibana

通過curl http://localhost:9200 通路或浏覽器輸入http://ip:9200;  我的ip:172.16.244.140 主控端IP。

Docker 安裝部署中間件 ElasticSearch 和 Kibana

檢視容器(elasticsearch)IP位址,此ip位址不是固定的,随着每次容器啟動動态配置設定的。

#檢視容器IP位址
docker inspect --format='{{.NetworkSettings.IPAddress}}' elasticsearch
           
Docker 安裝部署中間件 ElasticSearch 和 Kibana

同樣也可以使用容器IP位址進行通路:(不能在浏覽器中通路,隻能在主控端中)

Docker 安裝部署中間件 ElasticSearch 和 Kibana

注:如果浏覽器不能通路,查下防火牆。

firewall-cmd --zone=public --add-port=9200/tcp --permanent

firewall-cmd --reload

三、安裝kibana

docker run --name kibana -p 5601:5601 --link elasticsearch:es -e "elasticsearch.host=http://es:9200" -d kibana:6.4.0

--link 容器名:别名 #通過link 可以讓kibana容器通過es這個别名連接配接到elasticsearch這個容器上,進而實作通訊通路。
           

在浏覽中輸入http://ip:5601 進行通路。 正常情況下是可以正常通路并連接配接上es,但我這就偏偏不盡人意。好事多磨。

Docker 安裝部署中間件 ElasticSearch 和 Kibana

出現邊接失敗的情況。我們來看下日志;

docker logs -f kibana
           
Docker 安裝部署中間件 ElasticSearch 和 Kibana

連接配接不上elasticsearch

進入到容器中排查原因:

docker exec -it kibana bash
           

ping es ;可以看到ping成功,但并不能代表可以通路。使用curl http://es:9200看下情況。

Docker 安裝部署中間件 ElasticSearch 和 Kibana

可以看到産生No route to host 不能路由到主機。

Docker 安裝部署中間件 ElasticSearch 和 Kibana

懷疑hosts沒有進行域名映射?經檢視 /etc/下的hosts已經有映射了。那使用ip試試?

Docker 安裝部署中間件 ElasticSearch 和 Kibana
Docker 安裝部署中間件 ElasticSearch 和 Kibana

使用ip也不行。

後經多方找資料問題在docker0 這個橋接網卡上。

在主控端非容器中,按順序執行下面指令。(但似乎這段對docker-compose不啟作用,單獨啟服務可以,compose就不行)

nmcli connection modify docker0 connection.zone trusted
systemctl stop NetworkManager.service
firewall-cmd --permanent --zone=trusted --change-interface=docker0
systemctl start NetworkManager.service
nmcli connection modify docker0 connection.zone trusted
systemctl restart docker.service
           

執行上面指令前:

Docker 安裝部署中間件 ElasticSearch 和 Kibana

執行指令後:經對比少了ipv6的部份。應該不是ipv6的問題吧?

Docker 安裝部署中間件 ElasticSearch 和 Kibana

經過上面的指令後:終于可以看到了。

Docker 安裝部署中間件 ElasticSearch 和 Kibana

查通路,好像是說centos8 上面的确是有這個問題發生,需要禁用防火牆: systemctl stop firewalld.service  且重新開機docker服務

systemctl restart docker

https://stackoverflow.com/questions/59867733/kibana-couldnt-estabilish-connection-to-elasticsearch-inside-docker-compose

Docker 安裝部署中間件 ElasticSearch 和 Kibana

三、安裝IK分詞器(非必選,後面裝也行,這個是插件)

下載下傳對應版本的ik分詞器,

https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.4.0/elasticsearch-analysis-ik-6.4.0.zip

下載下傳好之後 考到 /elk/es/plugins 下,建一個ik檔案夾。

Docker 安裝部署中間件 ElasticSearch 和 Kibana

進行解壓縮即可。

Docker 安裝部署中間件 ElasticSearch 和 Kibana

OK裝好之後,重新開機elasticsearch容器。

然後使用postman驗證下分詞器是否OK。

Docker 安裝部署中間件 ElasticSearch 和 Kibana

附:如果使用docker-compose 來啟動的。仍出現No route to Host 。則嘗試關防火牆。

systemctl stop firewalld.service    #停止防火牆

systemctl restart docker                #重起docker 

docker-compose -f  xxxx.yml up -d   #重新運作容器

又或者

firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=172.17.0.0/16 accept' && firewall-cmd --reload