故障轉(zhuǎn)移
當(dāng)一個ES集群中只有一個節(jié)點時,就會出現(xiàn)單點故障問題(沒有備份冗余),我們只需要再啟用一個節(jié)點就可以避免這個問題
我們只需要按照單臺部署的方式再啟用一個ES,再配置文件中修改cluster.name和第一個ES節(jié)點相同(ES集群安裝),啟動ES,他就會自動加入到ES集群中.
當(dāng)節(jié)點加入到集群中時,會自動生成和主分片數(shù)對應(yīng)的副分片數(shù),一個主分片對應(yīng)一個副分片,這樣當(dāng)集群中有某個節(jié)點出問題時,數(shù)據(jù)依舊能夠正常運轉(zhuǎn)。
當(dāng)?shù)诙€節(jié)點加入到集群后,3個 副本分片 將會分配到這個節(jié)點上——每個主分片對應(yīng)一個副本分片。 這意味著當(dāng)集群內(nèi)任何一個節(jié)點出現(xiàn)問題時,我們的數(shù)據(jù)都完好無損。
所有新近被索引的文檔都將會保存在主分片上,然后被并行的復(fù)制到對應(yīng)的副本分片上。這就保證了我們既可以從主分片又可以從副本分片上獲得文檔。
cluster-health 現(xiàn)在展示的狀態(tài)為 green ,這表示所有6個分片(包括3個主分片和3個副本分片)都在正常運行。
{
"cluster_name":"elasticsearch",
"status":"green",
"timed_out":false,
"number_of_nodes":2,
"number_of_data_nodes":2,
"active_primary_shards":3,
"active_shards":6,
"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
}
我們的集群現(xiàn)在不僅僅是正常運行的,并且還處于 始終可用 的狀態(tài)。
水平擴(kuò)容
為了應(yīng)對集群的負(fù)載壓力,有時,我們需要對集群進(jìn)行水平擴(kuò)容,再向集群中添加一個節(jié)點
具體的添加操作方法,參考ES集群安裝,按相同的配置再啟用一臺ES節(jié)點就行了,配置相同的cluster.name和不同的節(jié)點名稱就行了,這樣,我們的集群就出現(xiàn)了三個節(jié)點
這樣集群為了均衡數(shù)據(jù),會從節(jié)點一和節(jié)點二分別遷移一個分片去節(jié)點三,這樣每個節(jié)點都有2個分片了。
這樣每個節(jié)點的硬件資源將被更少的分片所使用,每個分片的性能將有所提升。
分片是一個功能完整的搜索引擎,它擁有使用一個節(jié)點上的所有資源的能力。 我們這個擁有6個分片(3個主分片和3個副本分片)的索引可以最大擴(kuò)容到6個節(jié)點,每個節(jié)點上存在一個分片,并且每個分片擁有所在節(jié)點的全部資源。
理論上來說, 目前我們擁有三個主分片,三個副本分片。如果需要擴(kuò)容,目前只能擴(kuò)容到6個節(jié)點,如果我們想要擴(kuò)容到6個以上的話,我們可以提升我們的副本分片的數(shù)量。
主分片的數(shù)目在索引創(chuàng)建時就已經(jīng)確定了下來。實際上,這個數(shù)目定義了這個索引能夠 存儲 的最大數(shù)據(jù)量。(實際大小取決于你的數(shù)據(jù)、硬件和使用場景。) 但是,讀操作——搜索和返回數(shù)據(jù)——可以同時被主分片 或 副本分片所處理,所以當(dāng)你擁有越多的副本分片時,也將擁有越高的吞吐量。
比如:
PUT /INDEX/_settings
{
"number_of_replicas" : 2
}
這樣,將分片數(shù)量提升至2,則相當(dāng)于每個主分片對應(yīng)2個副本分片,則總分片數(shù)量就為9個,這樣就能擴(kuò)容到6個以上的節(jié)點了,通過這樣提升ES的性能
但是如果不打算擴(kuò)容,只是單獨增加索引的分片的話,是不建議這么多的,因為ES中索引的分片是需要分配ES節(jié)點的資源的,如果分片過多,而資源還是原來的那些,則會導(dǎo)致性能出現(xiàn)下滑,但是如果副本分片變多的話,則提高了數(shù)據(jù)的冗余,這樣的話,我們的數(shù)據(jù)出現(xiàn)丟失的可能性也更小了
如果這個時候有一個節(jié)點突然掉線了(比如我們擁有三個節(jié)點),如果掉線的是主節(jié)點的話,剩下的兩個節(jié)點會進(jìn)行選舉主節(jié)點,當(dāng)其中一個節(jié)點獲得超過50%的選票時,主節(jié)點選舉完畢,主節(jié)點出現(xiàn)時會將掉線節(jié)點中分片的副本分片提升為主分片進(jìn)行數(shù)據(jù)恢復(fù),此時如果掉線節(jié)點恢復(fù)重新加入到集群中,則,會重新進(jìn)行分配副本分片。如果掉線的不是主節(jié)點,這通過主節(jié)點進(jìn)行同樣的操作。