ES叢集
elasticsearch為什麼要叢集?叢集有什麼作⽤
-
⾼可⽤
⾼可⽤(High Availability)是分散式系統架構設計中必須考慮的因素之⼀,它通常是指,通過設
計減少系統不能提供服務的時間。如果系統每運⾏100個時間單位,會有1個時間單位⽆法提供服
務,我們說系統的可⽤性是99%。 -
負載均衡
將流量均衡的分佈在不同的節點上,每個節點都可以處理⼀部分負載,並且可以在節點之間動態分
配負載,以實現平衡。 -
⾼效能
將流量分發到不同機器,充分利⽤多機器多CPU,從串⾏計算到並⾏計算提⾼系統效能。
Elasticsearch 天生就是分散式的,會在後臺自動執行
- 分配文件到不同的容器 或 分片 中,文件可以儲存在一個或多個節點中
- 按叢集節點來均衡分配這些分片,從而對索引和搜尋過程進行負載均衡
- 複製每個分片以支援資料冗餘,從而防止硬體故障導致的資料丟失
- 將叢集中任一節點的請求路由到存有相關資料的節點
- 叢集擴容時無縫整合新節點,重新分配分片以便從離群節點恢復
ES在設計時就儘可能地遮蔽了分散式系統的複雜性,無需瞭解內部機制就可以使用ES。
es叢集的基本核⼼概念
Elasticsearch 的配置⽂件中可以通過 node.master、node.data 來
設定節點型別。
node.master:是否是主節點(是否有競選資格)
node.data:是否儲存資料,如果為true則為資料節點
每個索引有⼀個或多個分⽚,每個分⽚儲存不同的資料。分⽚可分為
- 主分⽚( primary shard)
- 複製分⽚(replica shard)
複製分⽚是主分⽚的拷⻉,可以分擔系統壓力、流量。預設每個主分⽚有⼀個複製分⽚,⼀個索引的複製分⽚的數量可以動態地調整,複製分⽚從不與它的主分⽚在同⼀個節點上。
搭建es叢集
1、拷⻉elasticsearch-7.2.0安裝包3份,分別命名es-a, es-b,es-c
2、分別修改配置⽂件elasticsearch.yml
#叢集名稱
cluster.name: my-application
#節點名稱
node.name: node-1
#是不是有資格主節點
node.master: true
#是否儲存資料
node.data: true
#最⼤叢集節點數
node.max_local_storage_nodes: 3
#⽹關地址,常配置為實際ip
network.host: 0.0.0.0
#端⼝
http.port: 9200
#內部節點之間溝通端⼝
transport.tcp.port: 9300
#es7.x 之後新增的配置,寫⼊候選主節點的裝置地址,在開啟服務後可以被選為主節點。此處在同一機器的不同埠模擬多個節點
discovery.seed_hosts: ["localhost:9200","localhost:9201","localhost:9202"]
#es7.x 之後新增的配置,初始化⼀個新的叢集時需要此配置來選舉master
cluster.initial_master_nodes: ["node-1", "node-2","node-3"]
#資料和儲存路徑
path.data: /Users/louis.chen/Documents/study/search/storage/a/data
path.logs: /Users/louis.chen/Documents/study/search/storage/a/logs
3、分別啟動a ,b ,c 三個節點
4、訪問 localhost:9200/_cat/health?v ,如果返回的node.total是3,代表叢集搭建成功
但這種方式看到的叢集資訊很抽象,可以在kibana的視覺化地檢視叢集資訊,且資訊更詳細。帶星號的是master節點。
先在kibana.yml中配置叢集節點
elasticsearch.hosts: ["http://localhost:9200","http://localhost:
9201","http://localhost:9202"]
啟動kibana,訪問localhost:5601 在monitor中即可看到es叢集的資訊
叢集的分片管理
分片是針對index而言的
分⽚(shard):因為ES是個分散式的搜尋引擎, 所以索引通常都會分解成不同部分, ⽽這些分佈在不同節點的資料就是分⽚. ES⾃動管理和組織分⽚, 並在必要的時候對分⽚資料進⾏再平衡分配, 所以⽤戶基本上不⽤擔⼼分⽚的處理細節。
副本(replica):ES預設為⼀個索引建立1個主分⽚, 並分別為其建立⼀個副本分⽚. 也就是說每個索引都由1個主分⽚成本, ⽽每個主分⽚都相應的有⼀個copy.
Elastic search7.x之後,如果不指定索引分⽚,預設會建立1個主分⽚和⼀個副分⽚,⽽7.x版本之前的⽐如6.x版本,預設是5個主分⽚
建立索引(指定分⽚數量)
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"},"t
修改副分⽚數量
PUT /nba/_settings
{
"number_of_replicas": 2
}
es叢集健康管理
1、檢視叢集的健康狀態
http://127.0.0.1:9200/_cat/health?v
- status :叢集的狀態,red紅表示叢集不可⽤,有故障。yellow⻩表示叢集不可靠但可⽤,⼀般單節點時就是此狀態。green正常狀態,表示叢集⼀切正常。
- node.total :節點數,這⾥是3,表示該叢集有三個節點。
- node.data :資料節點數,儲存資料的節點數,這⾥是3。
- shards :表示我們把資料分成多少塊儲存。
- pri :主分⽚數,primary shards
- active_shards_percent :啟用的分⽚百分⽐,這⾥可以理解為載入的資料分⽚數,只有載入所有的分⽚數,叢集才算正常啟動,在啟動的過程中,如果我們不斷重新整理這個⻚⾯,我們會發現這個百分⽐會不斷加⼤。
2、檢視叢集的索引數
http://127.0.0.1:9200/_cat/indices?v
返回了叢集中的所有索引資訊,我們可以看到所有索引的健康情況和具體資訊
- health : 索引健康,green為正常,yellow表示索引不可靠(單節點),red索引不可⽤。與叢集健康狀態⼀致。
- status : 狀態表明索引是否開啟,只索引是可以關閉的。
- index : 索引的名稱
- uuid : 索引內部分配的名稱,索引的唯⼀表示
- pri : 叢集的主分⽚數量
- docs.count : 這⾥統計了⽂檔的數量。
- docs.deleted : 這⾥統計了被刪除⽂檔的數量。
- store.size : 索引的儲存的總容量
- pri.store.size : 主分別的容量
3、檢視磁碟的分配情況
http://127.0.0.1:9200/_cat/allocation?v
返回每個節點的磁碟情況。
- shards : 該節點的分⽚數量
- disk.indices : 該節點中所有索引在該磁碟所點的空間。
- disk.used : 該節點已經使⽤的磁碟容量
- disk.avail : 該節點可以使⽤的磁碟容量
- disk.total : 該節點的磁碟容量
4、檢視叢集的節點資訊
http://127.0.0.1:9200/_cat/nodes?v
URL返回了叢集中各節點的情況。
- ip : ip地址
- heap.percent : 堆記憶體使⽤情況
- ram.percent : 運⾏記憶體使⽤情況
- cpu : cpu使⽤情況
- master : 是否是主節點
5、檢視叢集的其他資訊
http://127.0.0.1:9200/_cat
相關文章
- es 叢集配置推薦
- Elasticsearch(ES)叢集的搭建Elasticsearch
- 管理 ES 叢集:集常見的叢集部署方式
- 管理 ES 叢集:叢集與外部間的安全通訊
- 管理 ES 叢集:叢集內部間的安全通訊
- 管理 ES 叢集:如何對叢集進行容量規劃
- es 5.5.3叢集環境搭建
- 管理 ES 叢集:管叢集身份認證與使用者鑑權
- 管理 ES 叢集:分片設定及管理
- 教你在Kubernetes中快速部署ES叢集
- ES叢集構建(本人親測有效)
- 管理 ES 叢集:Hot & Warm 架構與 Shard Filtering架構Filter
- ES 25 - Elasticsearch生產叢集的配置建議Elasticsearch
- CentOS 7.4 下安裝 ES 6.5.1 搜尋叢集CentOS
- 開啟安全功能 ES 叢集就安全了嗎?
- ES 筆記二十八:配置跨叢集搜尋筆記
- ES 31 - 從0開始搭建Elasticsearch生產叢集Elasticsearch
- Zookeeper叢集 + Kafka叢集Kafka
- ES叢集搭建問題:memory locking requested for elasticsearch process but memory is not lockedElasticsearch
- ES 筆記三十一:分片與叢集的故障轉移筆記
- 搭建zookeeper叢集(偽叢集)
- ES 30 - Elasticsearch生產叢集的伺服器配置建議Elasticsearch伺服器
- zookeeper叢集及kafka叢集搭建Kafka
- Redis系列:搭建Redis叢集(叢集模式)Redis模式
- linux下搭建ZooKeeper叢集(偽叢集)Linux
- redis偽叢集配置Cluster叢集模式Redis模式
- 線上ES叢集引數配置引起的業務異常案例分析
- mysql通過kafka實現資料實時同步(三)——es叢集配置MySqlKafka
- redis叢集Redis
- ceph叢集
- redis 叢集Redis
- RabbitMQ叢集MQ
- 將Standard標準叢集修改為Flex叢集Flex
- 基於Dokcer搭建Redis叢集(主從叢集)Redis
- ES系列(二):基於多播的叢集發現實現原理解析
- docker下,極速搭建spark叢集(含hdfs叢集)DockerSpark
- 用Docker搭建RabbitMq的普通叢集和映象叢集DockerMQ
- MongoDB叢集同步MongoDB