?個 Elasticsearch 實例即?個 Node,?臺機器可以有多個實例,正常使?下每個實例應該會部署在不同的機器上。Elasticsearch 的配置?件中可以通過 node.master、node.data 來設置節點類型。
通往集群大門
?可?(High Availability)是分布式系統架構設計中必須考慮的因素之?,它通常是指,通過設計減少系統不能提供服務的時間。如果系統每運?100個時間單位,會有1個時間單位?法提供服務,我們說系統的可?性是99%。
將流量均衡的分布在不同的節點上,每個節點都可以處理?部分負載,并且可以在節點之間動態分配負載,以實現平衡。
將流量分發到不同機器,充分利?多機器多CPU,從串?計算到并?計算提?系統性能。
es集群的基本核心概念
?個 Elasticsearch 集群由?個或多個節點(Node)組成,每個集群都有?個共同的集群名稱作為標識。
?個 Elasticsearch 實例即?個 Node,?臺機器可以有多個實例,正常使?下每個實例應該會部署在不同的機器上。Elasticsearch 的配置?件中可以通過 node.master、node.data 來設置節點類型。
node.master:表示節點是否具有成為主節點的資格
true代表的是有資格競選主節點
false代表的是沒有資格競選主節點
node.data:表示節點是否存儲數據
主節點+數據節點(master+data)
節點即有成為主節點的資格,?存儲數據
node.master: true
node.data: true
數據節點(data)
節點沒有成為主節點的資格,不參與選舉,只會存儲數據
node.master: false
node.data: true
客戶端節點(client)
不會成為主節點,也不會存儲數據,主要是針對海量請求的時候可以進?負載均衡
node.master: false
node.data: false
每個索引有?個或多個分?,每個分?存儲不同的數據。分?可分為主分?( primary shard)和復制分?(replica shard),復制分?是主分?的拷?。默認每個主分?有?個復制分?,?個索引的復制分?的數量可以動態地調整,復制分?從不與它的主分?在同?個節點上
手把手教你搭建es集群
搭建步驟
拷?elasticsearch-7.2.0安裝包3份,分別命名es-a, es-b,es-c。
分別修改elasticsearch.yml?件。
分別啟動a ,b ,c 三個節點。
打開瀏覽器輸?:http://localhost:9200/_cat/health?v ,如果返回的node.total是3,代表集群搭建成功
配置elasticsearch.yml?件
#集群名稱
cluster.name: cyz-es
#節點名稱
node.name: node-1
#是不是有資格主節點
node.master: true
#是否存儲數據
node.data: true
#最?集群節點數
node.max_local_storage_nodes: 3
#?關地址
network.host: 0.0.0.0
#端?
http.port: 9200
#內部節點之間溝通端?
transport.tcp.port: 9300
#es7.x 之后新增的配置,寫?候選主節點的設備地址,在開啟服務后可以被選為主節點
discovery.seed_hosts: ["localhost:9300","localhost:9400","localhost:9500"]
#es7.x 之后新增的配置,初始化?個新的集群時需要此配置來選舉master
cluster.initial_master_nodes: ["node-1", "node-2","node-3"]
#數據和存儲路徑
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"]
- 啟動kibana,可以看到集群信息
es集群索引分片管理
介紹
- 分?(shard):因為ES是個分布式的搜索引擎, 所以索引通常都會分解成不同部分, ?這些分布在不同節點的數據就是分?. ES?動管理和組織分?, 并在必要的時候對分?數據進?再平衡分配, 所以?戶基本上不?擔?分?的處理細節。
- 副本(replica):ES默認為?個索引創建1個主分?, 并分別為其創建?個副本分?. 也就是說每個索引都由1個主分?成本, ?每個主分?都相應的有?個copy.
- Elastic search7.x之后,如果不指定索引分?,默認會創建1個主分?和?個副分?,?7.x版本之前的?如6.x版本,默認是5個主分?
創建索引(不指定分?數量)
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"}}}}
創建索引(指定分片數量)
"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"}}}}
索引分片分配
- 分?分配到哪個節點是由ES?動管理的,如果某個節點掛了,那分??會重新分配到別的節點上。
- 在單機中,節點沒有副分?,因為只有?個節點沒必要?成副分?,?個節點掛點,副分?也會掛掉,完全是單故障,沒有存在的意義。
- 在集群中,同個分?它的主分?不會和它的副分?在同?個節點上,因為主分?和副分?在同個節點,節點掛了,副分?和主分機?樣是掛了,不要把所有的雞蛋都放在同個籃??。
- 可以?動移動分?,?如把某個分?移動從節點1移動到節點2。
- 創建索引時指定的主分?數以后是?法修改的,所以主分?數的數量要根據項?決定,如果真的要增加主分?只能重建索引了。副分?數以后是可以修改的。
手動移動分片
POST /_cluster/reroute
{
"commands": [
{
"move": {
"index": "nba",
"shard": 2,
"from_node": "node-1",
"to_node": "node-3"
}
}
]
}
修改副分?數量
PUT /nba/_settings
{
"number_of_replicas": 2
}
玩轉es集群健康管理
查看集群的健康狀態
- http://127.0.0.1:9200/_cat/health?v
- URL返回了集群的健康信息。
- 返回信息

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

health : 索引健康,green為正常,yellow表示索引不可靠(單節點),red索引不可?。與
集群健康狀態?致。
status : 狀態表明索引是否打開,只索引是可以關閉的。
index : 索引的名稱
uuid : 索引內部分配的名稱,索引的唯?表示
pri : 集群的主分?數量
docs.count : 這?統計了?檔的數量。
docs.deleted : 這?統計了被刪除?檔的數量。
store.size : 索引的存儲的總容量
pri.store.size : 主分別的容量
查看磁盤的分配情況
- http://192.168.1.128:9200/_cat/allocation?v
- URL返回了每個節點的磁盤情況。
- 返回信息

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

ip : ip地址
heap.percent : 堆內存使?情況
ram.percent : 運?內存使?情況
cpu : cpu使?情況
master : 是否是主節點
查看集群的其他信息
- http://127.0.0.1:9200/_cat

參考個人博客:http://www.sddzcyz.cn/