更新時(shí)間:2023-07-24 來源:黑馬程序員 瀏覽量:
Elasticsearch使用Zookeeper或者內(nèi)置的Zen Discovery機(jī)制來實(shí)現(xiàn)主節(jié)點(diǎn)(master)選舉。在Elasticsearch中,一個集群中的節(jié)點(diǎn)被分為兩類:主節(jié)點(diǎn)(master-eligible nodes)和數(shù)據(jù)節(jié)點(diǎn)(data nodes)。主節(jié)點(diǎn)負(fù)責(zé)集群級別的管理任務(wù),例如索引創(chuàng)建、節(jié)點(diǎn)加入/退出等,而數(shù)據(jù)節(jié)點(diǎn)則負(fù)責(zé)存儲和處理數(shù)據(jù)。
主節(jié)點(diǎn)選舉的過程如下:
1.節(jié)點(diǎn)加入集群時(shí),它們會互相通信并形成一個臨時(shí)的選舉狀態(tài),其中每個節(jié)點(diǎn)都有一個稱為"node id"的唯一標(biāo)識符。
2.節(jié)點(diǎn)會通過選舉算法確定一個主節(jié)點(diǎn),并在選舉過程中更新自己的狀態(tài)。
3.如果有節(jié)點(diǎn)斷開連接或主節(jié)點(diǎn)失效,其余的節(jié)點(diǎn)會再次進(jìn)行選舉來選出新的主節(jié)點(diǎn)。
在下面的示例中,我們將使用Elasticsearch內(nèi)置的Zen Discovery機(jī)制來演示主節(jié)點(diǎn)選舉。請注意,為了運(yùn)行此示例,我們需要安裝Java和Elasticsearch。
1.首先,下載并安裝Elasticsearch:https://www.elastic.co/downloads/elasticsearch
2.啟動一個Elasticsearch實(shí)例(確保配置文件中的集群名稱相同,以便節(jié)點(diǎn)可以加入同一集群):
# 啟動第一個節(jié)點(diǎn),指定節(jié)點(diǎn)名稱為node1 ./bin/elasticsearch -E node.name=node1 -E cluster.initial_master_nodes=node1 -E cluster.name=my_cluster # 啟動第二個節(jié)點(diǎn),指定節(jié)點(diǎn)名稱為node2,加入集群的初始主節(jié)點(diǎn)為node1 ./bin/elasticsearch -E node.name=node2 -E cluster.initial_master_nodes=node1 -E cluster.name=my_cluster
3.在另一個終端窗口中,檢查集群狀態(tài):
# 查看集群健康狀態(tài) curl -XGET "http://localhost:9200/_cluster/health"
我們將看到類似以下輸出:
{ "cluster_name": "my_cluster", "status": "green", "timed_out": false, "number_of_nodes": 2, "number_of_data_nodes": 2, "active_primary_shards": 0, "active_shards": 0, "relocating_shards": 0, "initializing_shards": 0, "unassigned_shards": 0, "delayed_unassigned_shards": 0, "number_of_pending_tasks": 0, "number_of_in_flight_fetch": 0, "task_max_waiting_in_queue_millis": 0, "active_shards_percent_as_number": 100.0 }
在這個示例中,兩個節(jié)點(diǎn)(node1和node2)成功加入了同一個集群(my_cluster),其中node1被選為主節(jié)點(diǎn)。我們可以通過多次啟動和關(guān)閉節(jié)點(diǎn)來模擬主節(jié)點(diǎn)選舉的過程,并觀察集群狀態(tài)的變化。
請注意,實(shí)際生產(chǎn)環(huán)境中,通常會使用更復(fù)雜的設(shè)置來保證集群的高可用性和穩(wěn)定性,例如使用Zookeeper來協(xié)調(diào)主節(jié)點(diǎn)選舉過程。以上示例僅用于演示內(nèi)置的Zen Discovery機(jī)制的基本用法。