1. 程式人生 > >Elasticsearch分片/腦裂/優化

Elasticsearch分片/腦裂/優化

Elasticsearch分片

預設是randomize across shards

隨機選取,表示隨機的從分片中取資料
_local:指查詢操作會優先在本地節點有的分片中查詢,沒有的話再在其它節點查詢。
_primary:指查詢只在主分片中查詢
_primary_first:指查詢會先在主分片中查詢,如果主分片找不到(掛了),就會在副本中查詢。
_only_node:指在指定id的節點裡面進行查詢,如果該節點只有查詢索引的部分分片,就只在這部分分片中查詢,所以查詢結果可能不完整。如_only_node:123在節點id為123的節點中查詢。
_prefer_node:nodeid 優先在指定的節點上執行查詢
_shards:0 ,1,2,3,4:查詢指定分片的資料

自定義:_only_nodes:根據多個節點進行查詢

Elasticsearch的腦裂問題

所謂腦裂問題(類似於精神分裂),就是同一個叢集中的不同節點,對於叢集的狀態有了不一樣的理解。
http://blog.csdn.net/cnweike/article/details/39083089
discovery.zen.minimum_master_nodes
用於控制選舉行為發生的最小叢集節點數量。推薦設為大於1的數值,因為只有在2個以上節點的叢集中,主節點才是有意義的。

正常情況下,叢集中的所有的節點,應該對叢集中master的選擇是一致的,這樣獲得的狀態資訊也應該是一致的,不一致的狀態資訊,說明不同的節點對master節點的選擇出現了異常——也就是所謂的腦裂問題。這樣的腦裂狀態直接讓節點失去了叢集的正確狀態,導致叢集不能正常工作。

腦裂問題的原因:

1. 網路:由於是內網通訊,網路通訊問題造成某些節點認為master死掉,而另選master的可能性較小。
2.節點負載:由於master節點與data節點都是混合在一起的,所以當工作節點的負載較大時,導致對應的ES例項停止響應,而這臺伺服器如果正充當著master節點的身份,那麼一部分節點就會認為這個master節點失效了,故重新選舉新的節點,這時就出現了腦裂;同時由於data節點上ES程序佔用的記憶體較大,較大規模的記憶體回收操作也能造成ES程序失去響應。

腦裂問題的解決:

主節點
node.master:true
node.data:false
從節點
node.master:false
node.data:true
所有節點
discovery.zen.ping.multicast.enabled:false
discovery.zen.ping.unicast.hosts:[“master”,“slave1”,“slave2"]

Elasticsearch的優化

調大系統的"最大開啟檔案數",建議32K甚至是64K
ulimit -a (檢視)
ulimit -n 32000(設定)
修改配置檔案調整ES的JVM記憶體大小
1:修改bin/elasticsearch.in.sh中ES_MIN_MEM和ES_MAX_MEM的大小,建議設定一樣大,避免頻繁的分配記憶體,根據伺服器記憶體大小,一般分配60%左右(預設256M)
2:如果使用searchwrapper外掛啟動es的話則修改bin/service/elasticsearch.conf(預設1024M)
設定mlockall來鎖定程序的實體記憶體地址
避免交換(swapped)來提高效能
修改檔案conf/elasticsearch.yml
boostrap.mlockall: true
分片多的話,可以提升建立索引的能力,5-20個比較合適。
如果分片數過少或過多,都會導致檢索比較慢。分片數過多會導致檢索時開啟比較多的檔案,另外也會導致多臺伺服器之間通訊。而分片數過少會導至單個分片索引過大,所以檢索速度慢。建議單個分片最多儲存20G左右的索引資料,所以,分片數量=資料總量/20G。
副本多的話,可以提升搜尋的能力,但是如果設定很多副本的話也會對伺服器造成額外的壓力,因為需要同步資料。所以建議設定2-3個即可。
要定時對索引進行優化,不然segment越多,查詢的效能就越差
索引量不是很大的話情況下可以將segment設定為1
curl -XPOST 'http://localhost:9200/bjsxt/_optimize?max_num_segments=1'
java程式碼:client.admin().indices().prepareOptimize(“bjsxt").setMaxNumSegments(1).get();

刪除文件:在Lucene中刪除文件,資料不會馬上在硬碟上除去,而是在lucene索引中產生一個.del的檔案,而在檢索過程中這部分資料也會參與檢索,lucene在檢索過程會判斷是否刪除了,如果刪除了在過濾掉。這樣也會降低檢索效率。所以可以執行清除刪除文件
curl -XPOST 'http://localhost:9200/elasticsearch/_optimize?only_expunge_deletes=true'
client.admin().indices().prepareOptimize("elasticsearch").setOnlyExpungeDeletes(true).get();
如果在專案開始的時候需要批量入庫大量資料的話,建議將副本數設定為0
因為es在索引資料的時候,如果有副本存在,資料也會馬上同步到副本中,這樣會對es增加壓力。待索引完成後將副本按需要改回來。這樣可以提高索引效率。

去掉mapping中_all域,Index中預設會有_all的域,(相當於solr配置檔案中的拷貝欄位text),這個會給查詢帶來方便,但是會增加索引時間和索引尺寸
"_all":{"enabled":"false"}
log輸出的水平預設為trace,即查詢超過500ms即為慢查詢,就要列印日誌,造成cpu和mem,io負載很高。把log輸出水平改為info,可以減輕伺服器的壓力。
修改ES_HOME/conf/logging.yaml檔案
或者修改ES_HOME/conf/elasticsearch.yaml

使用反射獲取Elasticsearch客戶端
可以使用前面講的方式通過new獲取client
使用反射方式:網上反映這種方式效率明顯高於new客戶端,並可避免線上環境記憶體溢位和超時等問題

Elasticsearch使用經驗

在使用java程式碼操作es叢集的時候要保證本地使用的es的版本和叢集上es的版本保持一致。
保證叢集中每個節點的JDK版本和es配置一致。

Elasticsearch分片規則

elasticsearch在建立索引時,根據id或id,型別進行hash,得到hash值與該索引的文件數量取餘,取餘的值即為存入的分片。
具體原始碼為:根據OperationRouting類的shardId方法進行分片

相關推薦

Elasticsearch分片//優化

Elasticsearch分片 預設是randomize across shards 隨機選取,表示隨機的從分片中取資料 _local:指查詢操作會優先在本地節點有的分片中查詢,沒有的話再在其它節點查

elasticsearch問題

我們都遇到過這個 - 在我們開始準備一個elasticsearch叢集的時候,第一個問題就是“叢集需要有多少節點?”。我想大家都知道,這個問題的答案取決於很多因素,例如期望的負載,資料大小,硬體等。這篇博文不會深入解釋如何調整叢集大小的細節,而是去關注另一個同樣重要的事情 - 如何避免腦裂問題。

Elasticsearch分片優化

原文地址:https://qbox.io/blog/optimizing-elasticsearch-how-many-shards-per-index大多數ElasticSearch使用者在建立索引時通用會問的一個重要問題是:我需要建立多少個分片?在本文中, 我將介紹在分片

Elasticsearch筆記九之優化

很多 系統 div ons oca eat consola 極速 eth Elasticsearch筆記九之優化優化從索引片段,內存設置,副本,分片,日誌等方面入手。1:索引片段Es運行時會生成很多索引片段,執行查詢時會打開這些索引片斷。系統會限制打開索引片斷的個數一旦超過

keepalived中的

主動 雙線 高可用 網關 冗余 永遠 兩個 釋放 keepalive 在高可用(HA)系統中,當聯系2個節點的“心跳線”斷開時,本來為一整體、動作協調的HA系統,就分裂成為2個獨立的個體。由於相互失去了聯系,都以為是對方出了故障。兩個節點上的

keepalive和問題

pro pst 1.8 定時 後來 原因 cat 之間 ges keepalive keepalive起初專門為lvs負載均衡軟件設計的,用來管理監控lvs集群系統中各個服務節點的狀態,後來又加入了可以實現高可用的vrrp功能。 keepal

說說Keepalived的

HA 腦裂 1. 工作場景Keepalived提供了Loadbalancing和High-Availability的功能, 本文說的是其為2個Mycat節點提供HA功能的場景.2. 關鍵配置如下, 為主備非搶占模式.! mycat01, 192.168.4.196global_defs { #

keepalived問題查找

use html pro board tle plain 無法 題解 -a 在自己環境做keepalived+redis實驗時,當重啟了備用redies機器後,發現兩臺redies主機都拿到了VIP [plain] view plain copy [roo

rabbitmq (網絡分區)

.net detail 配置 blog rabbitmq TP 產生 tails 分區 1、產生的原因 https://blog.csdn.net/zyz511919766/article/details/45198055 2、相關配置、如何規避 https://blog.

ElasticSearch分片詳解

節點集群 要求 repl 步驟 現在 有一個 spa 兩個 執行 1.我們能夠發送請求給集群中任意一個節點。每個節點都有能力處理任意請求。每個節點都知道任意文檔所在的節點 2.新建索引和刪除請求都是寫操作,它們必須在主分片上成功完成才能賦值到相關的復制分片上 3.在

Zookeeper和分散式環境中的假死問題

最近和同事聊天無意間發現他們的系統也存在腦裂的問題。想想當初在我們的系統中為了解決腦裂花了非常大的功夫,現在和大家一起討論下腦裂,假死等等這些問題和解決的方法。 在一個大叢集中往往會有一個master存在,在長期執行過程中不可避免的會出現宕機等問題導致master不可用,在出現這樣的情況以後往往

keepalived 功能 、原理、

簡介: keepalived設計之初是專為LVS負載均衡軟體設計的,用來管理和監控LVS集群系統中的各個服務節點狀態,,後來加入實現高可用的VRRP功能。通過vrrp協議實現高可用功能的 常用的功能 管理LVS負載均衡軟體 對LVS叢集節點健康檢查功能

drbd處理

split brain實際上是指在某種情況下,造成drbd的兩個節點斷開了連線,都以primary的身份來執行。當drbd某 primary節點連線對方節點準備傳送資訊的時候如果發現對方也是primary狀態,那麼會會立刻自行斷開連線,並認定 當前已經發生split brain了,這時候他會在系統日

Yarn ResourceManager進行主從切換時發生原因分析

Brain Split 事故 時間先後順序: ResourceManager同zookeeper通訊,發生異常: 2018-10-19 09:17:49,981 INFO org.apache.hadoop.yarn.server.resourcemanage

elasticsearch分片移動操作

分片移動觸發條件 建立/刪除一個Index; 加入/離開一個Node; 手動執行了Reroute命令; 修改了Replica設定; Allocate策略,明確指定是否允許分片分配到指定Node上,分為index級別和cluster級別 https:

Elasticsearch飛起來!——效能優化實踐乾貨

0、題記 Elasticsearch效能優化的最終目的:使用者體驗爽。 關於爽的定義——著名產品人樑寧曾經說過“人在滿足時候的狀態叫做愉悅,人不被滿足就會難受,就會開始尋求。如果這個人在尋求中,能立刻得到即時滿足,這種感覺就是爽!”。 Elasticsearch的爽點就是:快、準、全

CSDN博文週刊第2期 |讓Elasticsearch飛起來!——效能優化實踐乾貨

CSDN每週都會產生大量的部落格文章,有一些優質的乾貨文章值得被更多人閱讀,分享。CSDN博文週刊會從過去一週博文中精心挑選一些優質文章來以饗讀者,陪伴大家度過一個愉快週末。 大資料 1、讓Elasticsearch飛起來!——效能優化實踐乾貨 Elasticsearch效能

控制Elasticsearch分片和副本的分配

    ES叢集中索引可能由多個分片構成,並且每個分片可以擁有多個副本。通過將一個單獨的索引分為多個分片,我們可以處理不能在一個單一的伺服器上面執行的大型索引,簡單的說就是索引的大小過大,導致效率問題。不能執行的原因可能是記憶體也可能是儲存。由於每個分片可以有多個副本,通過

Elasticsearch分片管理命令,移動,上線,取消等

Cluster RerouteeditThe reroute command allows to explicitly execute a cluster reroute allocation command including specific commands. For

19-05、redis哨兵主備切換的資料丟失問題:非同步複製、叢集

1、兩種資料丟失的情況 主備切換的過程,可能會導致資料丟失。 (1)非同步複製導致的資料丟失 因為master -> slave的複製是非同步的,所以可能有部分資料還沒複製到slave,master就宕機了,此時這些部分資料就丟失了。 非同步複製導致的資料丟失問題.png