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