Elasticsearch的主節(jié)點(diǎn)選舉機(jī)制是通過Zen Discovery和Unicast Discovery兩個(gè)插件來實(shí)現(xiàn)的。
Zen Discovery插件是Elasticsearch的默認(rèn)插件,它使用一種基于選舉的機(jī)制來選舉主節(jié)點(diǎn)。當(dāng)一個(gè)節(jié)點(diǎn)啟動(dòng)時(shí),它會(huì)發(fā)送一個(gè)廣播消息(也稱為ping)到網(wǎng)絡(luò)中的其他節(jié)點(diǎn),并等待其他節(jié)點(diǎn)的響應(yīng)。如果其他節(jié)點(diǎn)沒有響應(yīng),則該節(jié)點(diǎn)自己成為主節(jié)點(diǎn)。如果其他節(jié)點(diǎn)響應(yīng)并且它們的版本比當(dāng)前節(jié)點(diǎn)的版本高,那么當(dāng)前節(jié)點(diǎn)會(huì)自動(dòng)將自己設(shè)置為從節(jié)點(diǎn),并加入到其他節(jié)點(diǎn)的集群中。如果其他節(jié)點(diǎn)響應(yīng)并且它們的版本與當(dāng)前節(jié)點(diǎn)的版本相同,那么會(huì)比較節(jié)點(diǎn)的唯一標(biāo)識(shí)符(UUID),根據(jù)UUID的大小來決定主節(jié)點(diǎn)的選舉結(jié)果。
Unicast Discovery插件是另一種可選的插件,它允許在配置文件中指定要連接的節(jié)點(diǎn)的IP地址。當(dāng)節(jié)點(diǎn)啟動(dòng)時(shí),它會(huì)嘗試連接配置文件中指定的節(jié)點(diǎn),并等待其他節(jié)點(diǎn)的響應(yīng)。如果其他節(jié)點(diǎn)沒有響應(yīng),則該節(jié)點(diǎn)自己成為主節(jié)點(diǎn)。如果其他節(jié)點(diǎn)響應(yīng)并且它們的版本比當(dāng)前節(jié)點(diǎn)的版本高,那么當(dāng)前節(jié)點(diǎn)會(huì)自動(dòng)將自己設(shè)置為從節(jié)點(diǎn),并加入到其他節(jié)點(diǎn)的集群中。如果其他節(jié)點(diǎn)響應(yīng)并且它們的版本與當(dāng)前節(jié)點(diǎn)的版本相同,那么會(huì)比較節(jié)點(diǎn)的唯一標(biāo)識(shí)符(UUID),根據(jù)UUID的大小來決定主節(jié)點(diǎn)的選舉結(jié)果。
總結(jié)起來,Elasticsearch的主節(jié)點(diǎn)選舉機(jī)制是基于選舉的,根據(jù)節(jié)點(diǎn)的版本和唯一標(biāo)識(shí)符來決定主節(jié)點(diǎn)的選舉結(jié)果。