【ELK】【docker】6.Elasticsearch 集群啟動多節點 + 解決ES節點集群狀態為yellow


本章其實是ELK第二章的插入章節。

本章ES集群的多節點是docker啟動在同一個虛擬機上

=====================================================================================

ELK系列的示例中,啟動的是單個的ES節點。

 系列文章:

【ELK】【docker】【elasticsearch】1. 使用Docker和Elasticsearch+ kibana 5.6.9 搭建全文本搜索引擎應用 集群,安裝ik分詞器

【ELK】【docker】【elasticsearch】2.使用elasticSearch+kibana+logstash+ik分詞器+pinyin分詞器+繁簡體轉化分詞器  6.5.4 啟動   ELK+logstash概念描述

【ELK】【ElasticSearch】3.es入門基本操作

【ELK】4.spring boot 2.X集成ES spring-data-ES 進行CRUD操作 完整版+kibana管理ES的index操作

【ELK】5.spring boot日志集成ELK,搭建日志系統

【ELK】【docker】6.Elasticsearch 集群啟動多節點 + 解決ES節點集群狀態為yellow

【ELK】7. elasticsearch linux上操作es命令詳解

======================================================================================

一、單節點的問題描述----ES集群狀態可能為yellow

單節點ES使用起來,沒有多大的問題。

但有一點無法避免,即index創建多分片和多備份的話,會顯示ES節點狀態為yellow。

1.ES集群健康狀態為yellow

那,即圖中所描述的:備份雖然設置為1  但是每個分片的備份其實都沒有成功。因為沒有另一個節點可以提供備份的場所。

最終導致的結果就是ES集群的健康狀態為yellow。

而如果本ES節點掛掉,則數據完全丟失。

 

2.spring boot對接ES或spring boot日志對接ELK多數默認index的replicas為1

在前幾章中,其實都是使用的ES單節點提供服務。

而spring boot中如果不是用自定義settings設置index的shards和replicas,那默認的index的shards=5,而replicas=1。

同樣spring boot日志logback對接logstash,搭建ELK分布式日志系統,默認的index的shards=5,而replicas=1。

如果依舊啟動的是單節點Nodes=1,那么就會導致

 

 

二、ElasticSearch 6.5.4版本啟動集群

本章其實是ELK系列文章 第二章的插入章節。

1.前提步驟就是拉取鏡像  和  跳轉第一步一樣

2.先分別啟動es1和es2

docker run  -d --name es1  -p 9200:9200 -p 9300:9300 --restart=always  elasticsearch:6.5.4
docker run  -d --name es2  -p 9201:9201 -p 9301:9301 --restart=always  elasticsearch:6.5.4

注意:和啟動單節點少了個參數 

-e "discovery.type=single-node"

 

3.分別查詢es1和es2容器的IP

docker inspect es1

docker inspect es2

 

4.分別進入es1和es2容器中,修改elasticsearch.yml文件內容

elasticsearch.yml文件路徑

cd   /usr/share/elasticsearch/config

 

文件原內容

 

分別修改elasticsearch.yml文件內容為:

cluster.name: "docker-cluster"
network.host: 0.0.0.0

# minimum_master_nodes need to be explicitly set when bound on a public IP
# set to 1 to allow single node clusters
# Details: https://github.com/elastic/elasticsearch/pull/17288
discovery.zen.minimum_master_nodes: 2
discovery.zen.ping.unicast.hosts: ["127.0.0.1","172.17.0.2:9200","172.17.0.7:9201","172.17.0.2:9300","172.17.0.7:9301"]

注釋1:

  discovery.zen.minimum_master_nodes: 2  是保證集群中的節點知道集群中有N個master資格的節點

注釋2:

  discovery.zen.ping.unicast.hosts: ["127.0.0.1","172.17.0.2:9200","172.17.0.7:9201","172.17.0.2:9300","172.17.0.7:9301"]  標明集群初始的master節點列表

  需要注意的是,這里的IP是docker容器自己的IP,而不是宿主機的IP。【在同一台虛擬機上啟動兩個es實例的情況下】

注釋3:

  修改內容的說明可以參考elasticsearch.yml配置文件詳解或者【ELK】【docker】【elasticsearch】1. 使用Docker和Elasticsearch+ kibana 5.6.9 搭建全文本搜索引擎應用 集群,安裝ik分詞器

  這兩篇中都有詳細說明

注釋4:

  es1的配置文件和es2配置文件內容都修改為上面的內容即可

 

5.分別推出容器,分別重啟es1和es2容器實例

exit
docker restart  es1   es2

 

6.分別觀察es1的啟動日志和es2的啟動日志,並查看集群健康狀態

docker logs -f es1

其中一個節點啟動后,一定會報錯,提示目前集群中只有一個master節點但是配置文件中 need 2  需要兩個。

 

 而這種情況一直會持續到 另一個節點也啟動成功,並且成功加入集群后, 集群的健康狀態 會由  yellow變成 Green.

 

查看另外一個節點的啟動日志,可以發現兩個節點已經互相發現

 

 

 

 

當然,最后可以通過請求查看集群狀態

curl '192.168.92.130:9200/_cluster/health?pretty'

 

 

 

 

7.如果成功安裝kibana了,也可以查看ES的節點狀況

kibana的安裝以及ELK整個環境的搭建 還是得回到ELK系列文件的第二章節

 

不僅上面這張圖可以反映   創建集群成功后,一個Index分別設置shards=5  replicas=1 后,集群的health=Green

下面這張圖更能清晰的看出來

 

 

 

8.最后要注意的

其實在第6步看到日志以后,就可以確定ES的集群啟動成功了。

第7步只是在kibana上直觀的可以感受到集群的分布。

最后需要注意的一點,就是es1和es2如果需要應用於業務,其實還需要將ik分詞器,pinyin分詞器,繁簡體轉換等插件分別安裝完成。

這個安裝的步驟,還是回到ELK系列 第二章去繼續看吧。

 

==========================================================================結束=====================================================================

 


免責聲明!

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



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