本章其實是ELK第二章的插入章節。
本章ES集群的多節點是docker啟動在同一個虛擬機上
=====================================================================================
ELK系列的示例中,啟動的是單個的ES節點。
系列文章:
【ELK】【docker】【elasticsearch】1. 使用Docker和Elasticsearch+ kibana 5.6.9 搭建全文本搜索引擎應用 集群,安裝ik分詞器
【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系列 第二章去繼續看吧。
==========================================================================結束=====================================================================