elasticsearch使用中的問題

1. elasticsearch 服務安全配置

目前主要通過插件的形式來控制:
常用的插件主要包括:elasticsearch-http-basic,search-guard丈莺,shield

配置名 默認值 說明
http.basic.enabled true 開關送丰,開啟會接管全部HTTP連接
http.basic.user "admin" 賬號
http.basic.password "admin_pw" 密碼
http.basic.ipwhitelist ["localhost", "127.0.0.1"] 白名單內的ip訪問不需要通過賬號和密碼,支持ip和主機名蟹略,不支持ip區(qū)間或正則
http.basic.trusted_proxy_chains [] 信任代理列表
http.basic.log false 把無授權的訪問事件添加到ES的日志
http.basic.xforward "" 記載代理路徑的header字段名

2. elasticsearch如何安全重啟節(jié)點

elasticsearch集群遏佣,有時候可能需要修改配置贼急,增加硬盤,擴展內存等操作空闲,需要對節(jié)點進行維護升級走敌。但是業(yè)務不能停掉丽,如果直接kill掉節(jié)點,可能導致數據丟失僧须。而且集群會認為該節(jié)點掛掉了项炼,就開始轉移數據锭部,當重啟之后,它又會恢復數據取胎,如果你當前的數據量已經很大了湃窍,這是很耗費機器和網絡資源的您市。
本文轉載官方提供的安全重啟集群節(jié)點的方法:
第一步:先暫停集群的shard自動均衡。

curl -XPUT http://192.168.1.2:9200/_cluster/settings -d'
{
    "transient" : {
        "cluster.routing.allocation.enable" : "none"
    }
}'

第二步:shutdown你要升級的節(jié)點

curl -XPOST http://192.168.1.3:9200/_cluster/nodes/_local/_shutdown

第三步:升級重啟該節(jié)點,并確認該節(jié)點重新加入到了集群中
第四步:重復2-3步泽篮,升級重啟其它要升級的節(jié)點帽撑。
第五步:重啟啟動集群的shard均衡

curl -XPUT http://192.168.1.2/_cluster/settings -d'
{
    "transient" : {
        "cluster.routing.allocation.enable" : "all"
    }
}'

3. elasticsearch三個重要的優(yōu)化

1、內存優(yōu)化
在bin/elasticsearch.in.sh中進行配置
修改配置項為盡量大的內存:
ES_MIN_MEM=8g
ES_MAX_MEM=8g
兩者最好改成一樣的扣蜻,否則容易引發(fā)長時間GC(stop-the-world)

elasticsearch默認使用的GC是CMS GC
如果你的內存大小超過6G莽使,CMS是不給力的笙僚,容易出現stop-the-world
建議使用G1 GC
注釋掉:
JAVA_OPTS=”$JAVA_OPTS -XX:+UseParNewGC”
JAVA_OPTS=”$JAVA_OPTS -XX:+UseConcMarkSweepGC”

JAVA_OPTS=”$JAVA_OPTS -XX:CMSInitiatingOccupancyFraction=75″
JAVA_OPTS=”$JAVA_OPTS -XX:+UseCMSInitiatingOccupancyOnly”
修改為:
JAVA_OPTS=”$JAVA_OPTS -XX:+UseG1GC”
JAVA_OPTS=”$JAVA_OPTS -XX:MaxGCPauseMillis=200″

如果G1 GC優(yōu)點是減少stop-the-world在幾率肋层,但是CPU占有率高栋猖。
需要更優(yōu)化的性能,你可以參考
http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/G1GettingStarted/index.html

2肃拜、合理配置主節(jié)點和數據節(jié)點
配置文件:conf/elasticsearch.yaml
node.master: true
node.data: true

  1. 當master為false全陨,而data為true時辱姨,會對該節(jié)點產生嚴重負荷;
  2. 當master為true枢舶,而data為false時凉泄,該節(jié)點作為一個協(xié)調者蚯根;
  3. 當master為false,data也為false時蒂誉,該節(jié)點就變成了一個負載均衡器右锨。

3、設置合理的刷新時間
建立的索引悄窃,不會立馬查到轧抗,這是為什么elasticsearch為near-real-time的原因
需要配置index.refresh_interval參數恼策,默認是1s涣楷。
你可以像
http://zhaoyanblog.com/archives/299.html
文件中一樣,調用接口配置
也可以直接寫到conf/elasticsearch.yaml文件中
index.refresh_interval:1s
這樣所有新建的索引都使用這個刷新頻率绽乔。

4. 配置高性能Elasticsearch集群

小貼士1:規(guī)劃索引折砸、分片 以及集群增長情況

ES使得創(chuàng)建大量索引和超大量分片非常地容易沙峻,但更重要的是理解每個索引和分片都是一筆開銷。如果擁有太多的索引或分片去枷,單單是管理負荷就會影響到ES集群的性能删顶,潛在地也會影響到可用性方面淑廊。這里我們專注于管理負荷季惩,但運行大量的索引/分片依然會非常顯著地影響到索引和檢索性能腻格。

我們發(fā)現影響管理負荷的最大因素是集群狀態(tài)數據的大小荒叶,因為它包含了集群中每個索引的所有mapping數據输虱。我們曾經一度有單個集群擁有超過900MB的集群狀態(tài)數據脂凶。該集群雖然在運行但并不可用宪睹。

讓我們通過一些數據來了解到底發(fā)生了什么 。蚕钦。亭病。。嘶居。罪帖。

假如有一個索引包含50k的mapping數據(我們當時是有700個字段)。如果每小時生成一個索引邮屁,那么每天將增加24 x 50k的集群狀態(tài)數據整袁,或者1.2MB。如果需要在系統(tǒng)中保留一年的數據坐昙,那么集群狀態(tài)數據將高達438MB(以及8670個索引,43800個分片)芋忿。如果與每天一個索引(18.25MB炸客,365個索引,1825個分片)作比較戈钢,會看到每小時的索引策略將會是一個完全不同的境況。

幸運的是,一旦系統(tǒng)中有一些真實數據的話烙样,實際上非常容易做這些預測播赁。我們應當能夠看到集群必須處理多少狀態(tài)數據和多少索引/分片。在上到生產環(huán)境之前真的應該演練一下宣渗,以便防止凌晨3:00收到集群掛掉的電話告警抖所。
小貼士3: 內存設置

Linux把它的物理RAM分成多個內存塊,稱之為分頁痕囱。內存交換(swapping)是這樣一個過程田轧,它把內存分頁復制到預先設定的叫做交換區(qū)的硬盤空間上,以此釋放內存分頁鞍恢。物理內存和交換區(qū)加起來的大小就是虛擬內存的可用額度傻粘。

內存交換有個缺點每窖,跟內存比起來硬盤非常慢。內存的讀寫速度以納秒來計算弦悉,而硬盤是以毫秒來計算窒典,所以訪問硬盤比訪問內存要慢幾萬倍。交換次數越多稽莉,進程就越慢瀑志,所以應該不惜一切代價避免內存交換的發(fā)生。

ES的mlockall屬性允許ES節(jié)點不交換內存污秆。(注意只有Linux/Unix系統(tǒng)可設置劈猪。)這個屬性可以在yaml文件中設置:

bootstrap.mlockall: true
在5.x版本中,已經改成了bootstrap.memory_lock: true.

mlockall默認設置成false良拼,即ES節(jié)點允許內存交換战得。一旦把這個值加到屬性文件中,需要重啟ES節(jié)點才可生效庸推〕U欤可通過以下方式來確定該值是否設置正確:

curl http://localhost:9200/_nodes/process?pretty
如果你正在設置這個屬性,請使用-DXmx選項或ES_HEAP_SIZE屬性來確保ES節(jié)點分配了足夠的內存贬媒。

  1. discovery.zen屬性控制ElasticSearch的發(fā)現協(xié)議

Elasticsearch默認使用服務發(fā)現(Zen discovery)作為集群節(jié)點間發(fā)現和通信的機制聋亡。Azure、EC2和GCE也有使用其他的發(fā)現機制杀捻。服務發(fā)現由discovery.zen.*開頭的一系列屬性控制。

在0.x和1.x版本中同時支持單播和多播蚓庭,且默認是多播致讥。所以要在這些版本的ES中使用單播,需要設置屬性discovery.zen.ping.multicast.enabled為false器赞。

從2.0開始往后服務發(fā)現就僅支持單播了垢袱。

首先需要使用屬性discovery.zen.ping.unicast.hosts指定一組通信主機。方便起見港柜,在集群中的所有主機上為該屬性設置相同的值请契,使用集群節(jié)點的名稱來定義主機列表。

屬性discovery.zen.minimum_master_nodes決定了有資格作為master的節(jié)點的最小數量夏醉,即一個應當“看見”集群范圍內運作的節(jié)點爽锥。如果集群中有2個以上節(jié)點,建議設置該值為大于1畔柔。一種計算方法是氯夷,假設集群中的節(jié)點數量為N,那么該屬性應該設置為N/2+1靶擦。
初步判斷該設置可以有效防止腦裂問題

小貼士5:當心DELETE _all

必須要了解的一點是腮考,ES的DELETE API允許用戶僅僅通過一個請求來刪除索引雇毫,支持使用通配符,甚至可以使用_all作為索引名來代表所有索引踩蔚。例如:

curl -XDELETE ‘http://localhost:9200/*/
這個特性非常有用棚放,但也非常危險,特別是在生產環(huán)境中馅闽。在我們的所有集群中飘蚯,已通過設置action.destructive_requires_name:true來禁用了它。

這項配置在1.0版本中開始引用福也,并取代了0.90版本中使用的配置屬性disable_delete_all_indices孝冒。

小貼士6:使用Doc Values

2.0及以上版本默認開啟Doc Values特性,但在更早的ES版本中必須顯式地設置拟杉。當進行大規(guī)模的排序和聚合操作時,Doc Values相比普通屬性有著明顯的優(yōu)勢量承。本質上是將ES轉換成一個列式存儲搬设,從而使ES的許多分析類特性在性能上遠超預期。

為了一探究竟撕捍,我們可以在ES里比較一下Doc Values和普通屬性拿穴。

當使用一個普通屬性去排序或聚合時,該屬性會被加載到屬性數據緩存中忧风。一個屬性首次被緩存時默色,ES必須分配足夠大的堆空間,以便能保存每一個值狮腿,然后使用每個文檔的值逐步填充腿宰。這個過程可能會耗費一些時間,因為可能需要從磁盤讀取他們的值缘厢。一旦這個過程完成吃度,這些數據的任何相關操作都將使用這份緩存數據,并且會很快贴硫。如果嘗試填充太多的屬性到緩存椿每,一些屬性將被回收,隨后再次使用到這些屬性時將會強制它們重新被加載到緩存英遭,且同樣有啟動開銷间护。為了更加高效,人們會想到最小化或淘汰挖诸,這意味著我們的屬性數量將受限于此種方式下的緩存大小汁尺。

相比之下,Doc Values屬性使用基于硬盤的數據結構税灌,且能被內存映射到進程空間均函,因此不影響堆使用亿虽,同時提供實質上與屬性數據緩存一樣的性能。當這些屬性首次從硬盤讀取數據時仍然會有較小的啟動開銷苞也,但這會由操作系統(tǒng)緩存去處理洛勉,所以只有真正需要的數據會被實際讀取。

Doc Values因此最小化了堆的使用(因為垃圾收集)如迟,并發(fā)揮了操作系統(tǒng)文件緩存的優(yōu)勢收毫,從而可進一步最小化磁盤讀操作的壓力。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末殷勘,一起剝皮案震驚了整個濱河市此再,隨后出現的幾起案子,更是在濱河造成了極大的恐慌玲销,老刑警劉巖输拇,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異贤斜,居然都是意外死亡策吠,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門瘩绒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來猴抹,“玉大人,你說我怎么就攤上這事锁荔◇案” “怎么了?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵阳堕,是天一觀的道長跋理。 經常有香客問我,道長恬总,這世上最難降的妖魔是什么薪介? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮越驻,結果婚禮上汁政,老公的妹妹穿的比我還像新娘。我一直安慰自己缀旁,他們只是感情好记劈,可當我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著并巍,像睡著了一般目木。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上懊渡,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天刽射,我揣著相機與錄音军拟,去河邊找鬼。 笑死誓禁,一個胖子當著我的面吹牛懈息,可吹牛的內容都是我干的。 我是一名探鬼主播摹恰,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼辫继,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了俗慈?” 一聲冷哼從身側響起姑宽,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎闺阱,沒想到半個月后炮车,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡酣溃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年示血,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片救拉。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖瘫拣,靈堂內的尸體忽然破棺而出亿絮,到底是詐尸還是另有隱情,我是刑警寧澤麸拄,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布派昧,位于F島的核電站,受9級特大地震影響拢切,放射性物質發(fā)生泄漏蒂萎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一淮椰、第九天 我趴在偏房一處隱蔽的房頂上張望五慈。 院中可真熱鬧,春花似錦主穗、人聲如沸泻拦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽争拐。三九已至,卻和暖如春晦雨,著一層夾襖步出監(jiān)牢的瞬間架曹,已是汗流浹背隘冲。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留绑雄,地道東北人展辞。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像绳慎,于是被迫代替她去往敵國和親纵竖。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內容