介紹
elasticsearch
集群的搭建教程很多见秤。網(wǎng)上一搜都是砂竖,但是真椿,搭建不難。更重要的是明白集群原理乎澄,性能以及運(yùn)維知識(shí)點(diǎn)突硝。所以,本文將從這些點(diǎn)著重介紹三圆。
配置參數(shù)詳解
在elasticsearch
配置文件中有以下這些參數(shù)狞换,將逐一介紹(其實(shí)配置文件中英文描述已經(jīng)非常清楚):
cluster.name
集群名,自定義集群名舟肉,默認(rèn)為elasticsearch修噪,建議修改,因?yàn)榈桶姹径嗖ツJ较峦痪W(wǎng)段下相同集群名會(huì)自動(dòng)加入同一集群路媚,如生產(chǎn)環(huán)境這樣易造成數(shù)據(jù)運(yùn)維紊亂黄琼。node.name
節(jié)點(diǎn)名,同一集群下要求每個(gè)節(jié)點(diǎn)的節(jié)點(diǎn)名不一致整慎,起到區(qū)分節(jié)點(diǎn)和辨認(rèn)節(jié)點(diǎn)作用node.master
是否為主節(jié)點(diǎn)脏款,選項(xiàng)為true或false,當(dāng)為true時(shí)在集群啟動(dòng)時(shí)該節(jié)點(diǎn)為主節(jié)點(diǎn)裤园,在宕機(jī)或任務(wù)掛掉之后會(huì)選舉新的主節(jié)點(diǎn)撤师,恢復(fù)后該節(jié)點(diǎn)依然為主節(jié)點(diǎn)node.data
是否處理數(shù)據(jù),選項(xiàng)為true或false拧揽。負(fù)責(zé)數(shù)據(jù)的相關(guān)操作path.data
默認(rèn)數(shù)據(jù)路徑剃盾,可用逗號(hào)分隔多個(gè)路徑path.logs
默認(rèn)日志路徑bootstrap.mlockall
內(nèi)存鎖,選項(xiàng)為true或false淤袜,用來確保用戶在es-jvm中設(shè)置的ES_HEAP_SIZE
參數(shù)內(nèi)存可以使用一半以上而又不溢出network.host
對(duì)外暴露的host痒谴,0.0.0.0
時(shí)暴露給外網(wǎng)http.port
對(duì)外訪問的端口號(hào),默認(rèn)為9200
铡羡,所以外界訪問該節(jié)點(diǎn)一般為http://ip:9200/
transport.tcp.port
集群間通信的端口號(hào)积蔚,默認(rèn)為9300
discovery.zen.ping.unicast.hosts
集群的ip集合,可指定端口烦周,默認(rèn)為9300
尽爆,如["192.168.1.101","192.168.1.102"]
discovery.zen.minimum_master_nodes
最少的主節(jié)點(diǎn)個(gè)數(shù),為了防止腦裂读慎,最好設(shè)置為(總結(jié)點(diǎn)數(shù)/2 + 1)
個(gè)discovery.zen.ping_timeout
主節(jié)點(diǎn)選舉超時(shí)時(shí)間設(shè)置gateway.recover_after_nodes
值為n教翩,網(wǎng)關(guān)控制在n
個(gè)節(jié)點(diǎn)啟動(dòng)之后才恢復(fù)整個(gè)集群node.max_local_storage_nodes
值為n,一個(gè)系統(tǒng)中最多啟用節(jié)點(diǎn)個(gè)數(shù)為n
action.destructive_requires_name
選項(xiàng)為true或false贪壳,刪除indices是否需要現(xiàn)實(shí)名字
理解主節(jié)點(diǎn)饱亿、副節(jié)點(diǎn)、分片與復(fù)制分片
關(guān)系
起初創(chuàng)建節(jié)點(diǎn)與分片的關(guān)系,設(shè)置shards=2,replicas=1
解析
node-master
主節(jié)點(diǎn)
集群中用于元數(shù)據(jù)(metadata)的請(qǐng)求處理彪笼,比如確定分片位置钻注,索引的新增、刪除請(qǐng)求分配等node
包括client node
和data node
1. `client node` node.master=true,node.data=false 用于轉(zhuǎn)發(fā)請(qǐng)求配猫,起到平衡負(fù)載的作用
2. `data node` node.master=flase,node.data=true
> 節(jié)點(diǎn)上保存了數(shù)據(jù)分片幅恋。它負(fù)責(zé)數(shù)據(jù)相關(guān)操作,比如分片的 CRUD泵肄,以及搜索和整合操作捆交。這些操作都比較消耗 CPU、內(nèi)存和 I/O 資源
shards
分片
在設(shè)置索引時(shí)默認(rèn)(5)或自己設(shè)置的分片數(shù)量腐巢,即indices(1)--shards(n)品追,而每插入一條數(shù)據(jù)都會(huì)在唯一主分片中,即Document(n)--shards(1)replicas
復(fù)制分片
同樣在設(shè)置索引時(shí)會(huì)默認(rèn)(1)或自定義復(fù)制分片數(shù)量冯丙,該數(shù)量對(duì)應(yīng)關(guān)系為每個(gè)主分片對(duì)應(yīng)的復(fù)制分片肉瓦,即shards(1)--replicas(n)
要點(diǎn)
- 當(dāng)集群健康狀態(tài)為
yello
表示存在復(fù)制分片未被分配(unassigned)到節(jié)點(diǎn)中(或者分配的復(fù)制節(jié)點(diǎn)個(gè)數(shù)少于設(shè)置的個(gè)數(shù)),這時(shí)如果硬件有故障將無法找回?cái)?shù)據(jù)。 - 在同一個(gè)節(jié)點(diǎn)上既保存原始數(shù)據(jù)又保存副本是沒有意義的胃惜,因?yàn)橐坏┦チ四莻€(gè)節(jié)點(diǎn)泞莉,我們也將丟失該節(jié)點(diǎn)上的所有副本數(shù)據(jù)。
- 主分片數(shù)量一般是在建立索引時(shí)就固定的船殉,一般是不作修改的鲫趁,如果減少分片數(shù)量意味著數(shù)據(jù)將要丟失
- 復(fù)制分片一定意義上可以起到負(fù)載的功能,提高數(shù)據(jù)的冗余量利虫。但如果只是在相同節(jié)點(diǎn)數(shù)目的集群上增加更多的副本分片并不能提高性能挨厚,因?yàn)槊總€(gè)分片從節(jié)點(diǎn)上獲得的資源會(huì)變少。 你需要增加更多的硬件資源來提升吞吐量
節(jié)點(diǎn)與分片模型
同樣設(shè)置shards=2,replicas=1
分布式文檔存儲(chǔ)的關(guān)系原理
這個(gè)由于在官網(wǎng)指南中寫的很清楚了列吼,直接貼出章節(jié)幽崩。
分布式文檔存儲(chǔ)
集群搭建
配置集群
修改配置文件
# vi /etc/elasticsearch/elasticsearch.yml
# 統(tǒng)一的集群名
cluster.name: syncwt-es
# 當(dāng)前節(jié)點(diǎn)名
node.name: syncwt-es-node-1
# 對(duì)外暴露端口使外網(wǎng)訪問
network.host: 0.0.0.0
# 對(duì)外暴露端口
http.port: 9200
# ...還有很多可以設(shè)置苦始,這些是基礎(chǔ)的寞钥。具體看上面的配置參數(shù)說明
重啟并查看集群健康狀態(tài):
# sudo systemctl start elasticsearch.service
# curl -XGET 'http://localhost:9200/_cat/health?v'
集群可視化插件安裝elasticsearch-head
# cd ${elasticsearch_HOME}
# ./plugin install mobz/elasticsearch-head
頁面訪問效果(單節(jié)點(diǎn)):
http://119.29.248.199:9200/_plugin/head/
注意
- 集群中es的版本應(yīng)保持一致,最好內(nèi)網(wǎng)部署陌选,外網(wǎng)不是很穩(wěn)定理郑。
- 可用容器(如docker)封裝統(tǒng)一部署集群各節(jié)點(diǎn)以保持配置一致性
- 可在一臺(tái)機(jī)器上運(yùn)行多個(gè)節(jié)點(diǎn)來構(gòu)建集群,只是性能會(huì)和機(jī)器配置相關(guān)
總結(jié)
- 集群中節(jié)點(diǎn)選型策略咨油。node-data節(jié)點(diǎn)(隨著數(shù)據(jù)增加而增加)您炉,note-client(隨著查詢壓力而增加)節(jié)點(diǎn)
- 集群節(jié)點(diǎn)數(shù)量上升時(shí),多關(guān)注配置參數(shù)役电,如
gateway.recover_after_nodes
等赚爵,會(huì)帶來很多效率的提高 - 當(dāng)集群數(shù)量較大時(shí),建議橫向擴(kuò)展集群。單純?cè)黾觘s節(jié)點(diǎn)的內(nèi)存和CPU不會(huì)有很大提升冀膝,建議多增加節(jié)點(diǎn)