Elasticsearch 概念理解
- 2019 年 12 月 12 日
- 筆記
官方文檔地址
Filebeat:
https://www.elastic.co/cn/products/beats/filebeat
https://www.elastic.co/guide/en/beats/filebeat/7.1/index.html
Logstash:
https://www.elastic.co/cn/products/logstash
https://www.elastic.co/guide/en/logstash/7.1/index.html
Kibana:
https://www.elastic.co/cn/products/kibana
https://www.elastic.co/guide/en/kibana/7.1/index.html
Elasticsearch:
https://www.elastic.co/cn/products/elasticsearch
https://www.elastic.co/guide/en/elasticsearch/reference/7.1/index.html
Elastic中文社區:
https://elasticsearch.cn/
客戶端節點
當主節點和數據節點配置都設置為false的時候,該節點只能處理路由請求,處理搜索,分發索引操作等,從本質上來說該客戶節點表現為智慧負載平衡器。
獨立的客戶端節點在一個比較大的集群中是非常有用的,他協調主節點和數據節點,客戶端節點加入集群可以得到集群的狀態,根據集群的狀態可以直接路由請求。
數據節點
數據節點主要是存儲索引數據的節點,主要對文檔進行增刪改查操作,聚合操作等。數據節點對cpu,記憶體,io要求較高,
在優化的時候需要監控數據節點的狀態,當資源不夠的時候,需要在集群中添加新的節點。
主資格節點說明
主資格節點的主要職責是和集群操作相關的內容,如創建或刪除索引,跟蹤哪些節點是群集的一部分,並決定哪些分片分配給相關的節點。
穩定的主節點對集群的健康是非常重要的。默認情況下任何一個集群中的節點都有可能被選為主節點。
索引數據和搜索查詢等操作會佔用大量的cpu,記憶體,io資源,為了確保一個集群的穩定,分離主節點和數據節點是一個比較好的選擇。
索引(index)
在ES中,索引是一組文檔的集合(就是一個日誌),一個索引是一些有類似特徵的文檔的集合,索引是有幾分相似屬性的一系列文檔的集合,索引相對於關係型資料庫的庫。
分片(shard)
因為ES是個分散式的搜索引擎, 所以索引通常都會分解成不同部分, 而這些分布在不同節點的數據就是分片. ES自動管理和組織分片, 並在必要的時候對分片數據進行再平衡分配, 建索引、查詢等都是具體的shard在工作。shard 包括primary shard 和 replica shard,寫數據時,先寫到primary shard,然後,同步到replica shard,查詢時,primary 和 replica 充當相同的作用。
replica shard 可以有多份,也可以沒有,replica shard的存在有兩個作用,一是容災,如果primary shard 掛了,數據也不會丟失,集群仍然能正常工作;二是提高性能,因為replica 和 primary shard 都能處理查詢。
當數據量較大時,索引的存儲空間需求超出單個節點磁碟容量的限制,或者出現單個節點處理速度較慢。為了解決這些問題,ElasticSearch將索引中的數據進行切分成多個分片(shard),每個分片存儲這個索引的一部分數據,分布在不同節點上。當需要查詢索引時,ElasticSearch將查詢發送到每個相關分片,之後將查詢結果合併,這個過程對ElasticSearch應用來說是透明的,用戶感知不到分片的存在。
類型(TYPE)
在一個索引中,可以定義一個或多個類型。類型是一個邏輯類別還是分區完全取決於你。通常情況下,一個類型被定於成具有一組共同欄位的文檔。如ttlsa運維生成時間所有的數據存入在一個單一的名為logstash-ttlsa的索引中,類型相對於關係型資料庫的表。其中,一個index可以定義多個type,但一般使用習慣僅配一個type。(7.x版本中已經剔除了type)
副本(replica)
ES默認為一個索引創建5個主分片, 並分別為其創建一個副本分片. 也就是說每個索引都由5個主分片成本, 而每個主分片都相應的有一個copy.在實際情況下,索引存儲的數據可能超過單個節點的硬體限制。如一個十億文檔需1TB空間可能不適合存儲在單個節點的磁碟上,或者從單個節點搜索請求太慢了。為了解決這個問題,elasticsearch提供將索引分成多個分片的功能。當在創建索引時,可以定義想要分片的數量。每一個分片就是一個全功能的獨立的索引,可以位於集群中任何節點上。
分片的兩個最主要原因:
- 水平分割擴展,增大存儲量
- 分散式並行跨分片操作,提高性能和吞吐量
分散式分片的機制和搜索請求的文檔如何匯總完全是有elasticsearch控制的,這些對用戶而言是透明的。
網路問題等等其它問題可以在任何時候不期而至,為了健壯性,強烈建議要有一個故障切換機制,無論何種故障以防止分片或者節點不可用。
為此,elasticsearch讓我們將索引分片複製一份或多份,稱之為分片副本或副本。
其實,分片全稱是主分片,簡稱為分片。主分片是相對於副本來說的,副本是對主分片的一個或多個複製版本(或稱拷貝),這些複製版本(拷貝)可以稱為複製分片,可以直接稱之為副本。當主分片丟失時,集群可以將一個副本升級為新的主分片。
文檔(document)
一個文檔是一個可以建立索引的基本單元。文檔是用JSON表示的,這是一種無處不在的互聯網數據交換格式。類比關係資料庫里的一行記錄(record),document 是 Elasticsearch 里的一個 JSON 對象,包括零個或多個field。 文檔是資訊的基本單元,可以被索引的。文檔是以JSON格式表現的。
在類型中,可以根據需求存儲多個文檔。
雖然一個文檔在物理上位於一個索引,實際上一個文檔必須在一個索引內被索引和分配一個類型。
文檔相對於關係型資料庫的列。
mapping
類比關係型資料庫中的 schema 概念,mapping 定義了 index 中的 type。mapping 可以顯示的定義,也可以在 document 被索引時自動生成,如果有新的 field,Elasticsearch 會自動推測出 field 的type並加到mapping中。
Elastic 和 關係型資料庫 概念對比
ElasticSearch | RDBMS |
|---|---|
索引(index) | 資料庫(database) |
類型(type) | 表(table) |
文檔(document) | 行(row) |
欄位(field) | 列(column) |
映射(mapping) | 表結構(schema) |
全文索引 | 索引 |
查詢DSL | SQL |
GET | select |
PUT/POST | update |
DELETE | delete |

