通往集群大門
?可?(High Availability)是分布式系統(tǒng)架構(gòu)設(shè)計(jì)中必須考慮的因素之?,它通常是指,通過設(shè)計(jì)減少系統(tǒng)不能提供服務(wù)的時(shí)間。如果系統(tǒng)每運(yùn)?100個(gè)時(shí)間單位,會(huì)有1個(gè)時(shí)間單位?法提供服務(wù),我們說系統(tǒng)的可?性是99%。
將流量均衡的分布在不同的節(jié)點(diǎn)上,每個(gè)節(jié)點(diǎn)都可以處理?部分負(fù)載,并且可以在節(jié)點(diǎn)之間動(dòng)態(tài)分配負(fù)載,以實(shí)現(xiàn)平衡。
將流量分發(fā)到不同機(jī)器,充分利?多機(jī)器多CPU,從串?計(jì)算到并?計(jì)算提?系統(tǒng)性能。
es集群的基本核心概念
?個(gè) Elasticsearch 集群由?個(gè)或多個(gè)節(jié)點(diǎn)(Node)組成,每個(gè)集群都有?個(gè)共同的集群名稱作為標(biāo)識(shí)。
?個(gè) Elasticsearch 實(shí)例即?個(gè) Node,?臺(tái)機(jī)器可以有多個(gè)實(shí)例,正常使?下每個(gè)實(shí)例應(yīng)該會(huì)部署在不同的機(jī)器上。Elasticsearch 的配置?件中可以通過 node.master、node.data 來設(shè)置節(jié)點(diǎn)類型。
node.master:表示節(jié)點(diǎn)是否具有成為主節(jié)點(diǎn)的資格
true代表的是有資格競選主節(jié)點(diǎn)
false代表的是沒有資格競選主節(jié)點(diǎn)
node.data:表示節(jié)點(diǎn)是否存儲(chǔ)數(shù)據(jù)
主節(jié)點(diǎn)+數(shù)據(jù)節(jié)點(diǎn)(master+data)
節(jié)點(diǎn)即有成為主節(jié)點(diǎn)的資格,?存儲(chǔ)數(shù)據(jù)
node.master: true
node.data: true
數(shù)據(jù)節(jié)點(diǎn)(data)
節(jié)點(diǎn)沒有成為主節(jié)點(diǎn)的資格,不參與選舉,只會(huì)存儲(chǔ)數(shù)據(jù)
node.master: false
node.data: true
客戶端節(jié)點(diǎn)(client)
不會(huì)成為主節(jié)點(diǎn),也不會(huì)存儲(chǔ)數(shù)據(jù),主要是針對海量請求的時(shí)候可以進(jìn)?負(fù)載均衡
node.master: false
node.data: false
每個(gè)索引有?個(gè)或多個(gè)分?,每個(gè)分?存儲(chǔ)不同的數(shù)據(jù)。分?可分為主分?( primary shard)和復(fù)制分?(replica shard),復(fù)制分?是主分?的拷?。默認(rèn)每個(gè)主分?有?個(gè)復(fù)制分?,?個(gè)索引的復(fù)制分?的數(shù)量可以動(dòng)態(tài)地調(diào)整,復(fù)制分?從不與它的主分?在同?個(gè)節(jié)點(diǎn)上
手把手教你搭建es集群
搭建步驟
拷?elasticsearch-7.2.0安裝包3份,分別命名es-a, es-b,es-c。
分別修改elasticsearch.yml?件。
分別啟動(dòng)a ,b ,c 三個(gè)節(jié)點(diǎn)。
打開瀏覽器輸?:http://localhost:9200/_cat/health?v ,如果返回的node.total是3,代表集群搭建成功
配置elasticsearch.yml?件
#集群名稱
cluster.name: cyz-es
#節(jié)點(diǎn)名稱
node.name: node-1
#是不是有資格主節(jié)點(diǎn)
node.master: true
#是否存儲(chǔ)數(shù)據(jù)
node.data: true
#最?集群節(jié)點(diǎn)數(shù)
node.max_local_storage_nodes: 3
#?關(guān)地址
network.host: 0.0.0.0
#端?
http.port: 9200
#內(nèi)部節(jié)點(diǎn)之間溝通端?
transport.tcp.port: 9300
#es7.x 之后新增的配置,寫?候選主節(jié)點(diǎn)的設(shè)備地址,在開啟服務(wù)后可以被選為主節(jié)點(diǎn)
discovery.seed_hosts: ["localhost:9300","localhost:9400","localhost:9500"]
#es7.x 之后新增的配置,初始化?個(gè)新的集群時(shí)需要此配置來選舉master
cluster.initial_master_nodes: ["node-1", "node-2","node-3"]
#數(shù)據(jù)和存儲(chǔ)路徑
path.data: /usr/local/es/data
path.logs: /usr/local/es/logs
node.name: node-2
http.port: 9201
transport.tcp.port: 9400
node.name: node-3
http.port: 9202
transport.tcp.port: 9500
kibana
- 打開配置 kibana.yml,添加elasticsearch.hosts: ["http://localhost:9200","http://localhost:9201","http://localhost:9202"]
- 啟動(dòng)kibana,可以看到集群信息
es集群索引分片管理
介紹
- 分?(shard):因?yàn)镋S是個(gè)分布式的搜索引擎, 所以索引通常都會(huì)分解成不同部分, ?這些分布在不同節(jié)點(diǎn)的數(shù)據(jù)就是分?. ES?動(dòng)管理和組織分?, 并在必要的時(shí)候?qū)Ψ?數(shù)據(jù)進(jìn)?再平衡分配, 所以?戶基本上不?擔(dān)?分?的處理細(xì)節(jié)。
- 副本(replica):ES默認(rèn)為?個(gè)索引創(chuàng)建1個(gè)主分?, 并分別為其創(chuàng)建?個(gè)副本分?. 也就是說每個(gè)索引都由1個(gè)主分?成本, ?每個(gè)主分?都相應(yīng)的有?個(gè)copy.
- Elastic search7.x之后,如果不指定索引分?,默認(rèn)會(huì)創(chuàng)建1個(gè)主分?和?個(gè)副分?,?7.x版本之前的?如6.x版本,默認(rèn)是5個(gè)主分?
創(chuàng)建索引(不指定分?數(shù)量)
PUT nba
{"mappings":{"properties":{"birthDay":{"type":"date"},"birthDayStr":
{"type":"keyword"},"age":{"type":"integer"},"code":
{"type":"text"},"country":{"type":"text"},"countryEn":
{"type":"text"},"displayAffiliation":{"type":"text"},"displayName":
{"type":"text"},"displayNameEn":{"type":"text"},"draft":
{"type":"long"},"heightValue":{"type":"float"},"jerseyNo":
{"type":"text"},"playYear":{"type":"long"},"playerId":
{"type":"keyword"},"position":{"type":"text"},"schoolType":
{"type":"text"},"teamCity":{"type":"text"},"teamCityEn":
{"type":"text"},"teamConference":{"type":"keyword"},"teamConferenceEn":
{"type":"keyword"},"teamName":{"type":"keyword"},"teamNameEn":
{"type":"keyword"},"weight":{"type":"text"}}}}
創(chuàng)建索引(指定分片數(shù)量)
"settings": {
"number_of_shards": 3,
"number_of_replicas": 1
},
PUT nba
{"settings":{"number_of_shards":3,"number_of_replicas":1},"mappings":
{"properties":{"birthDay":{"type":"date"},"birthDayStr":
{"type":"keyword"},"age":{"type":"integer"},"code":
{"type":"text"},"country":{"type":"text"},"countryEn":
{"type":"text"},"displayAffiliation":{"type":"text"},"displayName":
{"type":"text"},"displayNameEn":{"type":"text"},"draft":
{"type":"long"},"heightValue":{"type":"float"},"jerseyNo":
{"type":"text"},"playYear":{"type":"long"},"playerId":
{"type":"keyword"},"position":{"type":"text"},"schoolType":
{"type":"text"},"teamCity":{"type":"text"},"teamCityEn":
{"type":"text"},"teamConference":
{"type":"keyword"},"teamConferenceEn":{"type":"keyword"},"teamName":
{"type":"keyword"},"teamNameEn":{"type":"keyword"},"weight":
{"type":"text"}}}}
索引分片分配
- 分?分配到哪個(gè)節(jié)點(diǎn)是由ES?動(dòng)管理的,如果某個(gè)節(jié)點(diǎn)掛了,那分??會(huì)重新分配到別的節(jié)點(diǎn)上。
- 在單機(jī)中,節(jié)點(diǎn)沒有副分?,因?yàn)橹挥?個(gè)節(jié)點(diǎn)沒必要?成副分?,?個(gè)節(jié)點(diǎn)掛點(diǎn),副分?也會(huì)掛掉,完全是單故障,沒有存在的意義。
- 在集群中,同個(gè)分?它的主分?不會(huì)和它的副分?在同?個(gè)節(jié)點(diǎn)上,因?yàn)橹鞣?和副分?在同個(gè)節(jié)點(diǎn),節(jié)點(diǎn)掛了,副分?和主分機(jī)?樣是掛了,不要把所有的雞蛋都放在同個(gè)籃??。
- 可以?動(dòng)移動(dòng)分?,?如把某個(gè)分?移動(dòng)從節(jié)點(diǎn)1移動(dòng)到節(jié)點(diǎn)2。
- 創(chuàng)建索引時(shí)指定的主分?數(shù)以后是?法修改的,所以主分?數(shù)的數(shù)量要根據(jù)項(xiàng)?決定,如果真的要增加主分?只能重建索引了。副分?數(shù)以后是可以修改的。
手動(dòng)移動(dòng)分片
POST /_cluster/reroute
{
"commands": [
{
"move": {
"index": "nba",
"shard": 2,
"from_node": "node-1",
"to_node": "node-3"
}
}
]
}
修改副分?數(shù)量
PUT /nba/_settings
{
"number_of_replicas": 2
}
玩轉(zhuǎn)es集群健康管理
查看集群的健康狀態(tài)
- http://127.0.0.1:9200/_cat/health?v
- URL返回了集群的健康信息。
- 返回信息

status :集群的狀態(tài),red紅表示集群不可?,有故障。yellow?表示集群不可靠但可?,?般單節(jié)點(diǎn)時(shí)就是此狀態(tài)。green正常狀態(tài),表示集群?切正常。
node.total :節(jié)點(diǎn)數(shù),這?是3,表示該集群有三個(gè)節(jié)點(diǎn)。
node.data :數(shù)據(jù)節(jié)點(diǎn)數(shù),存儲(chǔ)數(shù)據(jù)的節(jié)點(diǎn)數(shù),這?是3。
shards :表示我們把數(shù)據(jù)分成多少塊存儲(chǔ)。
pri :主分?數(shù),primary shards
active_shards_percent :激活的分?百分?,這?可以理解為加載的數(shù)據(jù)分?數(shù),只有加載所有的分?數(shù),集群才算正常啟動(dòng),在啟動(dòng)的過程中,如果我們不斷刷新這個(gè)??,我們會(huì)發(fā)現(xiàn)這個(gè)百分?會(huì)不斷加?。
查看集群的索引數(shù)
- http://127.0.0.1:9200/_cat/indices?v
- URL返回了集群中的所有索引信息,我們可以看到所有索引的健康情況和具體信息。
- 返回信息

health : 索引健康,green為正常,yellow表示索引不可靠(單節(jié)點(diǎn)),red索引不可?。與
集群健康狀態(tài)?致。
status : 狀態(tài)表明索引是否打開,只索引是可以關(guān)閉的。
index : 索引的名稱
uuid : 索引內(nèi)部分配的名稱,索引的唯?表示
pri : 集群的主分?數(shù)量
docs.count : 這?統(tǒng)計(jì)了?檔的數(shù)量。
docs.deleted : 這?統(tǒng)計(jì)了被刪除?檔的數(shù)量。
store.size : 索引的存儲(chǔ)的總?cè)萘?br>pri.store.size : 主分別的容量
查看磁盤的分配情況
- http://192.168.1.128:9200/_cat/allocation?v
- URL返回了每個(gè)節(jié)點(diǎn)的磁盤情況。
- 返回信息

shards : 該節(jié)點(diǎn)的分?數(shù)量
disk.indices : 該節(jié)點(diǎn)中所有索引在該磁盤所點(diǎn)的空間。
disk.used : 該節(jié)點(diǎn)已經(jīng)使?的磁盤容量
disk.avail : 該節(jié)點(diǎn)可以使?的磁盤容量
disk.total : 該節(jié)點(diǎn)的磁盤容量
查看集群的節(jié)點(diǎn)信息
- http://127.0.0.1:9200/_cat/nodes?v
- URL返回了集群中各節(jié)點(diǎn)的情況。
- 返回信息

ip : ip地址
heap.percent : 堆內(nèi)存使?情況
ram.percent : 運(yùn)?內(nèi)存使?情況
cpu : cpu使?情況
master : 是否是主節(jié)點(diǎn)
查看集群的其他信息
- http://127.0.0.1:9200/_cat

參考個(gè)人博客:http://www.sddzcyz.cn/