Elasticsearch學(xué)習(xí)筆記(7)

目錄

Bootstrap Checks

總的來說鸥跟,我們有很多用戶遇到意外問題的經(jīng)驗(yàn)译蒂,因?yàn)樗麄儧]有配置重要的設(shè)置旭斥。在以前的Elasticsearch版本中,其中一些設(shè)置的錯(cuò)誤配置被記錄為警告裁厅”常可以理解,用戶有時(shí)會(huì)錯(cuò)過這些日志消息执虹。為了確保這些設(shè)置得到應(yīng)有的關(guān)注拓挥,Elasticsearch在啟動(dòng)時(shí)進(jìn)行了引導(dǎo)檢查。

這些引導(dǎo)檢查檢查各種Elasticsearch和系統(tǒng)的設(shè)置袋励,并將它們與適合Elasticsearch操作的值進(jìn)行比較侥啤。如果彈性搜索處于發(fā)展模式当叭,任何失敗的引導(dǎo)檢查都會(huì)作為警告出現(xiàn)在Elasticsearch日志中。如果Elasticsearch處于生產(chǎn)模式盖灸,任何引導(dǎo)檢查失敗都會(huì)導(dǎo)致Elasticsearch拒絕啟動(dòng)蚁鳖。

有一些引導(dǎo)檢查總是強(qiáng)制執(zhí)行,以防止Elasticsearch在不兼容的設(shè)置下運(yùn)行赁炎。這些檢查是單獨(dú)記錄的醉箕。

開發(fā)模式 vs 生產(chǎn)模式

默認(rèn)情況下,Elasticsearch綁定回路地址徙垫,用于HTTP和傳輸(內(nèi)部)通信讥裤。對(duì)于下載,把玩姻报,以及日常開發(fā)來說這是很好的己英,但是對(duì)于生產(chǎn)系統(tǒng)來說是沒有用的。要加入一個(gè)集群吴旋,一個(gè)Elasticsearch節(jié)點(diǎn)必須能夠通過傳輸通信到達(dá)损肛。要通過非環(huán)回地址加入集群,節(jié)點(diǎn)必須將傳輸綁定到非環(huán)回地址邮府,并且不能使用單節(jié)點(diǎn)發(fā)現(xiàn)。因此溉奕,如果一個(gè)Elasticsearch節(jié)點(diǎn)不能通過非環(huán)回地址與另一臺(tái)機(jī)器形成集群褂傀,則認(rèn)為該節(jié)點(diǎn)處于開發(fā)模式,如果它可以通過非環(huán)回地址加入集群加勤,那么它就處于生產(chǎn)模式仙辟。

注意,HTTP和傳輸可以獨(dú)立配置通過http.hosttransport.host;對(duì)于將單個(gè)節(jié)點(diǎn)通過HTTP配置為可訪問的鳄梅,來達(dá)到測(cè)試目的而無需觸發(fā)生產(chǎn)模式叠国,這非常有用。

單節(jié)點(diǎn)發(fā)現(xiàn)

我們意識(shí)到一些用戶需要將傳輸綁定到外部接口戴尸,以測(cè)試傳輸客戶機(jī)的使用情況粟焊。對(duì)于這種情況,我們提供發(fā)現(xiàn)類型single-node (通過設(shè)置discovery.type為single-node來配置它)孙蒙;在這種情況下项棠,節(jié)點(diǎn)將選擇自己為主節(jié)點(diǎn),而不會(huì)與任何其他節(jié)點(diǎn)連接集群挎峦。

強(qiáng)制引導(dǎo)檢查

如果您在生產(chǎn)環(huán)境中運(yùn)行單個(gè)節(jié)點(diǎn)香追,有可能逃避引導(dǎo)檢查(要么不將傳輸綁定到外部接口,要么將傳輸綁定到外部接口并將發(fā)現(xiàn)類型設(shè)置為單節(jié)點(diǎn))坦胶。對(duì)于這種情況透典,可以通過設(shè)置系統(tǒng)屬性強(qiáng)制執(zhí)行引導(dǎo)檢查 es.enforce.bootstrap.checkstrue(在Setting JVM options中設(shè)置這個(gè)晴楔, 或者用過增加-Des.enforce.bootstrap.checks=true到環(huán)境變量ES_JAVA_OPTS)。如果您處于這種特殊情況峭咒,我們強(qiáng)烈鼓勵(lì)您這樣做税弃。此系統(tǒng)屬性可用于強(qiáng)制執(zhí)行獨(dú)立于節(jié)點(diǎn)配置的引導(dǎo)檢查。

Heap size check

如果JVM以不相等的初始和最大堆大小啟動(dòng)讹语,那么在系統(tǒng)使用期間钙皮,當(dāng)JVM堆被調(diào)整大小時(shí),它很容易暫停顽决。為了避免這些調(diào)整大小暫停短条,最好啟動(dòng)JVM時(shí)初始堆大小等于最大堆大小。另外才菠,如果bootstrap.memory_lock啟用茸时,JVM將在啟動(dòng)時(shí)鎖定堆的初始大小。如果初始堆大小不等于最大堆大小赋访,則在調(diào)整大小之后可都,不會(huì)將所有JVM堆鎖定在內(nèi)存中。要通過堆大小檢查蚓耽,必須配置heap size渠牲。

File descriptor check

文件描述符是用于跟蹤打開的“文件”的Unix構(gòu)造。在Unix中步悠,everything is file签杈。例如,“文件”可以是物理文件鼎兽、虛擬文件(例如/proc/loadavg)或網(wǎng)絡(luò)套接字答姥。Elasticsearch需要大量的文件描述符(例如,每個(gè)碎片由多個(gè)段和其他文件組成谚咬,加上到其他節(jié)點(diǎn)的連接鹦付,等等)。這個(gè)引導(dǎo)檢查是在OS X和Linux上強(qiáng)制執(zhí)行的择卦。要通過文件描述符檢查敲长,可能需要配置文件描述符

Memory lock check

當(dāng)JVM執(zhí)行一次主要的垃圾收集時(shí)秉继,它會(huì)觸及堆的每個(gè)頁面潘明。如果這些頁面中的任何一個(gè)被交換到磁盤,它們將不得不被交換回內(nèi)存秕噪。這會(huì)導(dǎo)致大量磁盤抖動(dòng)钳降,而Elasticsearch更愿意使用這些磁盤抖動(dòng)來服務(wù)請(qǐng)求。有幾種方法可以配置系統(tǒng)來禁止交換腌巾。一種方法是請(qǐng)求JVM通過mlockall (Unix)或virtual lock (Windows)鎖定內(nèi)存中的堆遂填。這是通過Elasticsearch設(shè)置bootstrap.memory_lock完成的铲觉。但是,在某些情況下吓坚,這個(gè)設(shè)置可以傳遞給Elasticsearch撵幽,但是Elasticsearch不能鎖定堆(例如,如果elasticsearch用戶沒有memlock unlimited)礁击。內(nèi)存鎖檢查驗(yàn)證是否bootstrap.memory_lock設(shè)置被啟用盐杂,JVM能夠成功鎖定堆。要通過內(nèi)存鎖檢查哆窿,您可能需要配置bootstrap.memory_lock链烈。

線程最大數(shù)檢查

Elasticsearch通過將請(qǐng)求分解為多個(gè)階段并將這些階段傳遞給不同的線程池執(zhí)行器來執(zhí)行請(qǐng)求。對(duì)于Elasticsearch中的各種任務(wù)挚躯,有不同的線程池執(zhí)行器强衡。因此,Elasticsearch需要?jiǎng)?chuàng)建大量線程的能力码荔。最大線程數(shù)檢查確保Elasticsearch進(jìn)程有權(quán)在正常使用下創(chuàng)建足夠的線程漩勤。此檢查僅在Linux上強(qiáng)制執(zhí)行。如果您在Linux上缩搅,要通過最大線程數(shù)檢查越败,您必須配置您的系統(tǒng),使Elasticsearch進(jìn)程能夠創(chuàng)建至少4096個(gè)線程硼瓣。這可以通過/etc/security/limited.conf使用nproc設(shè)置來實(shí)現(xiàn)(請(qǐng)注意究飞,您可能還必須增加root用戶的限制)。

最大文件大小檢查

作為單個(gè)碎片組件的段文件和作為translog組件的translog生成可以變得很大(超過多個(gè)gb)巨双。在系統(tǒng)上彈性搜索進(jìn)程可以創(chuàng)建的文件的最大大小是有限定的噪猾,這會(huì)導(dǎo)致寫操作失敗霉祸。因此筑累,這里最安全的選項(xiàng)是最大文件大小是無限的,這就是最大文件大小引導(dǎo)檢查的作用丝蹭。要通過最大文件檢查慢宗,您必須配置您的系統(tǒng),使Elasticsearch進(jìn)程能夠?qū)懭霟o限大小的文件奔穿。這可以通過修改/etc/security/limited.conf文件中fsize設(shè)置為unlimited(注意镜沽,您可能還需要增加root用戶的限制)。

最大虛擬內(nèi)存檢查

Elasticsearch和Lucene使用mmap非常有效地將索引的部分映射到Elasticsearch地址空間贱田。這使某些索引數(shù)據(jù)遠(yuǎn)離JVM堆缅茉,但保存在內(nèi)存中,以便快速訪問男摧。為了有效蔬墩,彈性搜索應(yīng)該有無限的地址空間译打。最大大小的虛擬內(nèi)存檢查強(qiáng)制Elasticsearch進(jìn)程具有無限的地址空間,并且僅在Linux上執(zhí)行拇颅。要通過最大大小的虛擬內(nèi)存檢查奏司,您必須配置您的系統(tǒng),使Elasticsearch進(jìn)程能夠擁有無限的地址空間樟插。這可以通過修改/etc/security/kimits.conf文件韵洋,將as設(shè)置為unlimited來實(shí)現(xiàn)(注意,您可能還需要增加root用戶的限制)黄锤。

最大map數(shù)檢查

從上一節(jié)繼續(xù)搪缨,為了有效使用mmap,Elasticsearch還要求具有創(chuàng)建多個(gè)內(nèi)存映射區(qū)域的能力猜扮。最大映射計(jì)數(shù)檢查內(nèi)核是否允許進(jìn)程擁有至少262,144個(gè)內(nèi)存映射區(qū)域勉吻,并且僅在Linux上強(qiáng)制執(zhí)行。要通過最大映射計(jì)數(shù)檢查旅赢,必須通過sysctlvm.max_map_count設(shè)置為至少262144齿桃。

或者,只有在使用mmapfs作為索引的存儲(chǔ)類型時(shí)煮盼,才需要檢查最大映射計(jì)數(shù)短纵。如果不允許使用mmapfs,則不會(huì)強(qiáng)制執(zhí)行此引導(dǎo)檢查僵控。

客戶端JVM檢查

openjdk派生的JVM提供了兩種不同的JVM:客戶機(jī)JVM和服務(wù)器JVM香到。這些jvm使用不同的編譯器從Java字節(jié)碼生成可執(zhí)行的機(jī)器碼”ㄆ疲客戶機(jī)JVM根據(jù)啟動(dòng)時(shí)間和內(nèi)存占用進(jìn)行優(yōu)化悠就,而服務(wù)器JVM則根據(jù)性能最大化進(jìn)行優(yōu)化。這兩個(gè)vm之間的性能差異可能很大充易」Fⅲ客戶機(jī)JVM檢查確保Elasticsearch不在客戶機(jī)JVM中運(yùn)行。要通過客戶端JVM檢查盹靴,必須使用服務(wù)器VM啟動(dòng)Elasticsearch炸茧。在現(xiàn)代系統(tǒng)和操作系統(tǒng)上,服務(wù)器VM是默認(rèn)的稿静。

使用串行搜集器檢查

針對(duì)不同工作負(fù)載的openjdk派生jvm有各種垃圾收集器梭冠。串行收集器尤其適合于單個(gè)邏輯CPU機(jī)器或非常小的堆,它們都不適合運(yùn)行Elasticsearch改备。使用帶有彈性搜索的串行收集器會(huì)對(duì)性能造成很大的破壞控漠。串行收集器檢查確保Elasticsearch沒有配置為與串行收集器一起運(yùn)行。要通過串行收集器檢查悬钳,您不能使用串行收集器啟動(dòng)Elasticsearch(無論是來自您正在使用的JVM的默認(rèn)值盐捷,還是您已經(jīng)用-XX:+UseSerialGC顯式地指定了它)柬脸。請(qǐng)注意,隨Elasticsearch附帶的默認(rèn)JVM配置將Elasticsearch配置為使用CMS收集器毙驯。

系統(tǒng)調(diào)用過濾器檢查

Elasticsearch根據(jù)操作系統(tǒng)(例如Linux上的seccomp)安裝各種風(fēng)格的系統(tǒng)調(diào)用過濾器倒堕。安裝這些系統(tǒng)調(diào)用過濾器是為了防止執(zhí)行與分叉相關(guān)的系統(tǒng)調(diào)用的能力,分叉是一種防御機(jī)制爆价,用于抵御對(duì)Elasticsearch上任意代碼執(zhí)行攻擊垦巴。要通過系統(tǒng)調(diào)用篩選器檢查,您必須修復(fù)系統(tǒng)上阻止系統(tǒng)調(diào)用篩選器安裝的任何配置錯(cuò)誤(檢查日志)铭段,或者通過設(shè)置bootstrap.system_call_filterfalse禁用系統(tǒng)調(diào)用過濾器骤宣。

OnError和OnOutOfMemoryError檢查

如果JVM遇到致命錯(cuò)誤(OnError)或OutOfMemoryError (OnOutOfMemoryError),則JVM選項(xiàng)OnError和OnOutOfMemoryError允許執(zhí)行任意命令序愚。但是憔披,在默認(rèn)情況下,Elasticsearch系統(tǒng)調(diào)用過濾器(seccomp)是啟用的爸吮,這些過濾器可以防止分叉芬膝。因此,使用OnError或OnOutOfMemoryError與系統(tǒng)調(diào)用篩選器是不兼容的形娇。OnError和OnOutOfMemoryError檢查防止在使用這兩個(gè)JVM選項(xiàng)之一并啟用系統(tǒng)調(diào)用篩選器時(shí)啟動(dòng)Elasticsearch锰霜。這種檢查總是強(qiáng)制執(zhí)行的。要通過此檢查桐早,請(qǐng)不要啟用OnError或OnOutOfMemoryError癣缅;或者,升級(jí)到Java 8u92并使用JVM標(biāo)志ExitOnOutOfMemoryError哄酝。雖然它不具備OnError或OnOutOfMemoryError的全部功能友存,但在啟用seccomp的情況下,不支持任意分支陶衅。

搶險(xiǎn)體驗(yàn)檢查

OpenJDK項(xiàng)目提供了即將發(fā)布的版本的早期訪問快照屡立。這些版本不適合生產(chǎn)。早期訪問檢查檢測(cè)這些早期訪問快照万哪。要通過這個(gè)檢查侠驯,必須在JVM的發(fā)布版本上啟動(dòng)Elasticsearch抡秆。

G1GC檢查

JDK 8附帶的HotSpot JVM的早期版本已知在啟用G1GC收集器時(shí)存在可能導(dǎo)致索引損壞的問題奕巍。受影響的版本是JDK 8u40附帶的HotSpot版本之前的版本。G1GC檢查檢測(cè)HotSpot JVM的這些早期版本儒士。

所有權(quán)限檢查

所有權(quán)限檢查確保在引導(dǎo)過程中使用的安全策略不會(huì)授予java.security.AllPermission給Elasticsearch的止。在授予所有權(quán)限的情況下運(yùn)行等同于禁用安全管理器。

下一章 —— Elasticsearch學(xué)習(xí)筆記(8)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末着撩,一起剝皮案震驚了整個(gè)濱河市诅福,隨后出現(xiàn)的幾起案子匾委,更是在濱河造成了極大的恐慌,老刑警劉巖氓润,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赂乐,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡咖气,警方通過查閱死者的電腦和手機(jī)挨措,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來崩溪,“玉大人浅役,你說我怎么就攤上這事×嫖ǎ” “怎么了觉既?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)乳幸。 經(jīng)常有香客問我瞪讼,道長(zhǎng),這世上最難降的妖魔是什么粹断? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任尝艘,我火速辦了婚禮,結(jié)果婚禮上姿染,老公的妹妹穿的比我還像新娘背亥。我一直安慰自己,他們只是感情好悬赏,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布狡汉。 她就那樣靜靜地躺著,像睡著了一般闽颇。 火紅的嫁衣襯著肌膚如雪盾戴。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天兵多,我揣著相機(jī)與錄音尖啡,去河邊找鬼。 笑死剩膘,一個(gè)胖子當(dāng)著我的面吹牛衅斩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播怠褐,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼畏梆,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起奠涌,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤宪巨,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后溜畅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體捏卓,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年慈格,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了天吓。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡峦椰,死狀恐怖龄寞,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情汤功,我是刑警寧澤物邑,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站滔金,受9級(jí)特大地震影響色解,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜餐茵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一科阎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧忿族,春花似錦锣笨、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至隆豹,卻和暖如春椭岩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背璃赡。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工判哥, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人碉考。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓塌计,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親豆励。 傳聞我的和親對(duì)象是個(gè)殘疾皇子夺荒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容