Elasticsearch 集群管理(集群規(guī)劃、集群搭建、集群管理)

集群規(guī)劃

我們需要多大規(guī)模的集群

需要從以下兩個(gè)方面考慮

  • 當(dāng)前的數(shù)據(jù)量有多大?數(shù)據(jù)增長(zhǎng)情況如何?
  • 你的機(jī)器配置如何?cpu、多大內(nèi)存、多大硬盤容量?

推算的依據(jù):

  • ES JVM heap 最大可以設(shè)置32G 。
  • 30G heap 大概能處理的數(shù)據(jù)量 10 T。如果內(nèi)存很大如128G,可在一臺(tái)機(jī)器上運(yùn)行多個(gè)ES節(jié)點(diǎn)實(shí)例。

類應(yīng)用場(chǎng)景:

  • 用于構(gòu)建業(yè)務(wù)搜索功能模塊,且多是垂直領(lǐng)域的搜索。數(shù)據(jù)量級(jí)幾千萬到數(shù)十億級(jí)別。一般2-4臺(tái)機(jī)器的規(guī)模。
  • 用于大規(guī)模數(shù)據(jù)的實(shí)時(shí)OLAP(聯(lián)機(jī)處理分析),經(jīng)典的如ELK Stack,數(shù)據(jù)規(guī)??赡苓_(dá)到千億或更多。幾十到上百節(jié)點(diǎn)的規(guī)模。
集群中的節(jié)點(diǎn)角色如何分配
節(jié)點(diǎn)角色

Master
node.master: true 節(jié)點(diǎn)可以作為主節(jié)點(diǎn)
DataNode
node.data: true 默認(rèn)是數(shù)據(jù)節(jié)點(diǎn)。
Coordinate node 協(xié)調(diào)節(jié)點(diǎn)
如果僅擔(dān)任協(xié)調(diào)節(jié)點(diǎn),將上兩個(gè)配置設(shè)為false。
說明: *一個(gè)節(jié)點(diǎn)可以充當(dāng)一個(gè)或多個(gè)角色,默認(rèn)三個(gè)角色都有* *協(xié)調(diào)節(jié)點(diǎn):一個(gè)節(jié)點(diǎn)只作為接收請(qǐng)求、轉(zhuǎn)發(fā)請(qǐng)求到其他節(jié)點(diǎn)、匯總各個(gè)節(jié)點(diǎn)返回?cái)?shù)據(jù)等功能的節(jié)點(diǎn)。就叫協(xié)調(diào)節(jié)點(diǎn)*

如何分配
  • 小規(guī)模集群,不需嚴(yán)格區(qū)分。
  • 中大規(guī)模集群(十個(gè)以上節(jié)點(diǎn)),應(yīng)考慮單獨(dú)的角色充當(dāng)。特別并發(fā)查詢量大,查詢的合并量大,可以增加獨(dú)立的協(xié)調(diào)節(jié)點(diǎn)。角色分開的好處是分工分開,不互影響。如不會(huì)因協(xié)調(diào)角色負(fù)載過高而影響數(shù)據(jù)節(jié)點(diǎn)的能力。

如何避免腦裂問題(7.0版本已不存在此問題)

腦裂問題

一個(gè)集群中只有一個(gè)A主節(jié)點(diǎn),A主節(jié)點(diǎn)因?yàn)樾枰幚淼臇|西太多或者網(wǎng)絡(luò)過于繁忙,從而導(dǎo)致其他從節(jié)點(diǎn)ping不通A主節(jié)點(diǎn),這樣其他從節(jié)點(diǎn)就會(huì)認(rèn)為A主節(jié)點(diǎn)不可用了,就會(huì)重新選出一個(gè)新的主節(jié)點(diǎn)B。過了一會(huì)A主節(jié)點(diǎn)恢復(fù)正常了,這樣就出現(xiàn)了兩個(gè)主節(jié)點(diǎn),導(dǎo)致一部分?jǐn)?shù)據(jù)來源于A主節(jié)點(diǎn),另外一部分?jǐn)?shù)據(jù)來源于B主節(jié)點(diǎn),出現(xiàn)數(shù)據(jù)不一致問題,這就是腦裂。

盡量避免腦裂,需要添加最小數(shù)量的主節(jié)點(diǎn)配置:

discovery.zen.minimum_master_nodes: (有master資格節(jié)點(diǎn)數(shù)/2) + 1
這個(gè)參數(shù)控制的是,選舉主節(jié)點(diǎn)時(shí)需要看到最少多少個(gè)具有master資格的活節(jié)點(diǎn),才能進(jìn)行選舉。官方的推薦值是(N/2)+1,其中N是具有master資格的節(jié)點(diǎn)的數(shù)量。

常用做法(中大規(guī)模集群)
  • Master 和 dataNode 角色分開,配置奇數(shù)個(gè)master,如3
  • 單播發(fā)現(xiàn)機(jī)制,配置master資格節(jié)點(diǎn):
discovery.zen.ping.multicast.enabled: false # 關(guān)閉多播發(fā)現(xiàn)機(jī)制,默認(rèn)是關(guān)閉的
discovery.zen.ping.unicast.hosts: ["master1", "master2", "master3"] #配置單播發(fā)現(xiàn)的主節(jié)點(diǎn)ip地址,其他從節(jié)點(diǎn)要加入進(jìn)來,就得去詢問單播發(fā)現(xiàn)機(jī)制里面配置的主節(jié)點(diǎn)我要加入到集群里面了,主節(jié)點(diǎn)同意以后才能加入,然后主節(jié)點(diǎn)再通知集群中的其他節(jié)點(diǎn)有新節(jié)點(diǎn)加入
  • 配置選舉發(fā)現(xiàn)數(shù),及延長(zhǎng)ping master的等待時(shí)長(zhǎng)
discovery.zen.ping_timeout: 30(默認(rèn)值是3秒)#其他節(jié)點(diǎn)ping主節(jié)點(diǎn)多久時(shí)間沒有響應(yīng)就認(rèn)為主節(jié)點(diǎn)不可用了
discovery.zen.minimum_master_nodes: 2 # 選舉主節(jié)點(diǎn)時(shí)需要看到最少多少個(gè)具有master資格的活節(jié)點(diǎn),才能進(jìn)行選舉

索引應(yīng)該設(shè)置多少個(gè)分片

說明:分片數(shù)指定后不可變,除非重索引。
思考

  • 分片對(duì)應(yīng)的存儲(chǔ)實(shí)體是什么?
      存儲(chǔ)的實(shí)體是索引
  • 分片是不是越多越好?
      不是
  • 分片多有什么影響?
      分片多浪費(fèi)存儲(chǔ)空間、占用資源、影響性能
分片過多的影響
  • 每個(gè)分片本質(zhì)上就是一個(gè)Lucene索引, 因此會(huì)消耗相應(yīng)的文件句柄, 內(nèi)存和CPU資源。
  • 每個(gè)搜索請(qǐng)求會(huì)調(diào)度到索引的每個(gè)分片中. 如果分片分散在不同的節(jié)點(diǎn)倒是問題不太. 但當(dāng)分片開始競(jìng)爭(zhēng)相同的硬件資源時(shí), 性能便會(huì)逐步下降。
  • ES使用詞頻統(tǒng)計(jì)來計(jì)算相關(guān)性. 當(dāng)然這些統(tǒng)計(jì)也會(huì)分配到各個(gè)分片上. 如果在大量分片上只維護(hù)了很少的數(shù)據(jù), 則將導(dǎo)致最終的文檔相關(guān)性較差。
分片設(shè)置的可參考原則
  • ElasticSearch推薦的最大JVM堆空間是30~32G, 所以把你的分片最大容量限制為30GB, 然后再對(duì)分片數(shù)量做合理估算. 例如, 你認(rèn)為你的數(shù)據(jù)能達(dá)到200GB, 推薦你最多分配7到8個(gè)分片。
  • 在開始階段, 一個(gè)好的方案是根據(jù)你的節(jié)點(diǎn)數(shù)量按照1.5~3倍的原則來創(chuàng)建分片. 例如,如果你有3個(gè)節(jié)點(diǎn), 則推薦你創(chuàng)建的分片數(shù)最多不超過9(3x3)個(gè)。當(dāng)性能下降時(shí),增加節(jié)點(diǎn),ES會(huì)平衡分片的放置。
  • 對(duì)于基于日期的索引需求, 并且對(duì)索引數(shù)據(jù)的搜索場(chǎng)景非常少. 也許這些索引量將達(dá)到成百上千, 但每個(gè)索引的數(shù)據(jù)量只有1GB甚至更小. 對(duì)于這種類似場(chǎng)景, 建議只需要為索引分配1個(gè)分片。如日志管理就是一個(gè)日期的索引需求,日期索引會(huì)很多,但每個(gè)索引存放的日志數(shù)據(jù)量就很少。
分片應(yīng)該設(shè)置幾個(gè)副本

說明:副本數(shù)是可以隨時(shí)調(diào)整的!
思考

  • 副本的用途是什么?
      備份數(shù)據(jù)保證高可用數(shù)據(jù)不丟失,高并發(fā)的時(shí)候參與數(shù)據(jù)查詢
  • 針對(duì)它的用途,我們?cè)撊绾卧O(shè)置它的副本數(shù)?
      一般一個(gè)分片有1-2個(gè)副本即可保證高可用
  • 集群規(guī)模沒變的情況下副本過多會(huì)有什么影響?
      副本多浪費(fèi)存儲(chǔ)空間、占用資源、影響性能
副本設(shè)置基本原則
  • 為保證高可用,副本數(shù)設(shè)置為2即可。要求集群至少要有3個(gè)節(jié)點(diǎn),來分開存放主分片、副本。
  • 如發(fā)現(xiàn)并發(fā)量大時(shí),查詢性能會(huì)下降,可增加副本數(shù),來提升并發(fā)查詢能力。
    注意:新增副本時(shí)主節(jié)點(diǎn)會(huì)自動(dòng)協(xié)調(diào),然后拷貝數(shù)據(jù)到新增的副本節(jié)點(diǎn)

集群搭建

準(zhǔn)備3臺(tái)虛擬機(jī)
  • 192.168.152.128
  • 192.168.152.129
  • 192.168.152.130
修改3臺(tái)虛擬機(jī)下ES的配置,使得它們組成一個(gè)集群

進(jìn)入elasticsearch的config目錄,修改elasticsearch.yml的配置

IP訪問限制、默認(rèn)端口修改9200

這里有兩個(gè)需要提醒下,第一個(gè)就是IP訪問限制,第二個(gè)就是es實(shí)例的默認(rèn)端口號(hào)9200。IP訪問限制可以限定具體的IP訪問服務(wù)器,這有一定的安全過濾作用。

# Set the bind address to a specific IP (IPv4 or IPv6): 
# 
network.host: 192.168.152.128

如果設(shè)置成0.0.0.0則是不限制任何IP訪問。一般在生產(chǎn)的服務(wù)器可能會(huì)限定幾臺(tái)IP,通常用于管理使用。

默認(rèn)的端口9200在一般情況下也有點(diǎn)風(fēng)險(xiǎn),可以將默認(rèn)的端口修改成另外一個(gè),這還有一個(gè)原因就是怕開發(fā)人員誤操作,連接上集群。當(dāng)然,如果你的公司網(wǎng)絡(luò)隔離做的很好也無所謂。

# 
# Set a custom port for HTTP: 
# 
http.port: 9200 
transport.tcp.port: 9300

這里的9300是集群內(nèi)部通訊使用的端口,這個(gè)也可以修改掉。因?yàn)檫B接集群的方式有兩種,通過扮演集群node也是可以進(jìn)入集群的,所以還是安全起見,修改掉默認(rèn)的端口。
說明:記得修改安裝了ES的3臺(tái)虛擬機(jī)(三個(gè)節(jié)點(diǎn))的相同配置,要不然節(jié)點(diǎn)之間無法建立連接工作,也會(huì)報(bào)錯(cuò)。

集群發(fā)現(xiàn)IP列表、node、cluster名稱
  • 緊接著修改集群節(jié)點(diǎn)IP地址,這樣可以讓集群在規(guī)定的幾個(gè)節(jié)點(diǎn)之間工作。elasticsearch,默認(rèn)是使用自動(dòng)發(fā)現(xiàn)IP機(jī)制。就是在當(dāng)前網(wǎng)段內(nèi),只要能被自動(dòng)感知到的IP就能自動(dòng)加入到集群中。這有好處也有壞處。好處就是自動(dòng)化了,當(dāng)你的es集群需要云化的時(shí)候就會(huì)非常方便。但是也會(huì)帶來一些不穩(wěn)定的情況,如,master的選舉問題、數(shù)據(jù)復(fù)制問題。
  • 導(dǎo)致master選舉的因素之一就是集群有節(jié)點(diǎn)進(jìn)入。當(dāng)數(shù)據(jù)復(fù)制發(fā)生的時(shí)候也會(huì)影響集群,因?yàn)橐鰯?shù)據(jù)平衡復(fù)制和冗余。這里面可以獨(dú)立master集群,剔除master集群的數(shù)據(jù)節(jié)點(diǎn)能力。
  • 固定列表的IP發(fā)現(xiàn)有兩種配置方式,一種是互相依賴發(fā)現(xiàn),一種是全量發(fā)現(xiàn)。各有優(yōu)勢(shì)吧,我是使用的依賴發(fā)現(xiàn)來做的。這有個(gè)很重要的參考標(biāo)準(zhǔn),就是你的集群擴(kuò)展速度有多快。因?yàn)檫@有個(gè)問題就是,當(dāng)全量發(fā)現(xiàn)的時(shí)候,如果是初始化集群會(huì)有很大的問題,就是master全局會(huì)很長(zhǎng),然后節(jié)點(diǎn)之間的啟動(dòng)速度各不一樣。所以我采用了靠譜點(diǎn)的依賴發(fā)現(xiàn)。

你需要在192.168.152.128的elasticsearch中配置成:

# --------------------------------- Discovery ---------------------------------- 
# 
# Pass an initial list of hosts to perform discovery when new node is started: 
# The default list of hosts is ["127.0.0.1", "[::1]"] 
# 
discovery.zen.ping.unicast.hosts: [ "192.168.152.129:9300","192.168.152.130:9300" ]

讓他去發(fā)現(xiàn)129,130的機(jī)器,以此內(nèi)推,完成剩下的129和130機(jī)器的配置。
然后你需要配置下集群名稱,就是你當(dāng)前節(jié)點(diǎn)所在集群的名稱,這有助于你規(guī)劃你的集群。集群中的所有節(jié)點(diǎn)的集群名稱必須一樣,只有集群名稱一樣才能組成一個(gè)邏輯集群。

# ---------------------------------- Cluster ----------------------------------- 
# 
# Use a descriptive name for your cluster: 
# 
cluster.name: mycluster 

配置你當(dāng)前節(jié)點(diǎn)的名稱

# 
# ------------------------------------ Node ------------------------------------ 
# 
# Use a descriptive name for the node: 
# 
node.name: node-1

以此類推,完成另外兩個(gè)節(jié)點(diǎn)的配置。cluster.name的名稱必須保持一樣。然后分別設(shè)置node.name。
說明: 這里搭建的是一個(gè)簡(jiǎn)單的集群,沒有做集群節(jié)點(diǎn)角色的區(qū)分,所以3個(gè)節(jié)點(diǎn)默認(rèn)的角色有主節(jié)點(diǎn)、數(shù)據(jù)節(jié)點(diǎn)、協(xié)調(diào)節(jié)點(diǎn)

選舉ES主節(jié)點(diǎn)的邏輯:
選舉的大概邏輯,它會(huì)根據(jù)分片的數(shù)據(jù)的前后新鮮程度來作為選舉的一個(gè)重要邏輯。(日志、數(shù)據(jù)、時(shí)間都會(huì)作為集群master全局的重要指標(biāo))。
因?yàn)榭紤]到數(shù)據(jù)一致性問題,當(dāng)然是用最新的數(shù)據(jù)節(jié)點(diǎn)作為master,然后進(jìn)行新數(shù)據(jù)的復(fù)制和刷新其他node。

集群管理

監(jiān)控API
http://localhost:9200/_cat
GET  /_cat
/_cat/health
/_cat/nodes
/_cat/master
/_cat/indices
/_cat/allocation 
/_cat/shards 
/_cat/shards/{index}
/_cat/thread_pool
/_cat/segments 
/_cat/segments/{index}
x-pack

為集群提供安全防護(hù)、監(jiān)控、告警、報(bào)告等功能的收費(fèi)組件;
部分免費(fèi):https://www.elastic.co/subscriptions
6.3開始已開源,并并入了elasticsearch核心中。

官網(wǎng)安裝介紹:
https://www.elastic.co/guide/en/elasticsearch/reference/6.2/installing-xpack-es.html

最后編輯于
?著作權(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ù)。

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