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

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

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

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

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

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