介紹
elasticsearch
集群的搭建教程很多。網(wǎng)上一搜都是,但是,搭建不難。更重要的是明白集群原理,性能以及運維知識點。所以,本文將從這些點著重介紹。
配置參數(shù)詳解
在elasticsearch
配置文件中有以下這些參數(shù),將逐一介紹(其實配置文件中英文描述已經(jīng)非常清楚):
cluster.name
集群名,自定義集群名,默認為elasticsearch,建議修改,因為低版本多播模式下同一網(wǎng)段下相同集群名會自動加入同一集群,如生產(chǎn)環(huán)境這樣易造成數(shù)據(jù)運維紊亂。node.name
節(jié)點名,同一集群下要求每個節(jié)點的節(jié)點名不一致,起到區(qū)分節(jié)點和辨認節(jié)點作用node.master
是否為主節(jié)點,選項為true或false,當為true時在集群啟動時該節(jié)點為主節(jié)點,在宕機或任務(wù)掛掉之后會選舉新的主節(jié)點,恢復后該節(jié)點依然為主節(jié)點node.data
是否處理數(shù)據(jù),選項為true或false。負責數(shù)據(jù)的相關(guān)操作path.data
默認數(shù)據(jù)路徑,可用逗號分隔多個路徑path.logs
默認日志路徑bootstrap.mlockall
內(nèi)存鎖,選項為true或false,用來確保用戶在es-jvm中設(shè)置的ES_HEAP_SIZE
參數(shù)內(nèi)存可以使用一半以上而又不溢出network.host
對外暴露的host,0.0.0.0
時暴露給外網(wǎng)http.port
對外訪問的端口號,默認為9200
,所以外界訪問該節(jié)點一般為http://ip:9200/
transport.tcp.port
集群間通信的端口號,默認為9300
discovery.zen.ping.unicast.hosts
集群的ip集合,可指定端口,默認為9300
,如["192.168.1.101","192.168.1.102"]
discovery.zen.minimum_master_nodes
最少的主節(jié)點個數(shù),為了防止腦裂,最好設(shè)置為(總結(jié)點數(shù)/2 + 1)
個discovery.zen.ping_timeout
主節(jié)點選舉超時時間設(shè)置gateway.recover_after_nodes
值為n,網(wǎng)關(guān)控制在n
個節(jié)點啟動之后才恢復整個集群node.max_local_storage_nodes
值為n,一個系統(tǒng)中最多啟用節(jié)點個數(shù)為n
action.destructive_requires_name
選項為true或false,刪除indices是否需要現(xiàn)實名字
理解主節(jié)點、副節(jié)點、分片與復制分片
關(guān)系
起初創(chuàng)建節(jié)點與分片的關(guān)系,設(shè)置shards=2,replicas=1
解析
node-master
主節(jié)點
集群中用于元數(shù)據(jù)(metadata)的請求處理,比如確定分片位置,索引的新增、刪除請求分配等node
包括client node
和data node
1. `client node` node.master=true,node.data=false 用于轉(zhuǎn)發(fā)請求,起到平衡負載的作用
2. `data node` node.master=flase,node.data=true
> 節(jié)點上保存了數(shù)據(jù)分片。它負責數(shù)據(jù)相關(guān)操作,比如分片的 CRUD,以及搜索和整合操作。這些操作都比較消耗 CPU、內(nèi)存和 I/O 資源
shards
分片
在設(shè)置索引時默認(5)或自己設(shè)置的分片數(shù)量,即indices(1)--shards(n),而每插入一條數(shù)據(jù)都會在唯一主分片中,即Document(n)--shards(1)replicas
復制分片
同樣在設(shè)置索引時會默認(1)或自定義復制分片數(shù)量,該數(shù)量對應(yīng)關(guān)系為每個主分片對應(yīng)的復制分片,即shards(1)--replicas(n)
要點
- 當集群健康狀態(tài)為
yello
表示存在復制分片未被分配(unassigned)到節(jié)點中(或者分配的復制節(jié)點個數(shù)少于設(shè)置的個數(shù)),這時如果硬件有故障將無法找回數(shù)據(jù)。 - 在同一個節(jié)點上既保存原始數(shù)據(jù)又保存副本是沒有意義的,因為一旦失去了那個節(jié)點,我們也將丟失該節(jié)點上的所有副本數(shù)據(jù)。
- 主分片數(shù)量一般是在建立索引時就固定的,一般是不作修改的,如果減少分片數(shù)量意味著數(shù)據(jù)將要丟失
- 復制分片一定意義上可以起到負載的功能,提高數(shù)據(jù)的冗余量。但如果只是在相同節(jié)點數(shù)目的集群上增加更多的副本分片并不能提高性能,因為每個分片從節(jié)點上獲得的資源會變少。 你需要增加更多的硬件資源來提升吞吐量
節(jié)點與分片模型
同樣設(shè)置shards=2,replicas=1
分布式文檔存儲的關(guān)系原理
這個由于在官網(wǎng)指南中寫的很清楚了,直接貼出章節(jié)。
分布式文檔存儲
集群搭建
配置集群
修改配置文件
# vi /etc/elasticsearch/elasticsearch.yml
# 統(tǒng)一的集群名
cluster.name: syncwt-es
# 當前節(jié)點名
node.name: syncwt-es-node-1
# 對外暴露端口使外網(wǎng)訪問
network.host: 0.0.0.0
# 對外暴露端口
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é)點):
http://119.29.248.199:9200/_plugin/head/
注意
- 集群中es的版本應(yīng)保持一致,最好內(nèi)網(wǎng)部署,外網(wǎng)不是很穩(wěn)定。
- 可用容器(如docker)封裝統(tǒng)一部署集群各節(jié)點以保持配置一致性
- 可在一臺機器上運行多個節(jié)點來構(gòu)建集群,只是性能會和機器配置相關(guān)
總結(jié)
- 集群中節(jié)點選型策略。node-data節(jié)點(隨著數(shù)據(jù)增加而增加),note-client(隨著查詢壓力而增加)節(jié)點
- 集群節(jié)點數(shù)量上升時,多關(guān)注配置參數(shù),如
gateway.recover_after_nodes
等,會帶來很多效率的提高 - 當集群數(shù)量較大時,建議橫向擴展集群。單純增加es節(jié)點的內(nèi)存和CPU不會有很大提升,建議多增加節(jié)點