elasticsearch集群搭建及參數(shù)詳解

介紹

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í)在集群?jiǎn)?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,用來(lái)確保用戶在es-jvm中設(shè)置的ES_HEAP_SIZE參數(shù)內(nèi)存可以使用一半以上而又不溢出

  • network.host
    對(duì)外暴露的host,0.0.0.0時(shí)暴露給外網(wǎng)

  • http.port
    對(duì)外訪問(wèn)的端口號(hào),默認(rèn)為9200,所以外界訪問(wèn)該節(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

elasticsearch節(jié)點(diǎn)與分片的關(guān)系圖.png

解析

  • node-master主節(jié)點(diǎn)
    集群中用于元數(shù)據(jù)(metadata)的請(qǐng)求處理,比如確定分片位置,索引的新增、刪除請(qǐng)求分配等

  • node
    包括client nodedata 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)

  1. 當(dāng)集群健康狀態(tài)為yello表示存在復(fù)制分片未被分配(unassigned)到節(jié)點(diǎn)中(或者分配的復(fù)制節(jié)點(diǎn)個(gè)數(shù)少于設(shè)置的個(gè)數(shù)),這時(shí)如果硬件有故障將無(wú)法找回?cái)?shù)據(jù)。
  2. 在同一個(gè)節(jié)點(diǎn)上既保存原始數(shù)據(jù)又保存副本是沒有意義的,因?yàn)橐坏┦チ四莻€(gè)節(jié)點(diǎn),我們也將丟失該節(jié)點(diǎn)上的所有副本數(shù)據(jù)。
  3. 主分片數(shù)量一般是在建立索引時(shí)就固定的,一般是不作修改的,如果減少分片數(shù)量意味著數(shù)據(jù)將要丟失
  4. 復(fù)制分片一定意義上可以起到負(fù)載的功能,提高數(shù)據(jù)的冗余量。但如果只是在相同節(jié)點(diǎn)數(shù)目的集群上增加更多的副本分片并不能提高性能,因?yàn)槊總€(gè)分片從節(jié)點(diǎn)上獲得的資源會(huì)變少。 你需要增加更多的硬件資源來(lái)提升吞吐量

節(jié)點(diǎn)與分片模型

同樣設(shè)置shards=2,replicas=1

elasticsearch節(jié)點(diǎn)與分片可分配關(guān)系圖.png

elasticsearch節(jié)點(diǎn)與分片正常存儲(chǔ)關(guān)系圖.png

分布式文檔存儲(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)訪問(wèn)
network.host: 0.0.0.0
# 對(duì)外暴露端口
http.port: 9200
# ...還有很多可以設(shè)置,這些是基礎(chǔ)的。具體看上面的配置參數(shù)說(shuō)明

重啟并查看集群健康狀態(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

頁(yè)面訪問(wèn)效果(單節(jié)點(diǎn)):
http://119.29.248.199:9200/_plugin/head/

elasticsearch_head效果圖.png

注意

  1. 集群中es的版本應(yīng)保持一致,最好內(nèi)網(wǎng)部署,外網(wǎng)不是很穩(wěn)定。
  2. 可用容器(如docker)封裝統(tǒng)一部署集群各節(jié)點(diǎn)以保持配置一致性
  3. 可在一臺(tái)機(jī)器上運(yùn)行多個(gè)節(jié)點(diǎn)來(lái)構(gòu)建集群,只是性能會(huì)和機(jī)器配置相關(guān)

總結(jié)

  1. 集群中節(jié)點(diǎn)選型策略。node-data節(jié)點(diǎn)(隨著數(shù)據(jù)增加而增加),note-client(隨著查詢壓力而增加)節(jié)點(diǎn)
  2. 集群節(jié)點(diǎn)數(shù)量上升時(shí),多關(guān)注配置參數(shù),如gateway.recover_after_nodes等,會(huì)帶來(lái)很多效率的提高
  3. 當(dāng)集群數(shù)量較大時(shí),建議橫向擴(kuò)展集群。單純?cè)黾觘s節(jié)點(diǎn)的內(nèi)存和CPU不會(huì)有很大提升,建議多增加節(jié)點(diǎn)

參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容