ElasticSearch集群
ES為什么要實(shí)現(xiàn)集群
在單臺(tái)ES服務(wù)器節(jié)點(diǎn)上,隨著業(yè)務(wù)量的發(fā)展索引文件慢慢增多,會(huì)影響到效率和內(nèi)存存儲(chǔ)問題等。
如果使用ES集群,會(huì)將單臺(tái)服務(wù)器節(jié)點(diǎn)的索引文件使用分片技術(shù),分布式的存放在多個(gè)不同的物理機(jī)器上,從而可以實(shí)現(xiàn)高可用、容錯(cuò)性等。
es核心存放的是索引。
什么是分片技術(shù)
將數(shù)據(jù)拆分成多臺(tái)節(jié)點(diǎn)進(jìn)行存放。
ES是如何解決高并發(fā)
ES是一個(gè)分布式全文檢索框架,隱藏了復(fù)雜的處理機(jī)制,內(nèi)部使用 分片機(jī)制、集群發(fā)現(xiàn)、分片負(fù)載均衡請(qǐng)求路由。
Shards 分片:代表索引分片,es可以把一個(gè)完整的索引分成多個(gè)分片,這樣的好處是可以把一個(gè)大的索引拆分成多個(gè),分布到不同的節(jié)點(diǎn)上。構(gòu)成分布式搜索。分片的數(shù)量只能在索引創(chuàng)建前指定,并且索引創(chuàng)建后不能更改。
Replicas分片:代表索引副本,es可以設(shè)置多個(gè)索引的副本,副本的作用一是提高系統(tǒng)的容錯(cuò)性,當(dāng)某個(gè)節(jié)點(diǎn)某個(gè)分片損壞或丟失時(shí)可以從副本中恢復(fù)。二是提高es的查詢效率,es會(huì)自動(dòng)對(duì)搜索請(qǐng)求進(jìn)行負(fù)載均衡。
ES集群核心原理分析
1、每個(gè)索引會(huì)被分成多個(gè)分片shards進(jìn)行存儲(chǔ),默認(rèn)創(chuàng)建索引是分配5個(gè)分片進(jìn)行存儲(chǔ),每個(gè)分片都會(huì)分布式部署在多個(gè)不同的節(jié)點(diǎn)上進(jìn)行部署,該分片成為primary shards 主分片。
查看索引分片信息
http://192.168.0.110:9200/myindex/_settings
結(jié)果為:
{
"myindex":{
"settings":{
"index":{
"creation_date":"1559964953858",
"number_of_shards":"5", //主分片
"number_of_replicas":"1", //副分片
"uuid":"PPLrlfo6Re2z6KMrVfaMWg",
"version":{
"created":"6040399"
},
"provided_name":"myindex"
}
}
}
}
在ES 中每一個(gè)主的分片都有一個(gè)對(duì)應(yīng)的副分片,這里總共由10分片。
注意:索引的主分片數(shù)量定義好后,不能被修改。主分片數(shù)量一旦定義好之后就不能修改,但是副分片的數(shù)量是可以修改的。

2、每一個(gè)主分片為了實(shí)現(xiàn)高可用,都會(huì)有自己對(duì)應(yīng)的備分片,主分片對(duì)應(yīng)的備分片不能存放同一臺(tái)服務(wù)器上,主分片可以和其他備分片存放在同一個(gè)node節(jié)點(diǎn)上。
單臺(tái) ES 服務(wù)器中是沒有副分片的。
documnet routing(數(shù)據(jù)路由)
當(dāng)客戶端發(fā)起創(chuàng)建document的時(shí)候,es需要確定這個(gè)document放在該index哪個(gè)shard上。這個(gè)過程就是數(shù)據(jù)路由。
路由算法:shard = hash(routing) % number_of_primary_shards
如果number_of_primary_shards在查詢的時(shí)候取余發(fā)生的變化,無(wú)法獲取到該數(shù)據(jù)

ES是相關(guān)名詞
Cluster:代表一個(gè)集群,集群中有多個(gè)節(jié)點(diǎn),其中有一個(gè)為主節(jié)點(diǎn),這個(gè)主節(jié)點(diǎn)是可以通過選舉產(chǎn)生的,主從節(jié)點(diǎn)是對(duì)于集群內(nèi)部來說的。es的一個(gè)概念就是去中心化,字面上理解就是無(wú)中心節(jié)點(diǎn),這是對(duì)于集群外部來說的,因?yàn)閺耐獠縼砜磂s集群,在邏輯上是個(gè)整體,你與任何一個(gè)節(jié)點(diǎn)的通信和與整個(gè)es集群通信是等價(jià)的。
Shards:代表索引分片,es可以把一個(gè)完整的索引分成多個(gè)分片,這樣的好處是可以把一個(gè)大的索引拆分成多個(gè),分布到不同的節(jié)點(diǎn)上。構(gòu)成分布式搜索。分片的數(shù)量只能在索引創(chuàng)建前指定,并且索引創(chuàng)建后不能更改。 replicas:代表索引副本,es可以設(shè)置多個(gè)索引的副本,副本的作用一是提高系統(tǒng)的容錯(cuò)性,當(dāng)某個(gè)節(jié)點(diǎn)某個(gè)分片損壞或丟失時(shí)可以從副本中恢復(fù)。二是提高es的查詢效率,es會(huì)自動(dòng)對(duì)搜索請(qǐng)求進(jìn)行負(fù)載均衡。
Recovery:代表數(shù)據(jù)恢復(fù)或叫數(shù)據(jù)重新分布,es在有節(jié)點(diǎn)加入或退出時(shí)會(huì)根據(jù)機(jī)器的負(fù)載對(duì)索引分片進(jìn)行重新分配,掛掉的節(jié)點(diǎn)重新啟動(dòng)時(shí)也會(huì)進(jìn)行數(shù)據(jù)恢復(fù)。
ES集群環(huán)境搭建
服務(wù)集群配置
修改配置文件
目錄:/usr/local/es/elasticsearch-6.4.3/config
vi elasticsearch.yml
cluster.name: myes ###保證三臺(tái)服務(wù)器節(jié)點(diǎn)集群名稱相同
node.name: node-1 #### 每個(gè)節(jié)點(diǎn)名稱不一樣 其他兩臺(tái)為node-1 ,node-2
network.host: 192.168.212.110 #### 實(shí)際服務(wù)器ip地址
discovery.zen.ping.unicast.hosts: ["192.168.0.105", "192.168.0.108","192.168.212.110"]##多個(gè)服務(wù)集群ip
discovery.zen.minimum_master_nodes: 1
關(guān)閉防火墻 systemctl stop firewalld.service
默認(rèn)底層開啟9300 集群
驗(yàn)證集群效果
http://192.168.0.110:9200/_cat/nodes?pretty

注意克隆data文件會(huì)導(dǎo)致數(shù)據(jù)不同步
報(bào)該錯(cuò)誤解決辦法
failed to send join request to master
因?yàn)榭寺?dǎo)致data文件也克隆呢,直接清除每臺(tái)服務(wù)器data文件,data目錄:/usr/local/es/elasticsearch-6.4.3/data 。
效果如下,第一張圖是添加索引,第二張是查詢索引。注意它們的 ip 不一致,這樣說明集群環(huán)境搭建成功了。



浙公網(wǎng)安備 33010602011771號(hào)