Elasticsearch有幾個核心概念,我們先了解一下,對後面的學習有很大的幫忙。
Elasticsearch是一個分佈式文檔(document oriented)存儲。與關係型數據庫數據保存到由行和列不同,Elasticsearch不將信息存儲爲列數據,而是存儲已序列化爲JSON文檔的複雜數據結構。當集羣中有多個Elasticsearch節點時,存儲的文檔分佈在整個集羣中,可以從任何節點立即訪問。它不僅僅是存儲,還會索引(index)每個文檔的內容使之可以被搜索。你可以對文檔進行索引、搜索、排序、過濾。這種理解數據的方式與以往完全不同,這也是Elasticsearch能夠執行復雜的全文搜索的原因之一。
集羣
可以將多臺ES服務器作爲一個集羣使用,可以在集羣中任意一臺節點上進行搜索。一個集羣有一個唯一的名字(可以配置文件中修改),節點啓動後通過集羣名稱來確定加入那個集羣(這裏使用了網絡廣播原理),同時單個集羣中只有一個節點會被選舉爲主節點(master)。
節點
節點是作爲集羣的一部分的單個服務器,存儲數據並參與集羣的索引和搜索功能。每個節點也有一個名稱,默認是啓動時隨機生成一個唯一標識符,建議啓動前指定一個名稱,以便後面的管理。
在ES中,節點主要有3種
1、Coordinating Node 處理請求的節點叫 Coordinating Node
路由到正確的節點,例如創建索引,就路由到master節點
所有節點默認都是Coordinating Node
通過將其他類型設置成False,使其變成Coordinating Node節點
2、Data Node 可以保存數據的節點,就叫Data Node節點
節點啓動後,默認就是數據節點,可以設置成node.data: false 禁止
Data Node保存分片數據,在數據擴展上起到至關重要的作用,(由Master Node決定如何把分片分發到數據節點上)
通過增加數據節點,可以解決數據水平擴展和解決數據單點的問題
3、Master Node 處理創建、刪除索引等請求、決定分片分到那個節點,維護並更新Cluster 狀態
Master 節點非常重要,在部署的時候需要考慮單點的問題
爲一個集羣設置多個Master節點/每一個節點只承擔Master單一角色
索引(indices)
有相似特性的文檔的集合,如:訂單數據索引,產品信息索引。這裏我們可以理解爲【Mysq的l數據庫】。
索引由一個名稱(必須全部是小寫)標識。在單個集羣中,可以定義任意多個索引。
文檔(document)
一個文檔是一個可被索引的基礎信息單元。文檔以JSON(Javascript Object Notation)格式來表示。如:一條商品信息可以是一個文檔,一筆訂單信息也是一個文檔。
索引、文檔 與Mysql對比理解
索引(indices)--> 數據庫
文檔(Document)--> Row 行
字段(Field)-->Columns 列 (Json中的Key)
分片
作用:用於解決文檔過多過大,單個節點存儲不了的問題,同時對太多太大的數據量會導致速度太慢。
一個分片(shard)是一個最小級別“工作單元(worker unit)”,分片保存了一個索引中所有數據的一部分。當索引創建完成的時候,主分片的數量就固定了,但是複製分片的數量可以隨時調整。
副本
可以簡單理解就是某個分片的一個複製版本(一個主分片可以有多個副本)。當分片/節點發生故障時提供高可用性,需要注意的是,副本分片永遠不會分配到複製它的原始/主分片所在的節點上。
以上是一些核心概念,下面我們會配置集羣和分片的操作