es的分佈式思想跟如今流行的不少開發技術的分佈式一個道理。一個es 搜索服務做爲一個集羣,集羣中存在不少節點,一個節點就是一個搜索服務器。這麼多節點中,會按照必定的機制推舉出一個 master節點,該節點負責任務的分配,新增節點刪除節點等等行爲。服務器
先講分片。 引用:elasticsearch
分片(shard) 是 工做單元(worker unit) 底層的一員,它只負責保存索引中全部數據的一小片。而且它自身也是一個完整的搜索引擎。咱們的文檔存儲而且被索引在分片中,可是咱們的程序並不會直接與它們通訊。取而代之,它們直 接與索引進行通訊的。分佈式
在 elasticsearch 中,分片用來分配集羣中的數據。把分片想象成一個數據的容器。數據被存儲在分片中,而後分片又被分配在集羣的節點上。當你的集羣擴展或者縮小時,elasticsearch 會自動的在節點之間遷移分配分片,以便集羣保持均衡。搜索引擎
分片分爲 主分片(primary shard) 以及 從分片(replica shard) 兩種。在你的索引中,每個文檔都屬於一個主分片,因此具體有多少主分片取決於你的索引能存儲多少數據。索引
雖然理論上主分片對存儲多少數據是沒有限制的。分片的最大數量徹底取決於你的實際情況:硬件的配置、文檔的大小和複雜度、如何索引和查詢你的文檔,以及你指望的響應時間。開發
從分片只是主分片的一個副本,它用於提供數據的冗餘副本,在硬件故障時提供數據保護,同時服務於搜索和檢索這種只讀請求。文檔
索引中的主分片的數量在索引建立後就固定下來了,可是從分片的數量能夠隨時改變。it
在我本地新搭建的es服務上建立一個名爲twitter的索引。該索引的功能type有一個叫 tweet。 經過以前安裝的es-head訪問http://localhost:9200/_plugin/head/ ,能夠看到分片信息:ast
由於沒有修改配置,es中一個索引默認有一組從分片,五個主分片。集羣
在觀察
一個索引有五個從分片沒有被分配,五個已經被分配。緣由是如今只有一臺服務器,主分片都已經被自動分配到當前的服務器上,而後從分片的目的是爲了備份數據,作故障轉移,因此不會再本服務器上分配。這種狀況下,es的集羣健康值就是。若是此時,在本服務器上(或者其餘服務器),啓動一個 cluster.name 與以前啓動的es 實例的cluster.name 相同的es實例,這五個沒有被分配的從分配就會被自動分配過去。
結果以下:健康值也變成了
以上就是es集羣 分佈式 容錯轉移的介紹。
集羣健康值 status: