Elasticsearch是面向文檔型數(shù)據(jù)庫,一條數(shù)據(jù)在這里就是一個文檔。為了方便大家理解,我們將Elasticsearch里存儲文檔數(shù)據(jù)和關(guān)系型數(shù)據(jù)庫MySQL存儲數(shù)據(jù)的概念進(jìn)行一個類比
ES里的Index可以看做一個庫,而Types相當(dāng)于表,Documents則相當(dāng)于表的行。
這里Types的概念已經(jīng)被逐漸弱化,Elasticsearch?6.X中,一個index下已經(jīng)只能包含一個type,Elasticsearch?7.X中,?Type的概念已經(jīng)被刪除了。
1. 集群(Cluster)
1.1?集群簡介
分布式系統(tǒng)的可用性與擴(kuò)展性
高可用性
服務(wù)可用性一允許有節(jié)點(diǎn)停止服務(wù)
數(shù)據(jù)可用性-部分節(jié)點(diǎn)丟失,不會丟失數(shù)據(jù)
可擴(kuò)展性
請求量提升一數(shù)據(jù)的不斷增長(將數(shù)據(jù)分布到所有節(jié)點(diǎn)上)
Easticsearch?的分布式架構(gòu)的好處
存儲的水平擴(kuò)容
提高系統(tǒng)的可用性,部分節(jié)點(diǎn)停止服務(wù),整人集群的服務(wù)不受影響
Elasticsearch的分布式架構(gòu)
不同的集群通過不同的名字來區(qū)分,默認(rèn)名字“elasticsearch"
通過配置文件修改,或者在命令行中-E?cluster.name=cluster_name?進(jìn)行設(shè)定
一人集群可以有一人或者多人節(jié)點(diǎn)
一個集群就是由一個或多個服務(wù)器節(jié)點(diǎn)組織在一起,共同持有整個的數(shù)據(jù),并一起提供索引和搜索功能。
一個Elasticsearch集群有一個唯一的名字標(biāo)識,這個名字默認(rèn)就是”elasticsearch”。這個名字是重要的,因?yàn)橐粋€節(jié)點(diǎn)只能通過指定某個集群的名字,來加入這個集群。
1.1?集群健康狀態(tài)
#?獲取集群健康狀態(tài)
GET?_cluster/health
#?獲取集群健康狀態(tài),精確到索引
GET?_cluster/health?level=indices
#?獲取集群健康狀態(tài),精確到分片
GET?_cluster/health?level=shards
#?獲取集群健康狀態(tài),精確到某幾個索引
GET?/_cluster/health/kibana_sample_data_ecommerce,kibana_sample_data_flights
#?獲取集群健康狀態(tài),精確到某個索引的分片
GET?/_cluster/health/kibana_sample_data_flights?level=shards
{
"cluster_name" : "elasticsearch",
"status" : "green",
"timed_out" : false,
"number_of_nodes" : 1,
"number_of_data_nodes" : 1,
"active_primary_shards" : 12,
"active_shards" : 12,
"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.0
}
1.2?集群詳細(xì)信息
GET?_cluster/state
1.3?集群的統(tǒng)計(jì)信息
GET?_cluster/stats
返回結(jié)果包含集群、節(jié)點(diǎn)、索引的詳細(xì)統(tǒng)計(jì)信息。
1.3?集群的設(shè)置信息
GET?/_cluster/settings
#?包含默認(rèn)值設(shè)置
GET?/_cluster/settings?include_defaults=true
{
"persistent" : { },
"transient" : { }
}
2. 節(jié)點(diǎn)(Node)
2.1?節(jié)點(diǎn)簡介
節(jié)點(diǎn)是一個?Elasticsearch?的實(shí)例,本質(zhì)上就是一個JAVA進(jìn)程。
一臺機(jī)器上可以運(yùn)行多個Elasticsearch?進(jìn)程,但是生產(chǎn)環(huán)境一般建議一臺機(jī)器上只運(yùn)
行一個?Elasticsearch?實(shí)例。
每一個節(jié)點(diǎn)都有名字,通過配置文件配置,或者啟動時候-E?node.name=node1指定。
每一個節(jié)點(diǎn)在啟動之后,會分配一個?UID,保存在?data?目錄下。
集群中包含很多服務(wù)器,一個節(jié)點(diǎn)就是其中的一個服務(wù)器。作為集群的一部分,它存儲數(shù)據(jù),參與集群的索引和搜索功能。
一個節(jié)點(diǎn)也是由一個名字來標(biāo)識的,默認(rèn)情況下,這個名字是一個隨機(jī)的漫威漫畫角色的名字,這個名字會在啟動的時候賦予節(jié)點(diǎn)。這個名字對于管理工作來說挺重要的,因?yàn)樵谶@個管理過程中,你會去確定網(wǎng)絡(luò)中的哪些服務(wù)器對應(yīng)于Elasticsearch集群中的哪些節(jié)點(diǎn)。
一個節(jié)點(diǎn)可以通過配置集群名稱的方式來加入一個指定的集群。默認(rèn)情況下,每個節(jié)點(diǎn)都會被安排加入到一個叫做“elasticsearch”的集群中,這意味著,如果你在你的網(wǎng)絡(luò)中啟動了若干個節(jié)點(diǎn),并假定它們能夠相互發(fā)現(xiàn)彼此,它們將會自動地形成并加入到一個叫做“elasticsearch”的集群中。
節(jié)點(diǎn)類型 |
描述 |
Master-eligible?nodes? 和?Master?Node |
每個節(jié)點(diǎn)啟動后,默認(rèn)就是一個Master?eligible節(jié)點(diǎn),可以設(shè)置?node.master:false?禁止 Master-eligible節(jié)點(diǎn)可以參加選主流程,成為Master節(jié)點(diǎn) 當(dāng)?shù)谝粋€節(jié)點(diǎn)啟動時候,它會將自己選舉成Master節(jié)點(diǎn) 每個節(jié)點(diǎn)上都保存了集群的狀態(tài),只有Master節(jié)點(diǎn)才能修改集群的狀態(tài)信息 集群狀態(tài)(Cluster?State),維護(hù)了一個集群中,必要的信息 1)所有的節(jié)點(diǎn)信息 2)所有的索引和其相關(guān)的?Mapping?與?Setting?信息 3)分片的路由信息 任意節(jié)點(diǎn)都能修改信息會導(dǎo)致數(shù)據(jù)的不一致性 |
Data?Node? |
可以保存數(shù)據(jù)的節(jié)點(diǎn),叫做Data?Node。負(fù)責(zé)保存分片數(shù)據(jù)。在數(shù)據(jù)擴(kuò)展上起到了至關(guān)重要的作用 |
Coordinating?Node |
負(fù)責(zé)接受Client的請求,將請求分發(fā)到合適的節(jié)點(diǎn),最終把結(jié)果匯集到一起,每個節(jié)點(diǎn)默認(rèn)都起到了?Coordinating?Node的職貴 |
Hot?&?Warm?Node |
不同硬件配置的?Data?Node,用來實(shí)現(xiàn)?Hot?&?Warm?架構(gòu),降低集群部署的成本 |
Machine?Learning?Node |
負(fù)責(zé)跑?機(jī)器學(xué)習(xí)的Job,用來做異常檢測 |
Tribe?Node |
(5.3?開始使用?Cross?Cluster?Serarch)Tribe?Node?連接到不同的?Elasticsearch?集群,并且支持將這些集群當(dāng)成一個單獨(dú)的集群處理 |
2.2?節(jié)點(diǎn)基本信息
GET?_cat/nodes?v
GET?/_cat/nodes?v&h=id,ip,port,v,m
2.3?獲取單個節(jié)點(diǎn)的詳細(xì)信息
GET?/_nodes/node-1
3. 索引(Index)
一個索引就是一個擁有幾分相似特征的文檔的集合。比如說,你可以有一個客戶數(shù)據(jù)的索引,另一個產(chǎn)品目錄的索引,還有一個訂單數(shù)據(jù)的索引。一個索引由一個名字來標(biāo)識(必須全部是小寫字母),并且當(dāng)我們要對這個索引中的文檔進(jìn)行索引、搜索、更新和刪除的時候,都要使用到這個名字。在一個集群中,可以定義任意多的索引。
能搜索的數(shù)據(jù)必須索引,這樣的好處是可以提高查詢速度,比如:新華字典前面的目錄就是索引的意思,目錄可以提高查詢速度。
Elasticsearch索引的精髓:一切設(shè)計(jì)都是為了提高搜索的性能。
3.1?頁面查看索引信息
頁面查看索引信息,左側(cè)菜單打開StackManagement
包括隱藏的索引
3.2?命令查看索引信息
或者可以切換到開發(fā)工具視圖,用開發(fā)工具查詢
GET?/_cat/indices
3.3?查看kibana前綴的索引信息
GET?/_cat/indices/kibana*?v&s=index
3.4?查看狀態(tài)為健康的索引信息
GET?/_cat/indices?v&health=green
3.5?索引文檔數(shù)量排序
GET?/_cat/indices?v&s=docs.count:desc
3.6?查看單個索引的詳細(xì)信息
GET?kibana_sample_data_ecommerce
在這里會列出索引的別名、映射和設(shè)置信息。
3.7?查看索引的文檔總數(shù)
#查看索引的文檔總數(shù)
GET?kibana_sample_data_ecommerce/_count
{
"count"?:?4675,
"_shards"?:?{
"total"?:?1,
"successful"?:?1,
"skipped"?:?0,
"failed"?:?0
??}
}
3.8?查看索引的前10條文檔
#查看前10條文檔,了解文檔格式
POST?kibana_sample_data_ecommerce/_search
3.9?創(chuàng)建索引
PUT?myindex
3.10?刪除索引
DELETE?myindex
4.分片(Shards)
4.1?分片簡介
一個索引可以存儲超出單個節(jié)點(diǎn)硬件限制的大量數(shù)據(jù)。比如,一個具有10億文檔數(shù)據(jù)的索引占據(jù)1TB的磁盤空間,而任一節(jié)點(diǎn)都可能沒有這樣大的磁盤空間。或者單個節(jié)點(diǎn)處理搜索請求,響應(yīng)太慢。為了解決這個問題,Elasticsearch提供了將索引劃分成多份的能力,每一份就稱之為分片。
當(dāng)你創(chuàng)建一個索引的時候,你可以指定你想要的分片的數(shù)量。每個分片本身也是一個功能完善并且獨(dú)立的“索引”,這個“索引”可以被放置到集群中的任何節(jié)點(diǎn)上。
分片很重要,主要有兩方面的原因:
1)允許你水平分割?/?擴(kuò)展你的內(nèi)容容量。
2)允許你在分片之上進(jìn)行分布式的、并行的操作,進(jìn)而提高性能/吞吐量。
至于一個分片怎樣分布,它的文檔怎樣聚合和搜索請求,是完全由Elasticsearch管理的,對于作為用戶的你來說,這些都是透明的,無需過分關(guān)心。
被混淆的概念是,一個?Lucene?索引?我們在?Elasticsearch?稱作?分片?。?一個?Elasticsearch?索引?是分片的集合。?當(dāng)?Elasticsearch?在索引中搜索的時候,?他發(fā)送查詢到每一個屬于索引的分片(Lucene?索引),然后合并每個分片的結(jié)果到一個全局的結(jié)果集。
總之,每個索引可以被分成多個分片。一個索引也可以被復(fù)制0次(意思是沒有復(fù)制)或多次。一旦復(fù)制了,每個索引就有了主分片(作為復(fù)制源的原來的分片)和復(fù)制分片(主分片的拷貝)之別。分片和復(fù)制的數(shù)量可以在索引創(chuàng)建的時候指定。在索引創(chuàng)建之后,你可以在任何時候動態(tài)地改變復(fù)制的數(shù)量,但是你事后不能改變分片的數(shù)量。默認(rèn)情況下,Elasticsearch中的每個索引被分片1個主分片和1個復(fù)制,這意味著,如果你的集群中至少有兩個節(jié)點(diǎn),你的索引將會有1個主分片和另外1個復(fù)制分片(1個完全拷貝),這樣的話每個索引總共就有2個分片,我們需要根據(jù)索引需要確定分片個數(shù)。文章來源地址http://www.zghlxwxcb.cn/news/detail-781854.html
4.2?主分片(Primary?Shard?)和副本分片(Replica?Shard)
主分片,用以解決數(shù)據(jù)水平擴(kuò)展的問題。通過主分片,可以將數(shù)據(jù)分布到集群內(nèi)的所有節(jié)點(diǎn)之
一個分片是一人運(yùn)行的?Lucene?的實(shí)例
主分片數(shù)在索引創(chuàng)建時指定,后續(xù)不允許修改,除非?Reindex副本,用以解決數(shù)據(jù)高可用的問題。分片是主分片的拷貝。
副本分片數(shù),可以動態(tài)題調(diào)整。
增加副本數(shù),還可以在一定程度上提高服務(wù)的可用性(讀取的吞吐)。
4.3?分片設(shè)定策略
一個三節(jié)點(diǎn)的集群中,blogs?索引的分片分布情況,思考:增加一個節(jié)點(diǎn)或改大主分片數(shù)對系統(tǒng)的影響?
對于生產(chǎn)環(huán)境中分片的設(shè)定,需要提前做好容量規(guī)劃
分片數(shù)設(shè)置過小 |
1)后續(xù)無法增加節(jié)點(diǎn)實(shí)現(xiàn)水品擴(kuò)展 2)單個分片的數(shù)據(jù)量太大,導(dǎo)致數(shù)據(jù)重新分配耗時 |
分片數(shù)設(shè)置過大 |
1)影響搜索結(jié)果的相關(guān)性打分,影響統(tǒng)計(jì)結(jié)果的準(zhǔn)確性 2)單個節(jié)點(diǎn)上過多的分片,會導(dǎo)致資源浪費(fèi),同時也會影響性能 3)7.0開始,默認(rèn)主分片設(shè)置成1,解決了over-sharding的問題 |
GET?_cat/shards
GET?_cat/shards?h=index,shard,prirep,state,unassigned.reason
5.副本(Replicas)
在一個網(wǎng)絡(luò)?/?云的環(huán)境里,失敗隨時都可能發(fā)生,在某個分片/節(jié)點(diǎn)不知怎么的就處于離線狀態(tài),或者由于任何原因消失了,這種情況下,有一個故障轉(zhuǎn)移機(jī)制是非常有用并且是強(qiáng)烈推薦的。為此目的,Elasticsearch允許你創(chuàng)建分片的一份或多份拷貝,這些拷貝叫做復(fù)制分片(副本)。
復(fù)制分片之所以重要,有兩個主要原因:?
1)在分片/節(jié)點(diǎn)失敗的情況下,提供了高可用性。因?yàn)檫@個原因,注意到復(fù)制分片從不與原/主要(original/primary)分片置于同一節(jié)點(diǎn)上是非常重要的。
2)擴(kuò)展你的搜索量/吞吐量,因?yàn)樗阉骺梢栽谒械母北旧喜⑿羞\(yùn)行。文章來源:http://www.zghlxwxcb.cn/news/detail-781854.html
總之,每個索引可以被分成多個分片。一個索引也可以被復(fù)制0次(意思是沒有復(fù)制)或多次。一旦復(fù)制了,每個索引就有了主分片(作為復(fù)制源的原來的分片)和復(fù)制分片(主分片的拷貝)之別。分片和復(fù)制的數(shù)量可以在索引創(chuàng)建的時候指定。在索引創(chuàng)建之后,你可以在任何時候動態(tài)地改變復(fù)制的數(shù)量,但是你事后不能改變分片的數(shù)量。默認(rèn)情況下,Elasticsearch中的每個索引被分片1個主分片和1個復(fù)制,這意味著,如果你的集群中至少有兩個節(jié)點(diǎn),你的索引將會有1個主分片和另外1個復(fù)制分片(1個完全拷貝),這樣的話每個索引總共就有2個分片,我們需要根據(jù)索引需要確定分片個數(shù)。
到了這里,關(guān)于ElasticSearch的集群、節(jié)點(diǎn)、索引、分片和副本的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!