--- sidebar: heading title: ES常è§ç¥è¯ç¹æ»ç» category: æ°æ®åº tag: - ES head: - - meta - name: keywords content: ES常è§ç¥è¯ç¹æ»ç»,éå ³ç³»åæ°æ®åº,elastic searché¢è¯é¢,es - - meta - name: description content: ES常è§ç¥è¯ç¹åé¢è¯é¢æ»ç»ï¼è®©å¤©ä¸æ²¡æé¾èçå «è¡æï¼ --- è·å¤§å®¶å享Elasticsearchçåºç¡ç¥è¯ï¼å®æ¯åä»ä¹ç以åå®ç使ç¨ååºæ¬åçã ## ä¸ãçæ´»ä¸çæ°æ® æç´¢å¼ææ¯å¯¹æ°æ®çæ£ç´¢ï¼æä»¥æä»¬å ä»çæ´»ä¸çæ°æ®è¯´èµ·ãæä»¬çæ´»ä¸çæ°æ®æ»ä½å为两ç§ï¼ - ç»æåæ°æ® - éç»æåæ°æ® **ç»æåæ°æ®ï¼** ä¹ç§°ä½è¡æ°æ®ï¼æ¯ç±äºç»´è¡¨ç»ææ¥é»è¾è¡¨è¾¾åå®ç°çæ°æ®ï¼ä¸¥æ ¼å°éµå¾ªæ°æ®æ ¼å¼ä¸é¿åº¦è§èï¼ä¸»è¦éè¿å ³ç³»åæ°æ®åºè¿è¡åå¨å管çãæå ·æåºå®æ ¼å¼ææéé¿åº¦çæ°æ®ï¼å¦æ°æ®åºï¼å æ°æ®çã **éç»æåæ°æ®ï¼** åå¯ç§°ä¸ºå ¨ææ°æ®ï¼ä¸å®é¿ææ åºå®æ ¼å¼ï¼ä¸éäºç±æ°æ®åºäºç»´è¡¨æ¥è¡¨ç°ï¼å æ¬æææ ¼å¼çåå ¬ææ¡£ãXMLãHTMLãWord ææ¡£ï¼é®ä»¶ï¼åç±»æ¥è¡¨ãå¾çåå é¢ãè§é¢ä¿¡æ¯çã 说æï¼å¦æè¦æ´ç»è´çåºåçè¯ï¼XMLãHTML å¯åå为åç»æåæ°æ®ãå 为å®ä»¬ä¹å ·æèªå·±ç¹å®çæ ç¾æ ¼å¼ï¼æä»¥æ¢å¯ä»¥æ ¹æ®éè¦æç»æåæ°æ®æ¥å¤çï¼ä¹å¯æ½ååºçº¯ææ¬æéç»æåæ°æ®æ¥å¤çã æ ¹æ®ä¸¤ç§æ°æ®åç±»ï¼æç´¢ä¹ç¸åºçå为两ç§ï¼ - ç»æåæ°æ®æç´¢ - éç»æåæ°æ®æç´¢ 对äºç»æåæ°æ®ï¼å 为å®ä»¬å ·æç¹å®çç»æï¼æä»¥æä»¬ä¸è¬é½æ¯å¯ä»¥éè¿å ³ç³»åæ°æ®åºï¼MySQLï¼Oracle çï¼çäºç»´è¡¨ï¼Tableï¼çæ¹å¼åå¨åæç´¢ï¼ä¹å¯ä»¥å»ºç«ç´¢å¼ã 对äºéç»æåæ°æ®ï¼ä¹å³å¯¹å ¨ææ°æ®çæç´¢ä¸»è¦æä¸¤ç§æ¹æ³ï¼ - é¡ºåºæ«æ - å ¨ææ£ç´¢ **é¡ºåºæ«æï¼** éè¿æååç§°ä¹å¯äºè§£å°å®çå¤§æ¦æç´¢æ¹å¼ï¼å³æç §é¡ºåºæ«æçæ¹å¼æ¥è¯¢ç¹å®çå ³é®åã ä¾å¦ç»ä½ ä¸å¼ æ¥çº¸ï¼è®©ä½ æ¾å°è¯¥æ¥çº¸ä¸âå¹³å®âçæåå¨åªäºå°æ¹åºç°è¿ãä½ è¯å®éè¦ä»å¤´å°å°¾ææ¥çº¸é è¯»æ«æä¸éç¶åæ è®°åºå ³é®åå¨åªäºçååºç°è¿ä»¥åå®çåºç°ä½ç½®ã è¿ç§æ¹å¼æ çæ¯æèæ¶çæä½æçï¼å¦ææ¥çº¸æçåä½å°ï¼èä¸çåè¾å¤çè³æå¤ä»½æ¥çº¸ï¼çä½ æ«æå®ä½ çç¼çä¹å·®ä¸å¤äºã **å ¨ææç´¢ï¼** 对éç»æåæ°æ®é¡ºåºæ«æå¾æ ¢ï¼æä»¬æ¯å¦å¯ä»¥è¿è¡ä¼åï¼ææä»¬çéç»æåæ°æ®æ³åæ³å¼å¾æä¸å®ç»æä¸å°±è¡äºåï¼ å°éç»æåæ°æ®ä¸çä¸é¨åä¿¡æ¯æååºæ¥ï¼éæ°ç»ç»ï¼ä½¿å ¶å徿ä¸å®ç»æï¼ç¶åå¯¹æ¤æä¸å®ç»æçæ°æ®è¿è¡æç´¢ï¼ä»èè¾¾å°æç´¢ç¸å¯¹è¾å¿«çç®çã è¿ç§æ¹å¼å°±ææäºå ¨ææ£ç´¢çåºæ¬æè·¯ãè¿é¨åä»éç»æåæ°æ®ä¸æååºçç¶åéæ°ç»ç»çä¿¡æ¯ï¼æä»¬ç§°ä¹ä¸ºç´¢å¼ã è¿ç§æ¹å¼ç主è¦å·¥ä½éå¨åæç´¢å¼çå建ï¼ä½æ¯å¯¹äºåææç´¢å´æ¯å¿«é髿çã ## äºãå 说说 Lucene éè¿å¯¹çæ´»ä¸æ°æ®çç±»åä½äºä¸ä¸ªç®çäºè§£ä¹åï¼æä»¬ç¥éå ³ç³»åæ°æ®åºç SQL æ£ç´¢æ¯å¤çä¸äºè¿ç§éç»æåæ°æ®çã è¿ç§éç»æåæ°æ®çå¤çéè¦ä¾èµå ¨ææç´¢ï¼èç®åå¸åºä¸å¼æ¾æºä»£ç çæå¥½å ¨ææ£ç´¢å¼æå·¥å ·å å°±å±äº Apache ç Luceneäºã 使¯ Lucene åªæ¯ä¸ä¸ªå·¥å ·å ï¼å®ä¸æ¯ä¸ä¸ªå®æ´çå ¨ææ£ç´¢å¼æãLucene çç®çæ¯ä¸ºè½¯ä»¶å¼å人åæä¾ä¸ä¸ªç®åæç¨çå·¥å ·å ï¼ä»¥æ¹ä¾¿çå¨ç®æ ç³»ç»ä¸å®ç°å ¨ææ£ç´¢çåè½ï¼æè æ¯ä»¥æ¤ä¸ºåºç¡å»ºç«èµ·å®æ´çå ¨ææ£ç´¢å¼æã ç®å以 Lucene 为åºç¡å»ºç«ç弿ºå¯ç¨å ¨ææç´¢å¼æä¸»è¦æ¯ Solr å Elasticsearchã Solr å Elasticsearch 齿¯æ¯è¾æççå ¨ææç´¢å¼æï¼è½å®æçåè½åæ§è½ä¹åºæ¬ä¸æ ·ã 使¯ ES æ¬èº«å°±å ·æåå¸å¼çç¹æ§åæå®è£ 使ç¨çç¹ç¹ï¼è Solr çåå¸å¼éè¦åå©ç¬¬ä¸æ¹æ¥å®ç°ï¼ä¾å¦éè¿ä½¿ç¨ ZooKeeper æ¥è¾¾å°åå¸å¼åè°ç®¡çã ä¸ç®¡æ¯ Solr è¿æ¯ Elasticsearch åºå±é½æ¯ä¾èµäº Luceneï¼è Lucene è½å®ç°å ¨ææç´¢ä¸»è¦æ¯å 为å®å®ç°äºåæç´¢å¼çæ¥è¯¢ç»æã å¦ä½çè§£åæç´¢å¼å¢ï¼ åå¦ç°æä¸ä»½æ°æ®ææ¡£ï¼ææ¡£çå 容å¦ä¸å嫿¯ï¼ - Java is the best programming language. - PHP is the best programming language. - Javascript is the best programming language. 为äºå建åæç´¢å¼ï¼æä»¬éè¿åè¯å¨å°æ¯ä¸ªææ¡£çå 容åæåæåç¬çè¯ï¼æä»¬ç§°å®ä¸ºè¯æ¡æ Termï¼ï¼å建ä¸ä¸ªå 嫿æä¸éå¤è¯æ¡çæåºå表ï¼ç¶åååºæ¯ä¸ªè¯æ¡åºç°å¨åªä¸ªææ¡£ã ç»æå¦ä¸æç¤ºï¼ ``` Term Doc_1 Doc_2 Doc_3 ------------------------------------- Java | X | | is | X | X | X the | X | X | X best | X | X | X programming | x | X | X language | X | X | X PHP | | X | Javascript | | | X ------------------------------------- ``` è¿ç§ç»æç±ææ¡£ä¸ææä¸éå¤è¯çå表ææï¼å¯¹äºå ¶ä¸æ¯ä¸ªè¯é½æä¸ä¸ªææ¡£å表ä¸ä¹å ³èã è¿ç§ç±å±æ§å¼æ¥ç¡®å®è®°å½çä½ç½®çç»æå°±æ¯åæç´¢å¼ã带æåæç´¢å¼çæä»¶æä»¬ç§°ä¸ºåææä»¶ã æä»¬å°ä¸é¢çå 容转æ¢ä¸ºå¾ç形弿¥è¯´æåæç´¢å¼çç»æä¿¡æ¯ï¼å¦ä¸å¾æç¤ºï¼  å ¶ä¸ä¸»è¦æå¦ä¸å ä¸ªæ ¸å¿æ¯è¯éè¦çè§£ï¼ - **è¯æ¡ï¼Termï¼ï¼** ç´¢å¼é颿å°çåå¨åæ¥è¯¢åå ï¼å¯¹äºè±ææ¥è¯´æ¯ä¸ä¸ªåè¯ï¼å¯¹äºä¸ææ¥è¯´ä¸è¬æåè¯åçä¸ä¸ªè¯ã - **è¯å ¸ï¼Term Dictionaryï¼ï¼** æåå ¸ï¼æ¯è¯æ¡ Term çéåãæç´¢å¼æçé常索å¼å使¯åè¯ï¼åè¯è¯å ¸æ¯ç±ææ¡£éåä¸åºç°è¿çææåè¯ææçå符串éåï¼åè¯è¯å ¸å æ¯æ¡ç´¢å¼é¡¹è®°è½½åè¯æ¬èº«çä¸äºä¿¡æ¯ä»¥åæåâåæå表âçæéã - **åæè¡¨ï¼Post listï¼ï¼** ä¸ä¸ªææ¡£é常ç±å¤ä¸ªè¯ç»æï¼åæè¡¨è®°å½çæ¯æä¸ªè¯å¨åªäºææ¡£éåºç°è¿ä»¥ååºç°çä½ç½®ãæ¯æ¡è®°å½ç§°ä¸ºä¸ä¸ªåæé¡¹ï¼Postingï¼ãåæè¡¨è®°å½çä¸åæ¯ææ¡£ç¼å·ï¼è¿åå¨äºè¯é¢çä¿¡æ¯ã - **åææä»¶ï¼Inverted Fileï¼ï¼** ææåè¯çåæå表å¾å¾é¡ºåºå°åå¨å¨ç£ççæä¸ªæä»¶éï¼è¿ä¸ªæä»¶è¢«ç§°ä¹ä¸ºåææä»¶ï¼åææä»¶æ¯åå¨åæç´¢å¼çç©çæä»¶ã ä»ä¸å¾æä»¬å¯ä»¥äºè§£å°åæç´¢å¼ä¸»è¦ç±ä¸¤ä¸ªé¨åç»æï¼ - è¯å ¸ - åææä»¶ è¯å ¸ååæè¡¨æ¯ Lucene ä¸å¾éè¦çä¸¤ç§æ°æ®ç»æï¼æ¯å®ç°å¿«éæ£ç´¢çéè¦åºç³ãè¯å ¸ååææä»¶æ¯å两é¨ååå¨çï¼è¯å ¸å¨å åä¸èåææä»¶åå¨å¨ç£çä¸ã ## ä¸ãES æ ¸å¿æ¦å¿µ ä¸äºåºç¡ç¥è¯çéºå«ä¹åæä»¬æ£å¼è¿å ¥ä»å¤©çä¸»è§ Elasticsearch çä»ç»ã ES æ¯ä½¿ç¨ Java ç¼åçä¸ç§å¼æºæç´¢å¼æï¼å®å¨å é¨ä½¿ç¨ Lucene åç´¢å¼ä¸æç´¢ï¼éè¿å¯¹ Lucene çå°è£ ï¼éèäº Lucene ç夿æ§ï¼åè代ä¹çæä¾ä¸å¥ç®åä¸è´ç RESTful APIã ç¶èï¼Elasticsearch ä¸ä» ä» æ¯ Luceneï¼å¹¶ä¸ä¹ä¸ä» ä» åªæ¯ä¸ä¸ªå ¨ææç´¢å¼æã å®å¯ä»¥è¢«ä¸é¢è¿æ ·åç¡®çå½¢å®¹ï¼ - ä¸ä¸ªåå¸å¼ç宿¶ææ¡£åå¨ï¼æ¯ä¸ªå段å¯ä»¥è¢«ç´¢å¼ä¸æç´¢ã - ä¸ä¸ªåå¸å¼å®æ¶åææç´¢å¼æã - è½èä»»ä¸ç¾ä¸ªæå¡èç¹çæ©å±ï¼å¹¶æ¯æ PB 级å«çç»æåæè éç»æåæ°æ®ã å®ç½å¯¹ Elasticsearch çä»ç»æ¯ Elasticsearch æ¯ä¸ä¸ªåå¸å¼ã坿©å±ãè¿å®æ¶çæç´¢ä¸æ°æ®åæå¼æã æä»¬éè¿ä¸äºæ ¸å¿æ¦å¿µæ¥çä¸ Elasticsearch æ¯å¦ä½åå°åå¸å¼ï¼å¯æ©å±åè¿å®æ¶æç´¢çã ### é群ï¼Clusterï¼ ES çé群æå»ºå¾ç®åï¼ä¸éè¦ä¾èµç¬¬ä¸æ¹åè°ç®¡çç»ä»¶ï¼èªèº«å é¨å°±å®ç°äºé群ç管çåè½ã ES é群ç±ä¸ä¸ªæå¤ä¸ª Elasticsearch èç¹ç»æï¼æ¯ä¸ªèç¹é ç½®ç¸åç cluster.name å³å¯å å ¥é群ï¼é»è®¤å¼ä¸º âelasticsearchâã ç¡®ä¿ä¸åçç¯å¢ä¸ä½¿ç¨ä¸åçé群åç§°ï¼å¦åæç»ä¼å¯¼è´èç¹å å ¥é误çé群ã ä¸ä¸ª Elasticsearch æå¡å¯å¨å®ä¾å°±æ¯ä¸ä¸ªèç¹ï¼Nodeï¼ãèç¹éè¿ node.name æ¥è®¾ç½®èç¹åç§°ï¼å¦æä¸è®¾ç½®åå¨å¯å¨æ¶ç»èç¹åé ä¸ä¸ªéæºéç¨å¯ä¸æ è¯ç¬¦ä½ä¸ºåç§°ã #### â åç°æºå¶ é£ä¹æä¸ä¸ªé®é¢ï¼ES å 鍿¯å¦ä½éè¿ä¸ä¸ªç¸åç设置 cluster.name å°±è½å°ä¸åçèç¹è¿æ¥å°åä¸ä¸ªé群çï¼çæ¡æ¯ Zen Discoveryã Zen Discovery æ¯ Elasticsearch çå ç½®é»è®¤åç°æ¨¡åï¼åç°æ¨¡åçèè´£æ¯åç°é群ä¸çèç¹ä»¥åé举 Master èç¹ï¼ã 宿ä¾åæååºäºæä»¶çåç°ï¼å¹¶ä¸å¯ä»¥æ©å±ä¸ºéè¿æä»¶æ¯æäºç¯å¢åå ¶ä»å½¢å¼çåç°ã Zen Discovery ä¸å ¶ä»æ¨¡åéæï¼ä¾å¦ï¼èç¹ä¹é´çææéä¿¡é½ä½¿ç¨ Transport 模å宿ãèç¹ä½¿ç¨åç°æºå¶éè¿ Ping çæ¹å¼æ¥æ¾å ¶ä»èç¹ã Elasticsearch é»è®¤è¢«é 置为使ç¨åæåç°ï¼ä»¥é²æ¢èç¹æ æä¸å å ¥é群ãåªæå¨åä¸å°æºå¨ä¸è¿è¡çèç¹æä¼èªå¨ç»æé群ã 妿é群çèç¹è¿è¡å¨ä¸åçæºå¨ä¸ï¼ä½¿ç¨åæï¼ä½ å¯ä»¥ä¸º Elasticsearch æä¾ä¸äºå®åºè¯¥å»å°è¯è¿æ¥çèç¹å表ã å½ä¸ä¸ªèç¹èç³»å°åæå表ä¸çæåæ¶ï¼å®å°±ä¼å¾å°æ´ä¸ªé群ææèç¹çç¶æï¼ç¶åå®ä¼èç³» Master èç¹ï¼å¹¶å å ¥é群ã è¿æå³çåæå表ä¸éè¦å å«é群ä¸çææèç¹ï¼ å®åªæ¯éè¦è¶³å¤çèç¹ï¼å½ä¸ä¸ªæ°èç¹èç³»ä¸å ¶ä¸ä¸ä¸ªå¹¶ä¸è¯´ä¸è¯å°±å¯ä»¥äºã å¦æä½ ä½¿ç¨ Master åéèç¹ä½ä¸ºåæå表ï¼ä½ åªè¦ååºä¸ä¸ªå°±å¯ä»¥äºãè¿ä¸ªé ç½®å¨ elasticsearch.yml æä»¶ä¸ï¼ ``` discovery.zen.ping.unicast.hosts: ["host1", "host2:port"] ``` èç¹å¯å¨åå Ping ï¼å¦æ `discovery.zen.ping.unicast.hosts` æè®¾ç½®ï¼å Ping 设置ä¸ç Host ï¼å¦åå°è¯ ping localhost çå 个端å£ã Elasticsearch æ¯æåä¸ä¸ªä¸»æºå¯å¨å¤ä¸ªèç¹ï¼Ping ç Response ä¼å å«è¯¥èç¹çåºæ¬ä¿¡æ¯ä»¥å该èç¹è®¤ä¸ºç Master èç¹ã é举å¼å§ï¼å ä»åèç¹è®¤ä¸ºç Master ä¸éï¼è§åå¾ç®åï¼æç § ID çåå ¸åºæåºï¼å第ä¸ä¸ªã妿åèç¹é½æ²¡æè®¤ä¸ºç Master ï¼å仿æèç¹ä¸éæ©ï¼è§ååä¸ã è¿éæä¸ªéå¶æ¡ä»¶å°±æ¯ `discovery.zen.minimum_master_nodes` ï¼å¦æèç¹æ°è¾¾ä¸å°æå°å¼çéå¶ï¼å循ç¯ä¸è¿°è¿ç¨ï¼ç´å°èç¹æ°è¶³å¤å¯ä»¥å¼å§éä¸¾ã æåéä¸¾ç»ææ¯è¯å®è½é举åºä¸ä¸ª Master ï¼å¦æåªæä¸ä¸ª Local èç¹é£å°±éåºçæ¯èªå·±ã 妿å½åèç¹æ¯ Master ï¼åå¼å§çå¾ èç¹æ°è¾¾å° `discovery.zen.minimum_master_nodes`ï¼ç¶åæä¾æå¡ã 妿å½åèç¹ä¸æ¯ Master ï¼åå°è¯å å ¥ Master ãElasticsearch å°ä»¥ä¸æå¡åç°ä»¥åéä¸»çæµç¨å«å Zen Discovery ã ç±äºå®æ¯æä»»ææ°ç®çéç¾¤ï¼ 1- N ï¼ï¼æä»¥ä¸è½å Zookeeper 飿 ·éå¶èç¹å¿ é¡»æ¯å¥æ°ï¼ä¹å°±æ æ³ç¨æç¥¨çæºå¶æ¥é主ï¼èæ¯éè¿ä¸ä¸ªè§åã åªè¦ææçèç¹é½éµå¾ªåæ ·çè§åï¼å¾å°çä¿¡æ¯é½æ¯å¯¹ççï¼éåºæ¥ç主èç¹è¯å®æ¯ä¸è´çã ä½åå¸å¼ç³»ç»çé®é¢å°±åºå¨ä¿¡æ¯ä¸å¯¹ççæ åµï¼è¿æ¶åå¾å®¹æåºç°èè£ï¼Split-Brainï¼çé®é¢ã 大夿°è§£å³æ¹æ¡å°±æ¯è®¾ç½®ä¸ä¸ª Quorum å¼ï¼è¦æ±å¯ç¨èç¹å¿ é¡»å¤§äº Quorumï¼ä¸è¬æ¯è¶ è¿åæ°èç¹ï¼ï¼æè½å¯¹å¤æä¾æå¡ã è Elasticsearch ä¸ï¼è¿ä¸ª Quorum çé ç½®å°±æ¯ `discovery.zen.minimum_master_nodes` ã #### â¡èç¹çè§è² æ¯ä¸ªèç¹æ¢å¯ä»¥æ¯åé主èç¹ä¹å¯ä»¥æ¯æ°æ®èç¹ï¼éè¿å¨é ç½®æä»¶ ../config/elasticsearch.yml ä¸è®¾ç½®å³å¯ï¼é»è®¤é½ä¸º trueã ``` node.master: true //æ¯å¦åé主èç¹ node.data: true //æ¯å¦æ°æ®èç¹ ``` æ°æ®èç¹è´è´£æ°æ®çåå¨åç¸å ³çæä½ï¼ä¾å¦å¯¹æ°æ®è¿è¡å¢ãå ãæ¹ãæ¥åèåçæä½ï¼æä»¥æ°æ®èç¹ï¼Data èç¹ï¼å¯¹æºå¨é ç½®è¦æ±æ¯è¾é«ï¼å¯¹ CPUãå åå I/O çæ¶èå¾å¤§ã é常éçéç¾¤çæ©å¤§ï¼éè¦å¢å æ´å¤çæ°æ®èç¹æ¥æé«æ§è½åå¯ç¨æ§ã åé主èç¹å¯ä»¥è¢«é举为主èç¹ï¼Master èç¹ï¼ï¼é群ä¸åªæåé主èç¹ææé举æå被é举æï¼å ¶ä»èç¹ä¸åä¸é举çå·¥ä½ã 主èç¹è´è´£å建索å¼ãå é¤ç´¢å¼ãè·è¸ªåªäºèç¹æ¯ç¾¤éçä¸é¨åï¼å¹¶å³å®åªäºåçåé ç»ç¸å ³çèç¹ã追踪é群ä¸èç¹çç¶æçï¼ç¨³å®ç主èç¹å¯¹é群çå¥åº·æ¯é常éè¦çã  ä¸ä¸ªèç¹æ¢å¯ä»¥æ¯åé主èç¹ä¹å¯ä»¥æ¯æ°æ®èç¹ï¼ä½æ¯ç±äºæ°æ®èç¹å¯¹ CPUãå åæ ¸ I/O æ¶èé½å¾å¤§ã æä»¥å¦ææä¸ªèç¹æ¢æ¯æ°æ®èç¹åæ¯ä¸»èç¹ï¼é£ä¹å¯è½ä¼å¯¹ä¸»èç¹äº§çå½±åä»è对æ´ä¸ªé群çç¶æäº§çå½±åã å æ¤ä¸ºäºæé«é群çå¥åº·æ§ï¼æä»¬åºè¯¥å¯¹ Elasticsearch é群ä¸çèç¹å好è§è²ä¸çåååé离ãå¯ä»¥ä½¿ç¨å 个é ç½®è¾ä½çæºå¨ç¾¤ä½ä¸ºåé主èç¹ç¾¤ã 主èç¹åå ¶ä»èç¹ä¹é´éè¿ Ping çæ¹å¼äºæ£æ¥ï¼ä¸»èç¹è´è´£ Ping ææå ¶ä»èç¹ï¼å¤ææ¯å¦æèç¹å·²ç»ææãå ¶ä»èç¹ä¹éè¿ Ping çæ¹å¼å¤æä¸»èç¹æ¯å¦å¤äºå¯ç¨ç¶æã è½ç¶å¯¹èç¹åäºè§è²åºåï¼ä½æ¯ç¨æ·ç请æ±å¯ä»¥åå¾ä»»ä½ä¸ä¸ªèç¹ï¼å¹¶ç±è¯¥èç¹è´è´£åå请æ±ãæ¶éç»æçæä½ï¼èä¸éè¦ä¸»èç¹è½¬åã è¿ç§èç¹å¯ç§°ä¹ä¸ºåè°èç¹ï¼åè°èç¹æ¯ä¸éè¦æå®åé ç½®çï¼é群ä¸çä»»ä½èç¹é½å¯ä»¥å å½åè°èç¹çè§è²ã #### â¢èè£ç°è±¡ 忶妿ç±äºç½ç»æå ¶ä»åå 导è´é群ä¸é举åºå¤ä¸ª Master èç¹ï¼ä½¿å¾æ°æ®æ´æ°æ¶åºç°ä¸ä¸è´ï¼è¿ç§ç°è±¡ç§°ä¹ä¸ºèè£ï¼å³é群ä¸ä¸åçèç¹å¯¹äº Master çéæ©åºç°äºåæ§ï¼åºç°äºå¤ä¸ª Master ç«äºã âèè£âé®é¢å¯è½æä»¥ä¸å 个åå é æï¼ - **ç½ç»é®é¢ï¼** é群é´çç½ç»å»¶è¿å¯¼è´ä¸äºèç¹è®¿é®ä¸å° Masterï¼è®¤ä¸º Master ææäºä»èéä¸¾åºæ°ç Masterï¼å¹¶å¯¹ Master ä¸çåçå坿¬æ 红ï¼åé æ°ç主åçã - **èç¹è´è½½ï¼** 主èç¹çè§è²æ¢ä¸º Master å为 Dataï¼è®¿é®éè¾å¤§æ¶å¯è½ä¼å¯¼è´ ES 忢ååºï¼åæ»ç¶æï¼é æå¤§é¢ç§¯å»¶è¿ï¼æ¤æ¶å ¶ä»èç¹å¾ä¸å°ä¸»èç¹çååºè®¤ä¸ºä¸»èç¹ææäºï¼ä¼éæ°éå主èç¹ã - **å ååæ¶ï¼** 主èç¹çè§è²æ¢ä¸º Master å为 Dataï¼å½ Data èç¹ä¸ç ES è¿ç¨å ç¨çå åè¾å¤§ï¼å¼å JVM çå¤§è§æ¨¡å ååæ¶ï¼é æ ES è¿ç¨å¤±å»ååºã 为äºé¿å èè£ç°è±¡çåçï¼æä»¬å¯ä»¥ä»åå çæéè¿ä»¥ä¸å 个æ¹é¢æ¥ååºä¼åæªæ½ï¼ - **éå½è°å¤§ååºæ¶é´ï¼åå°è¯¯å¤ã** éè¿åæ° discovery.zen.ping_timeout 设置èç¹ç¶æçååºæ¶é´ï¼é»è®¤ä¸º 3sï¼å¯ä»¥éå½è°å¤§ã 妿 Master å¨è¯¥ååºæ¶é´çèå´å 没æååºååºåºçï¼å¤æè¯¥èç¹å·²ç»ææäºãè°å¤§åæ°ï¼å¦ 6sï¼`discovery.zen.ping_timeout:6`ï¼ï¼å¯éå½åå°è¯¯å¤ã - **é举触åã** æä»¬éè¦å¨åéé群ä¸çèç¹çé ç½®æä»¶ä¸è®¾ç½®åæ° `discovery.zen.munimum_master_nodes` çå¼ã è¿ä¸ªåæ°è¡¨ç¤ºå¨é举主èç¹æ¶éè¦åä¸é举çåé主èç¹çèç¹æ°ï¼é»è®¤å¼æ¯ 1ï¼å®æ¹å»ºè®®åå¼(`master_eligibel_nodes2)+1`ï¼å ¶ä¸ `master_eligibel_nodes` 为åé主èç¹ç个æ°ã è¿æ ·åæ¢è½é²æ¢èè£ç°è±¡çåçï¼ä¹è½æå¤§éåº¦å°æåé群çé«å¯ç¨æ§ï¼å 为åªè¦ä¸å°äº `discovery.zen.munimum_master_nodes` 个åéèç¹åæ´»ï¼é举工ä½å°±è½æ£å¸¸è¿è¡ã å½å°äºè¿ä¸ªå¼çæ¶åï¼æ æ³è§¦åé举è¡ä¸ºï¼éç¾¤æ æ³ä½¿ç¨ï¼ä¸ä¼é æåçæ··ä¹±çæ åµã - **è§è²å离ã** 峿¯ä¸é¢æä»¬æå°çåé主èç¹åæ°æ®èç¹è¿è¡è§è²å离ï¼è¿æ ·å¯ä»¥å轻主èç¹çè´æ ï¼é²æ¢ä¸»èç¹çåæ»ç¶æåçï¼åå°å¯¹ä¸»èç¹âå·²æ»âç误å¤ã ### åçï¼Shardsï¼ ES æ¯æ PB çº§å ¨ææç´¢ï¼å½ç´¢å¼ä¸çæ°æ®éå¤ªå¤§çæ¶åï¼ES éè¿æ°´å¹³æåçæ¹å¼å°ä¸ä¸ªç´¢å¼ä¸çæ°æ®æååºæ¥åé å°ä¸åçæ°æ®åä¸ï¼æååºæ¥çæ°æ®åºåç§°ä¹ä¸ºä¸ä¸ªåçã è¿ç±»ä¼¼äº MySQL çååºå表ï¼åªä¸è¿ MySQL ååºå表éè¦åå©ç¬¬ä¸æ¹ç»ä»¶è ES å é¨èªèº«å®ç°äºæ¤åè½ã å¨ä¸ä¸ªå¤åççç´¢å¼ä¸åå ¥æ°æ®æ¶ï¼éè¿è·¯ç±æ¥ç¡®å®å ·ä½åå ¥åªä¸ä¸ªåçä¸ï¼æä»¥å¨å建索å¼çæ¶åéè¦æå®åççæ°éï¼å¹¶ä¸åççæ°é䏿¦ç¡®å®å°±ä¸è½ä¿®æ¹ã åççæ°éåä¸é¢ä»ç»ç坿¬æ°é齿¯å¯ä»¥éè¿åå»ºç´¢å¼æ¶ç Settings æ¥é ç½®ï¼ES é»è®¤ä¸ºä¸ä¸ªç´¢å¼å建 5 个主åç, å¹¶åå«ä¸ºæ¯ä¸ªåçå建ä¸ä¸ªå¯æ¬ã ``` PUT /myIndex { "settings" : { "number_of_shards" : 5, "number_of_replicas" : 1 } } ``` ES éè¿åççåè½ä½¿å¾ç´¢å¼å¨è§æ¨¡ä¸åæ§è½ä¸é½å¾å°æåï¼æ¯ä¸ªåç齿¯ Lucene ä¸çä¸ä¸ªç´¢å¼æä»¶ï¼æ¯ä¸ªåçå¿ é¡»æä¸ä¸ªä¸»åçåé¶å°å¤ä¸ªå¯æ¬ã ### 坿¬ï¼Replicasï¼ å¯æ¬å°±æ¯å¯¹åçç Copyï¼æ¯ä¸ªä¸»åç齿ä¸ä¸ªæå¤ä¸ªå¯æ¬åçï¼å½ä¸»åçå¼å¸¸æ¶ï¼å¯æ¬å¯ä»¥æä¾æ°æ®çæ¥è¯¢çæä½ã 主åçå对åºç坿¬åçæ¯ä¸ä¼å¨åä¸ä¸ªèç¹ä¸çï¼æä»¥å¯æ¬åçæ°çæå¤§å¼æ¯ N-1ï¼å ¶ä¸ N 为èç¹æ°ï¼ã å¯¹ææ¡£çæ°å»ºãç´¢å¼åå é¤è¯·æ±é½æ¯åæä½ï¼å¿ é¡»å¨ä¸»åçä¸é¢å®æä¹åæè½è¢«å¤å¶å°ç¸å ³ç坿¬åçã ES ä¸ºäºæé«åå ¥çè½åè¿ä¸ªè¿ç¨æ¯å¹¶ååçï¼åæ¶ä¸ºäºè§£å³å¹¶ååçè¿ç¨ä¸æ°æ®å²çªçé®é¢ï¼ES éè¿ä¹è§éçæ¹å¼æ§å¶ï¼æ¯ä¸ªææ¡£é½æä¸ä¸ª` _version` ï¼çæ¬ï¼å·ï¼å½ææ¡£è¢«ä¿®æ¹æ¶çæ¬å·éå¢ã 䏿¦ææç坿¬åç齿¥ååæåæä¼ååè°èç¹æ¥åæåï¼åè°èç¹å客æ·ç«¯æ¥åæåã  ä»ä¸å¾å¯ä»¥çåºä¸ºäºè¾¾å°é«å¯ç¨ï¼Master èç¹ä¼é¿å å°ä¸»åçå坿¬åçæ¾å¨åä¸ä¸ªèç¹ä¸ã åè®¾è¿æ¶èç¹ Node1 æå¡å®æºäºæè ç½ç»ä¸å¯ç¨äºï¼é£ä¹ä¸»èç¹ä¸ä¸»åç S0 ä¹å°±ä¸å¯ç¨äºã 幸è¿çæ¯è¿åå¨å¦å¤ä¸¤ä¸ªèç¹è½æ£å¸¸å·¥ä½ï¼è¿æ¶ ES ä¼éæ°é举æ°ç主èç¹ï¼èä¸è¿ä¸¤ä¸ªèç¹ä¸å卿们æéè¦ç S0 çæææ°æ®ã æä»¬ä¼å° S0 ç坿¬åçæå为主åçï¼è¿ä¸ªæå主åççè¿ç¨æ¯ç¬é´åççãæ¤æ¶é群çç¶æå°ä¼ä¸º Yellowã 为ä»ä¹æä»¬éç¾¤ç¶ææ¯ Yellow è䏿¯ Green å¢ï¼è½ç¶æä»¬æ¥æææç 2 个主åçï¼ä½æ¯åæ¶è®¾ç½®äºæ¯ä¸ªä¸»åçéè¦å¯¹åºä¸¤ä»½å¯æ¬åçï¼èæ¤æ¶åªåå¨ä¸ä»½å¯æ¬åçãæä»¥é群ä¸è½ä¸º Green çç¶æã 妿æä»¬åæ ·å ³éäº Node2 ï¼æä»¬çç¨åºä¾ç¶å¯ä»¥ä¿æå¨ä¸ä¸¢å¤±ä»»ä½æ°æ®çæ åµä¸è¿è¡ï¼å 为 Node3 为æ¯ä¸ä¸ªåçé½ä¿ççä¸ä»½å¯æ¬ã 妿æä»¬éæ°å¯å¨ Node1 ï¼é群å¯ä»¥å°ç¼ºå¤±ç坿¬åç忬¡è¿è¡åé ï¼é£ä¹é群çç¶æåå°æ¢å¤å°åæ¥çæ£å¸¸ç¶æã 妿 Node1 ä¾ç¶æ¥æçä¹åçåçï¼å®å°å°è¯å»éç¨å®ä»¬ï¼åªä¸è¿è¿æ¶ Node1 èç¹ä¸çåçä¸åæ¯ä¸»åçèæ¯å¯æ¬åçäºï¼å¦ææé´ææ´æ¹çæ°æ®åªéè¦ä»ä¸»åçä¸å¤å¶ä¿®æ¹çæ°æ®æä»¶å³å¯ã #### å°ç»ï¼ - å°æ°æ®åçæ¯ä¸ºäºæé«å¯å¤çæ°æ®ç容éåæäºè¿è¡æ°´å¹³æ©å±ï¼ä¸ºåçå坿¬æ¯ä¸ºäºæé«é群çç¨³å®æ§åæé«å¹¶åéã - 坿¬æ¯ä¹æ³ï¼è¶å¤æ¶èè¶å¤§ï¼ä½ä¹è¶ä¿é©ãåçæ¯é¤æ³ï¼åçè¶å¤ï¼ååçæ°æ®å°±è¶å°ä¹è¶åæ£ã - 坿¬è¶å¤ï¼é群çå¯ç¨æ§å°±è¶é«ï¼ä½æ¯ç±äºæ¯ä¸ªåçé½ç¸å½äºä¸ä¸ª Lucene çç´¢å¼æä»¶ï¼ä¼å ç¨ä¸å®çæä»¶å¥æãå åå CPUãå¹¶ä¸åçé´çæ°æ®åæ¥ä¹ä¼å ç¨ä¸å®çç½ç»å¸¦å®½ï¼æä»¥ç´¢å¼çåçæ°å坿¬æ°ä¹ä¸æ¯è¶å¤è¶å¥½ã ### æ å°ï¼Mappingï¼ æ å°æ¯ç¨äºå®ä¹ ES 对索å¼ä¸å段çåå¨ç±»åãåè¯æ¹å¼åæ¯å¦åå¨çä¿¡æ¯ï¼å°±åæ°æ®åºä¸ç Schema ï¼æè¿°äºææ¡£å¯è½å ·æçåæ®µæå±æ§ãæ¯ä¸ªåæ®µçæ°æ®ç±»åã åªä¸è¿å ³ç³»åæ°æ®åºå»ºè¡¨æ¶å¿ é¡»æå®å段类åï¼è ES 对äºå段类åå¯ä»¥ä¸æå®ç¶å卿坹忮µç±»åçæµï¼ä¹å¯ä»¥å¨åå»ºç´¢å¼æ¶å ·ä½æå®å段çç±»åã 坹忮µç±»åæ ¹æ®æ°æ®æ ¼å¼èªå¨è¯å«çæ å°ç§°ä¹ä¸ºå¨ææ å°ï¼Dynamic Mappingï¼ï¼æä»¬åå»ºç´¢å¼æ¶å ·ä½å®ä¹å段类åçæ å°ç§°ä¹ä¸ºéææ å°ææ¾ç¤ºæ å°ï¼Explicit Mappingï¼ã å¨è®²è§£å¨ææ å°åéææ å°ç使ç¨åï¼æä»¬å æ¥äºè§£ä¸ ES ä¸çæ°æ®æåªäºå段类åï¼ä¹åæä»¬å讲解为ä»ä¹æä»¬åå»ºç´¢å¼æ¶éè¦å»ºç«éææ å°èä¸ä½¿ç¨å¨ææ å°ã ESï¼v6.8ï¼ä¸åæ®µæ°æ®ç±»åä¸»è¦æä»¥ä¸å ç±»ï¼  Text ç¨äºç´¢å¼å ¨æå¼çåæ®µï¼ä¾å¦çµåé®ä»¶æ£ææäº§å说æãè¿äºå段æ¯è¢«åè¯çï¼å®ä»¬éè¿åè¯å¨ä¼ é ï¼ä»¥å¨è¢«ç´¢å¼ä¹åå°å符串转æ¢ä¸ºå个æ¯è¯çå表ã åæè¿ç¨å 许 Elasticsearch æç´¢å个åè¯ä¸æ¯ä¸ªå®æ´çææ¬åæ®µãææ¬åæ®µä¸ç¨äºæåºï¼å¾å°ç¨äºèåã Keyword ç¨äºç´¢å¼ç»æåå 容çåæ®µï¼ä¾å¦çµåé®ä»¶å°åï¼ä¸»æºåï¼ç¶æä»£ç ï¼é®æ¿ç¼ç ææ ç¾ãå®ä»¬é常ç¨äºè¿æ»¤ï¼æåºï¼åèåãKeyword åæ®µåªè½æå ¶ç¡®åå¼è¿è¡æç´¢ã éè¿å¯¹å段类åçäºè§£æä»¬ç¥éæäºå段éè¦æç¡®å®ä¹çï¼ä¾å¦æä¸ªåæ®µæ¯ Text ç±»åè¿æ¯ Keyword ç±»å差嫿¯å¾å¤§çï¼æ¶é´å段ä¹è®¸æä»¬éè¦æå®å®çæ¶é´æ ¼å¼ï¼è¿æä¸äºå段æä»¬éè¦æå®ç¹å®çåè¯å¨ççã 妿éç¨å¨ææ å°æ¯ä¸è½ç²¾ç¡®åå°è¿äºçï¼èªå¨è¯å«å¸¸å¸¸ä¼ä¸æä»¬ææçæäºå·®å¼ã æä»¥å建索å¼çæ¶åä¸ä¸ªå®æ´çæ ¼å¼åºè¯¥æ¯æå®åçå坿¬æ°ä»¥å Mapping çå®ä¹ï¼å¦ä¸ï¼ ``` PUT my_index { "settings" : { "number_of_shards" : 5, "number_of_replicas" : 1 } "mappings": { "_doc": { "properties": { "title": { "type": "text" }, "name": { "type": "text" }, "age": { "type": "integer" }, "created": { "type": "date", "format": "strict_date_optional_time||epoch_millis" } } } } } ``` ## åãES çåºæ¬ä½¿ç¨ å¨å³å®ä½¿ç¨ Elasticsearch çæ¶åé¦å è¦èèçæ¯çæ¬é®é¢ï¼Elasticsearch ï¼æé¤ 0.x å 1.xï¼ç®åæå¦ä¸å¸¸ç¨ç稳å®çä¸»çæ¬ï¼2.xï¼5.xï¼6.xï¼7.xï¼currentï¼ã ä½ å¯è½ä¼åç°æ²¡æ 3.x å 4.xï¼ES ä» 2.4.6 ç´æ¥è·³å°äº 5.0.0ãå ¶å®æ¯ä¸ºäº ELKï¼ElasticSearchï¼Logstashï¼Kibanaï¼ææ¯æ ççæ¬ç»ä¸ï¼å çç»ç¨æ·å¸¦æ¥æ··ä¹±ã å¨ Elasticsearch æ¯ 2.x ï¼2.x çæåä¸ç 2.4.6 çå叿¶é´æ¯ July 25, 2017ï¼ çæ åµä¸ï¼Kibana å·²ç»æ¯ 4.xï¼Kibana 4.6.5 çå叿¶é´æ¯ July 25, 2017ï¼ã é£ä¹å¨ Kibana çä¸ä¸ä¸»çæ¬è¯å®æ¯ 5.x äºï¼æä»¥ Elasticsearch ç´æ¥å°èªå·±çä¸»çæ¬åå¸ä¸º 5.0.0 äºã ç»ä¸ä¹åï¼æä»¬éçæ¬å°±ä¸ä¼ç¹è±«å°æäºï¼æä»¬éå® Elasticsearch ççæ¬ååéæ©ç¸åçæ¬ç Kibana å°±è¡äºï¼ä¸ç¨æ å¿§çæ¬ä¸å ¼å®¹çé®é¢ã Elasticsearch æ¯ä½¿ç¨ Java æå»ºï¼æä»¥é¤äºæ³¨æ ELK ææ¯ççæ¬ç»ä¸ï¼æä»¬å¨éæ© Elasticsearch ççæ¬çæ¶åè¿éè¦æ³¨æ JDK ççæ¬ã å 为æ¯ä¸ªå¤§çæ¬æä¾èµç JDK çæ¬ä¹ä¸åï¼ç®å 7.2 çæ¬å·²ç»å¯ä»¥æ¯æ JDK11ã ### å®è£ ä½¿ç¨ â ä¸è½½åè§£å Elasticsearchï¼æ éå®è£ è§£ååå³å¯ç¨ï¼è§£ååç®å½ï¼ - `bin`ï¼äºè¿å¶ç³»ç»æä»¤ç®å½ï¼å å«å¯å¨å½ä»¤åå®è£ æä»¶å½ä»¤çã - `config`ï¼é ç½®æä»¶ç®å½ã - `data`ï¼æ°æ®åå¨ç®å½ã - `lib`ï¼ä¾èµå ç®å½ã - `logs`ï¼æ¥å¿æä»¶ç®å½ã - `modules`ï¼æ¨¡ååºï¼ä¾å¦ x-pack çæ¨¡åã - `plugins`ï¼æä»¶ç®å½ã â¡å®è£ ç®å½ä¸è¿è¡ `bin/elasticsearch` æ¥å¯å¨ ESã â¢é»è®¤å¨ 9200 端å£è¿è¡ï¼è¯·æ± curl http://localhost:9200/ æè æµè§å¨è¾å ¥ http://localhost:9200ï¼å¾å°ä¸ä¸ª JSON 对象ï¼å ¶ä¸å å«å½åèç¹ãé群ãçæ¬çä¿¡æ¯ã ``` { "name" : "U7fp3O9", "cluster_name" : "elasticsearch", "cluster_uuid" : "-Rj8jGQvRIelGd9ckicUOA", "version" : { "number" : "6.8.1", "build_flavor" : "default", "build_type" : "zip", "build_hash" : "1fad4e1", "build_date" : "2019-06-18T13:16:52.517138Z", "build_snapshot" : false, "lucene_version" : "7.7.0", "minimum_wire_compatibility_version" : "5.6.0", "minimum_index_compatibility_version" : "5.0.0" }, "tagline" : "You Know, for Search" } ``` ### é群å¥åº·ç¶æ è¦æ£æ¥ç¾¤éè¿è¡ç¶åµï¼æä»¬å¯ä»¥å¨ Kibana æ§å¶å°ä¸è¿è¡ä»¥ä¸å½ä»¤ GET /_cluster/healthï¼å¾å°å¦ä¸ä¿¡æ¯ï¼ ``` { "cluster_name" : "wujiajian", "status" : "yellow", "timed_out" : false, "number_of_nodes" : 1, "number_of_data_nodes" : 1, "active_primary_shards" : 9, "active_shards" : 9, "relocating_shards" : 0, "initializing_shards" : 0, "unassigned_shards" : 5, "delayed_unassigned_shards" : 0, "number_of_pending_tasks" : 0, "number_of_in_flight_fetch" : 0, "task_max_waiting_in_queue_millis" : 0, "active_shards_percent_as_number" : 64.28571428571429 } ``` éç¾¤ç¶æéè¿ ç»¿ï¼é»ï¼çº¢ æ¥æ è¯ï¼ - 绿è²ï¼é群å¥åº·å®å¥½ï¼ä¸ååè½é½å ¨æ£å¸¸ï¼ææåçå坿¬é½å¯ä»¥æ£å¸¸å·¥ä½ã - é»è²ï¼é¢è¦ç¶æï¼ææä¸»åçåè½æ£å¸¸ï¼ä½è³å°æä¸ä¸ªå¯æ¬æ¯ä¸è½æ£å¸¸å·¥ä½çãæ¤æ¶é群æ¯å¯ä»¥æ£å¸¸å·¥ä½çï¼ä½æ¯é«å¯ç¨æ§å¨æç§ç¨åº¦ä¸ä¼åå½±åã - 红è²ï¼é群ä¸å¯æ£å¸¸ä½¿ç¨ãæä¸ªææäºåçåå ¶å¯æ¬å¼å¸¸ä¸å¯ç¨ï¼è¿æ¶éç¾¤çæ¥è¯¢æä½è¿è½æ§è¡ï¼ä½æ¯è¿åçç»æä¼ä¸åç¡®ã对äºåé å°è¿ä¸ªåççåå ¥è¯·æ±å°ä¼æ¥éï¼æç»ä¼å¯¼è´æ°æ®ç丢失ã å½éç¾¤ç¶æä¸ºçº¢è²æ¶ï¼å®å°ä¼ç»§ç»ä»å¯ç¨çåçæä¾æç´¢è¯·æ±æå¡ï¼ä½æ¯ä½ éè¦å°½å¿«ä¿®å¤é£äºæªåé çåçã ## äºãES æºå¶åç ES çåºæ¬æ¦å¿µååºæ¬æä½ä»ç»å®äºä¹åï¼æä»¬å¯è½è¿æå¾å¤çæï¼ - å®ä»¬å 鍿¯å¦ä½è¿è¡çï¼ - 主åçå坿¬åçæ¯å¦ä½åæ¥çï¼ - å建索å¼çæµç¨æ¯ä»ä¹æ ·çï¼ - ES å¦ä½å°ç´¢å¼æ°æ®åé å°ä¸åçåçä¸çï¼ä»¥åè¿äºç´¢å¼æ°æ®æ¯å¦ä½åå¨çï¼ - 为ä»ä¹è¯´ ES æ¯è¿å®æ¶æç´¢å¼æèææ¡£ç CRUD (å建-读å-æ´æ°-å é¤) æä½æ¯å®æ¶çï¼ - 以å Elasticsearch æ¯ææ ·ä¿è¯æ´æ°è¢«æä¹ åå¨æçµæ¶ä¹ä¸ä¸¢å¤±æ°æ®ï¼ - è¿æä¸ºä»ä¹å é¤ææ¡£ä¸ä¼ç«å»éæ¾ç©ºé´ï¼ 带çè¿äºç鮿们è¿å ¥æ¥ä¸æ¥çå 容ã ### åç´¢å¼åç ä¸å¾æè¿°äº 3 个èç¹çé群ï¼å ±æ¥æ 12 个åçï¼å ¶ä¸æ 4 个主åçï¼S0ãS1ãS2ãS3ï¼å 8 ä¸ªå¯æ¬åçï¼R0ãR1ãR2ãR3ï¼ï¼æ¯ä¸ªä¸»åç对åºä¸¤ä¸ªå¯æ¬åçï¼èç¹ 1 æ¯ä¸»èç¹ï¼Master èç¹ï¼è´è´£æ´ä¸ªé群çç¶æã  åç´¢å¼æ¯åªè½åå¨ä¸»åçä¸ï¼ç¶å忥å°å¯æ¬åçãè¿éæå个主åçï¼ä¸æ¡æ°æ® ES æ¯æ ¹æ®ä»ä¹è§ååå°ç¹å®åçä¸çå¢ï¼ è¿æ¡ç´¢å¼æ°æ®ä¸ºä»ä¹è¢«åå° S0 ä¸èä¸åå° S1 æ S2 ä¸ï¼é£æ¡æ°æ®ä¸ºä»ä¹å被åå° S3 ä¸èä¸åå° S0 ä¸äºï¼ é¦å è¿è¯å®ä¸ä¼æ¯éæºçï¼å¦åå°æ¥è¦è·åææ¡£çæ¶åæä»¬å°±ä¸ç¥éä»ä½å¤å¯»æ¾äºã å®é ä¸ï¼è¿ä¸ªè¿ç¨æ¯æ ¹æ®ä¸é¢è¿ä¸ªå ¬å¼å³å®çï¼ ``` shard = hash(routing) % number_of_primary_shards ``` Routing æ¯ä¸ä¸ªå¯åå¼ï¼é»è®¤æ¯ææ¡£ç` _id` ï¼ä¹å¯ä»¥è®¾ç½®æä¸ä¸ªèªå®ä¹çå¼ã Routing éè¿ Hash 彿°çæä¸ä¸ªæ°åï¼ç¶åè¿ä¸ªæ°ååé¤ä»¥ `number_of_primary_shards` ï¼ä¸»åççæ°éï¼åå¾å°ä½æ°ã è¿ä¸ªå¨ 0 å° `number_of_primary_shards-1` ä¹é´ç使°ï¼å°±æ¯æä»¬æå¯»æ±çææ¡£æå¨åççä½ç½®ã è¿å°±è§£éäºä¸ºä»ä¹æä»¬è¦å¨å建索å¼çæ¶å就确å®å¥½ä¸»åççæ°é并䏿°¸è¿ä¸ä¼æ¹åè¿ä¸ªæ°éï¼å ä¸ºå¦ææ°éååäºï¼é£ä¹ææä¹åè·¯ç±çå¼é½ä¼æ æï¼ææ¡£ä¹å乿¾ä¸å°äºã ç±äºå¨ ES éç¾¤ä¸æ¯ä¸ªèç¹éè¿ä¸é¢ç计ç®å ¬å¼é½ç¥éé群ä¸çææ¡£çåæ¾ä½ç½®ï¼æä»¥æ¯ä¸ªèç¹é½æå¤ç读å请æ±çè½åã å¨ä¸ä¸ªå请æ±è¢«åéå°æä¸ªèç¹åï¼è¯¥èç¹å³ä¸ºåé¢è¯´è¿çåè°èç¹ï¼åè°èç¹ä¼æ ¹æ®è·¯ç±å ¬å¼è®¡ç®åºéè¦åå°åªä¸ªåçä¸ï¼åå°è¯·æ±è½¬åå°è¯¥åçç主åçèç¹ä¸ã  å妿¤æ¶æ°æ®éè¿è·¯ç±è®¡ç®å ¬å¼åä½åå¾å°ç弿¯ `shard=hash(routing)%4=0`ã åå ·ä½æµç¨å¦ä¸ï¼ - 客æ·ç«¯å ES1 èç¹ï¼åè°èç¹ï¼åéå请æ±ï¼éè¿è·¯ç±è®¡ç®å ¬å¼å¾å°å¼ä¸º 0ï¼åå½åæ°æ®åºè¢«åå°ä¸»åç S0 ä¸ã - ES1 èç¹å°è¯·æ±è½¬åå° S0 主åçæå¨çèç¹ ES3ï¼ES3 æ¥å请æ±å¹¶åå ¥å°ç£çã - å¹¶åå°æ°æ®å¤å¶å°ä¸¤ä¸ªå¯æ¬åç R0 ä¸ï¼å ¶ä¸éè¿ä¹è§å¹¶åæ§å¶æ°æ®çå²çªã䏿¦ææç坿¬åç齿¥åæåï¼åèç¹ ES3 å°ååè°èç¹æ¥åæåï¼åè°èç¹å客æ·ç«¯æ¥åæåã ### åå¨åç ä¸é¢ä»ç»äºå¨ ES å é¨ç´¢å¼çåå¤çæµç¨ï¼è¿ä¸ªæµç¨æ¯å¨ ES çå å䏿§è¡çï¼æ°æ®è¢«åé å°ç¹å®çåçå坿¬ä¸ä¹åï¼æç»æ¯åå¨å°ç£çä¸çï¼è¿æ ·å¨æçµçæ¶åå°±ä¸ä¼ä¸¢å¤±æ°æ®ã å ·ä½çåå¨è·¯å¾å¯å¨é ç½®æä»¶ `../config/elasticsearch.yml `ä¸è¿è¡è®¾ç½®ï¼é»è®¤åå¨å¨å®è£ ç®å½ç Data æä»¶å¤¹ä¸ã 建议ä¸è¦ä½¿ç¨é»è®¤å¼ï¼å ä¸ºè¥ ES è¿è¡äºå级ï¼åæå¯è½å¯¼è´æ°æ®å ¨é¨ä¸¢å¤±ï¼ ``` path.data: /path/to/data //ç´¢å¼æ°æ® path.logs: /path/to/logs //æ¥å¿è®°å½ ``` #### â åæ®µåå¨ ç´¢å¼ææ¡£ä»¥æ®µçå½¢å¼åå¨å¨ç£çä¸ï¼ä½ä¸ºæ®µï¼ç´¢å¼æä»¶è¢«æå为å¤ä¸ªåæä»¶ï¼åæ¯ä¸ªåæä»¶å«ä½æ®µï¼æ¯ä¸ä¸ªæ®µæ¬èº«é½æ¯ä¸ä¸ªåæç´¢å¼ï¼å¹¶ä¸æ®µå ·æä¸åæ§ï¼ä¸æ¦ç´¢å¼çæ°æ®è¢«åå ¥ç¡¬çï¼å°±ä¸å¯åä¿®æ¹ã å¨åºå±éç¨äºå段çå卿¨¡å¼ï¼ä½¿å®å¨è¯»åæ¶å ä¹å®å ¨é¿å äºéçåºç°ï¼å¤§å¤§æåäºè¯»åæ§è½ã 段被åå ¥å°ç£çåä¼çæä¸ä¸ªæäº¤ç¹ï¼æäº¤ç¹æ¯ä¸ä¸ªç¨æ¥è®°å½æææäº¤å段信æ¯çæä»¶ã ä¸ä¸ªæ®µä¸æ¦æ¥æäºæäº¤ç¹ï¼å°±è¯´æè¿ä¸ªæ®µåªæè¯»çæéï¼å¤±å»äºåçæéãç¸åï¼å½æ®µå¨å å䏿¶ï¼å°±åªæåçæéï¼èä¸å ·å¤è¯»æ°æ®çæéï¼æå³çä¸è½è¢«æ£ç´¢ã æ®µçæ¦å¿µæåºä¸»è¦æ¯å 为ï¼å¨æ©æå ¨ææ£ç´¢ä¸ä¸ºæ´ä¸ªææ¡£éå建ç«äºä¸ä¸ªå¾å¤§çåæç´¢å¼ï¼å¹¶å°å ¶åå ¥ç£çä¸ã å¦æç´¢å¼ææ´æ°ï¼å°±éè¦éæ°å ¨éå建ä¸ä¸ªç´¢å¼æ¥æ¿æ¢åæ¥çç´¢å¼ãè¿ç§æ¹å¼å¨æ°æ®éå¾å¤§æ¶æçå¾ä½ï¼å¹¶ä¸ç±äºåå»ºä¸æ¬¡ç´¢å¼çææ¬å¾é«ï¼æä»¥å¯¹æ°æ®çæ´æ°ä¸è½è¿äºé¢ç¹ï¼ä¹å°±ä¸è½ä¿è¯æ¶ææ§ã ç´¢å¼æä»¶åæ®µåå¨å¹¶ä¸ä¸å¯ä¿®æ¹ï¼é£ä¹æ°å¢ãæ´æ°åå é¤å¦ä½å¤çå¢ï¼ - æ°å¢ï¼æ°å¢å¾å¥½å¤çï¼ç±äºæ°æ®æ¯æ°çï¼æä»¥åªéè¦å¯¹å½åææ¡£æ°å¢ä¸ä¸ªæ®µå°±å¯ä»¥äºã - å é¤ï¼ç±äºä¸å¯ä¿®æ¹ï¼æä»¥å¯¹äºå 餿ä½ï¼ä¸ä¼æææ¡£ä»æ§ç段ä¸ç§»é¤èæ¯éè¿æ°å¢ä¸ä¸ª .del æä»¶ï¼æä»¶ä¸ä¼ååºè¿äºè¢«å é¤ææ¡£çæ®µä¿¡æ¯ãè¿ä¸ªè¢«æ è®°å é¤çææ¡£ä»ç¶å¯ä»¥è¢«æ¥è¯¢å¹é å°ï¼ ä½å®ä¼å¨æç»ç»æè¢«è¿ååä»ç»æéä¸ç§»é¤ã - æ´æ°ï¼ä¸è½ä¿®æ¹æ§ç段æ¥è¿è¡åæ ææ¡£çæ´æ°ï¼å ¶å®æ´æ°ç¸å½äºæ¯å é¤åæ°å¢è¿ä¸¤ä¸ªå¨ä½ç»æãä¼å°æ§çææ¡£å¨ .del æä»¶ä¸æ è®°å é¤ï¼ç¶åææ¡£çæ°çæ¬è¢«ç´¢å¼å°ä¸ä¸ªæ°ç段ä¸ãå¯è½ä¸¤ä¸ªçæ¬çææ¡£é½ä¼è¢«ä¸ä¸ªæ¥è¯¢å¹é å°ï¼ä½è¢«å é¤çé£ä¸ªæ§çæ¬ææ¡£å¨ç»æéè¿ååå°±ä¼è¢«ç§»é¤ã 段被设å®ä¸ºä¸å¯ä¿®æ¹å ·æä¸å®çä¼å¿ä¹æä¸å®ç缺ç¹ï¼ä¼å¿ä¸»è¦è¡¨ç°å¨ï¼ - ä¸éè¦éãå¦æä½ ä»æ¥ä¸æ´æ°ç´¢å¼ï¼ä½ å°±ä¸éè¦æ å¿å¤è¿ç¨åæ¶ä¿®æ¹æ°æ®çé®é¢ã - 䏿¦ç´¢å¼è¢«è¯»å ¥å æ ¸çæä»¶ç³»ç»ç¼åï¼ä¾¿ä¼çå¨åªéï¼ç±äºå ¶ä¸åæ§ãåªè¦æä»¶ç³»ç»ç¼åä¸è¿æè¶³å¤ç空é´ï¼é£ä¹å¤§é¨å读请æ±ä¼ç´æ¥è¯·æ±å åï¼èä¸ä¼å½ä¸ç£çãè¿æä¾äºå¾å¤§çæ§è½æåã - å ¶å®ç¼å(å Filter ç¼å)ï¼å¨ç´¢å¼ççå½å¨æå å§ç»ææãå®ä»¬ä¸éè¦å¨æ¯æ¬¡æ°æ®æ¹åæ¶è¢«é建ï¼å ä¸ºæ°æ®ä¸ä¼ååã - åå ¥å个大çåæç´¢å¼å è®¸æ°æ®è¢«å缩ï¼åå°ç£ç I/O åéè¦è¢«ç¼åå°å åçç´¢å¼ç使ç¨éã æ®µçä¸åæ§ç缺ç¹å¦ä¸ï¼ - å½å¯¹æ§æ°æ®è¿è¡å 餿¶ï¼æ§æ°æ®ä¸ä¼é©¬ä¸è¢«å é¤ï¼èæ¯å¨ .del æä»¶ä¸è¢«æ 记为å é¤ãèæ§æ°æ®åªè½çå°æ®µæ´æ°æ¶æè½è¢«ç§»é¤ï¼è¿æ ·ä¼é æå¤§éçç©ºé´æµªè´¹ã - è¥æä¸æ¡æ°æ®é¢ç¹çæ´æ°ï¼æ¯æ¬¡æ´æ°é½æ¯æ°å¢æ°çæ è®°æ§çï¼å伿大éçç©ºé´æµªè´¹ã - æ¯æ¬¡æ°å¢æ°æ®æ¶é½éè¦æ°å¢ä¸ä¸ªæ®µæ¥å卿°æ®ã彿®µçæ°éå¤ªå¤æ¶ï¼å¯¹æå¡å¨çèµæºä¾å¦æä»¶å¥æçæ¶èä¼é常大ã - 卿¥è¯¢çç»æä¸å 嫿æçç»æéï¼éè¦æé¤è¢«æ è®°å é¤çæ§æ°æ®ï¼è¿å¢å äºæ¥è¯¢çè´æ ã #### â¡å»¶è¿åçç¥ ä»ç»å®äºåå¨çå½¢å¼ï¼é£ä¹ç´¢å¼åå ¥å°ç£ççè¿ç¨æ¯ææ ·çï¼æ¯å¦æ¯ç´æ¥è° Fsync ç©çæ§å°åå ¥ç£çï¼ çæ¡æ¯æ¾èæè§çï¼å¦ææ¯ç´æ¥åå ¥å°ç£çä¸ï¼ç£çç I/O æ¶èä¸ä¼ä¸¥é影忧è½ã é£ä¹å½åæ°æ®éå¤§çæ¶åä¼é æ ES åé¡¿å¡æ»ï¼æ¥è¯¢ä¹æ æ³åå°å¿«éååºãå¦æçæ¯è¿æ · ES ä¹å°±ä¸ä¼ç§°ä¹ä¸ºè¿å®æ¶å ¨ææç´¢å¼æäºã ä¸ºäºæååçæ§è½ï¼ES å¹¶æ²¡ææ¯æ°å¢ä¸æ¡æ°æ®å°±å¢å ä¸ä¸ªæ®µå°ç£çä¸ï¼èæ¯éç¨å»¶è¿åççç¥ã æ¯å½ææ°å¢çæ°æ®æ¶ï¼å°±å°å ¶å åå ¥å°å åä¸ï¼å¨å ååç£çä¹é´æ¯æä»¶ç³»ç»ç¼åã å½è¾¾å°é»è®¤çæ¶é´ï¼1 ç§éï¼æè å åçæ°æ®è¾¾å°ä¸å®éæ¶ï¼ä¼è§¦å䏿¬¡å·æ°ï¼Refreshï¼ï¼å°å åä¸çæ°æ®çæå°ä¸ä¸ªæ°ç段ä¸å¹¶ç¼åå°æä»¶ç¼åç³»ç» ä¸ï¼ç¨ååè¢«å·æ°å°ç£çä¸å¹¶çææäº¤ç¹ã è¿éçå å使ç¨çæ¯ ES ç JVM å åï¼èæä»¶ç¼åç³»ç»ä½¿ç¨çæ¯æä½ç³»ç»çå åã æ°çæ°æ®ä¼ç»§ç»ç被åå ¥å åï¼ä½å åä¸çæ°æ®å¹¶ä¸æ¯ä»¥æ®µçå½¢å¼åå¨çï¼å æ¤ä¸è½æä¾æ£ç´¢åè½ã ç±å åå·æ°å°æä»¶ç¼åç³»ç»çæ¶åä¼çææ°çæ®µï¼å¹¶å°æ®µæå¼ä»¥ä¾æç´¢ä½¿ç¨ï¼èä¸éè¦çå°è¢«å·æ°å°ç£çã å¨ Elasticsearch ä¸ï¼åå ¥åæå¼ä¸ä¸ªæ°æ®µçè½»éçè¿ç¨å«å Refresh ï¼å³å åå·æ°å°æä»¶ç¼åç³»ç»ï¼ã é»è®¤æ åµä¸æ¯ä¸ªåç伿¯ç§èªå¨å·æ°ä¸æ¬¡ãè¿å°±æ¯ä¸ºä»ä¹æä»¬è¯´ Elasticsearch æ¯è¿å®æ¶æç´¢ï¼å ä¸ºææ¡£çåå并䏿¯ç«å³å¯¹æç´¢å¯è§ï¼ä½ä¼å¨ä¸ç§ä¹å å为å¯è§ã æä»¬ä¹å¯ä»¥æå¨è§¦å Refreshï¼`POST /_refresh` å·æ°ææç´¢å¼ï¼`POST /nba/_refresh` å·æ°æå®çç´¢å¼ã Tipsï¼å°½ç®¡å·æ°æ¯æ¯æäº¤è½»éå¾å¤çæä½ï¼å®è¿æ¯ä¼ææ§è½å¼éãå½åæµè¯çæ¶åï¼ æå¨å·æ°å¾æç¨ï¼ä½æ¯ä¸è¦å¨ç产>ç¯å¢ä¸æ¯æ¬¡ç´¢å¼ä¸ä¸ªææ¡£é½å»æå¨å·æ°ãèä¸å¹¶ä¸æ¯ææçæ åµé½éè¦æ¯ç§å·æ°ã å¯è½ä½ æ£å¨ä½¿ç¨ Elasticsearch ç´¢å¼å¤§éçæ¥å¿æä»¶ï¼ ä½ å¯è½æ³ä¼åç´¢å¼é度è䏿¯>è¿å®æ¶æç´¢ã è¿æ¶å¯ä»¥å¨åå»ºç´¢å¼æ¶å¨ Settings ä¸éè¿è°å¤§ `refresh_interval = "30s" `çå¼ ï¼ é使¯ä¸ªç´¢å¼çå·æ°é¢çï¼è®¾å¼æ¶éè¦æ³¨æåé¢å¸¦ä¸æ¶é´åä½ï¼å¦åé»è®¤æ¯æ¯«ç§ãå½ `refresh_interval=-1` æ¶è¡¨ç¤ºå ³éç´¢å¼çèªå¨å·æ°ã è½ç¶éè¿å»¶æ¶åççç¥å¯ä»¥åå°æ°æ®å¾ç£çä¸åçæ¬¡æ°æåäºæ´ä½çåå ¥è½åï¼ä½æ¯æä»¬ç¥éæä»¶ç¼åç³»ç»ä¹æ¯å å空é´ï¼å±äºæä½ç³»ç»çå åï¼åªè¦æ¯å åé½åå¨æçµæå¼å¸¸æ åµä¸ä¸¢å¤±æ°æ®çå±é©ã 为äºé¿å ä¸¢å¤±æ°æ®ï¼Elasticsearch æ·»å äºäºå¡æ¥å¿ï¼Translogï¼ï¼äºå¡æ¥å¿è®°å½äºææè¿æ²¡ææä¹ åå°ç£ççæ°æ®ã å¾ç æ·»å äºäºå¡æ¥å¿åæ´ä¸ªåç´¢å¼çæµç¨å¦ä¸å¾æç¤ºï¼ - ä¸ä¸ªæ°ææ¡£è¢«ç´¢å¼ä¹åï¼å 被åå ¥å°å åä¸ï¼ä½æ¯ä¸ºäºé²æ¢æ°æ®ç丢失ï¼ä¼è¿½å ä¸ä»½æ°æ®å°äºå¡æ¥å¿ä¸ã ä¸æææ°çææ¡£è¢«åå ¥å°å åï¼åæ¶ä¹é½ä¼è®°å½å°äºå¡æ¥å¿ä¸ãè¿æ¶æ°æ°æ®è¿ä¸è½è¢«æ£ç´¢åæ¥è¯¢ã - å½è¾¾å°é»è®¤çå·æ°æ¶é´æå åä¸çæ°æ®è¾¾å°ä¸å®éåï¼ä¼è§¦å䏿¬¡ Refreshï¼å°å åä¸çæ°æ®ä»¥ä¸ä¸ªæ°æ®µå½¢å¼å·æ°å°æä»¶ç¼åç³»ç»ä¸å¹¶æ¸ 空å åãè¿æ¶è½ç¶æ°æ®µæªè¢«æäº¤å°ç£çï¼ä½æ¯å¯ä»¥æä¾ææ¡£çæ£ç´¢åè½ä¸ä¸è½è¢«ä¿®æ¹ã - éçæ°ææ¡£ç´¢å¼ä¸æè¢«åå ¥ï¼å½æ¥å¿æ°æ®å¤§å°è¶ è¿ 512M æè æ¶é´è¶ è¿ 30 åéæ¶ï¼ä¼è§¦å䏿¬¡ Flushã å åä¸çæ°æ®è¢«åå ¥å°ä¸ä¸ªæ°æ®µåæ¶è¢«åå ¥å°æä»¶ç¼åç³»ç»ï¼æä»¶ç³»ç»ç¼å䏿°æ®éè¿ Fsync å·æ°å°ç£çä¸ï¼çææäº¤ç¹ï¼æ¥å¿æä»¶è¢«å é¤ï¼å建ä¸ä¸ªç©ºçæ°æ¥å¿ã éè¿è¿ç§æ¹å¼å½æçµæéè¦é坿¶ï¼ES ä¸ä» è¦æ ¹æ®æäº¤ç¹å»å è½½å·²ç»æä¹ åè¿ç段ï¼è¿éè¦å·¥å · Translog éçè®°å½ï¼ææªæä¹ åçæ°æ®éæ°æä¹ åå°ç£çä¸ï¼é¿å äºæ°æ®ä¸¢å¤±çå¯è½ã â¢æ®µåå¹¶ ç±äºèªå¨å·æ°æµç¨æ¯ç§ä¼å建ä¸ä¸ªæ°ç段 ï¼è¿æ ·ä¼å¯¼è´çæ¶é´å çæ®µæ°éæ´å¢ãèæ®µæ°ç®å¤ªå¤ä¼å¸¦æ¥è¾å¤§ç麻ç¦ã æ¯ä¸ä¸ªæ®µé½ä¼æ¶èæä»¶å¥æãå åå CPU è¿è¡å¨æãæ´éè¦çæ¯ï¼æ¯ä¸ªæç´¢è¯·æ±é½å¿ é¡»è½®æµæ£æ¥æ¯ä¸ªæ®µç¶ååå¹¶æ¥è¯¢ç»æï¼æä»¥æ®µè¶å¤ï¼æç´¢ä¹å°±è¶æ ¢ã Elasticsearch éè¿å¨åå°å®æè¿è¡æ®µåå¹¶æ¥è§£å³è¿ä¸ªé®é¢ãå°ç段被åå¹¶å°å¤§ç段ï¼ç¶åè¿äºå¤§ç段å被åå¹¶å°æ´å¤§çæ®µã æ®µåå¹¶çæ¶åä¼å°é£äºæ§çå·²å é¤ææ¡£ä»æä»¶ç³»ç»ä¸æ¸ é¤ã被å é¤çææ¡£ä¸ä¼è¢«æ·è´å°æ°ç大段ä¸ãåå¹¶çè¿ç¨ä¸ä¸ä¼ä¸æç´¢å¼åæç´¢ã  段åå¹¶å¨è¿è¡ç´¢å¼åæç´¢æ¶ä¼èªå¨è¿è¡ï¼åå¹¶è¿ç¨éæ©ä¸å°é¨å大å°ç¸ä¼¼ç段ï¼å¹¶ä¸å¨åå°å°å®ä»¬åå¹¶å°æ´å¤§ç段ä¸ï¼è¿äºæ®µæ¢å¯ä»¥æ¯æªæäº¤çä¹å¯ä»¥æ¯å·²æäº¤çã åå¹¶ç»æåèçæ®µä¼è¢«å é¤ï¼æ°ç段被 Flush å°ç£çï¼åæ¶åå ¥ä¸ä¸ªå 嫿°æ®µä¸æé¤æ§çåè¾å°çæ®µçæ°æäº¤ç¹ï¼æ°ç段被æå¼å¯ä»¥ç¨æ¥æç´¢ã 段åå¹¶ç计ç®éåºå¤§ï¼ èä¸è¿è¦åæå¤§éç£ç I/Oï¼æ®µåå¹¶ä¼æç´¯åå ¥éçï¼å¦æä»»å ¶åå±ä¼å½±åæç´¢æ§è½ã Elasticsearch å¨é»è®¤æ åµä¸ä¼å¯¹åå¹¶æµç¨è¿è¡èµæºéå¶ï¼æä»¥æç´¢ä»ç¶æè¶³å¤çèµæºå¾å¥½å°æ§è¡ã ## å ãES çæ§è½ä¼å ### åå¨è®¾å¤ ç£çå¨ç°ä»£æå¡å¨ä¸é叏齿¯ç¶é¢ãElasticsearch é度使ç¨ç£çï¼ä½ çç£çè½å¤ççååéè¶å¤§ï¼ä½ çèç¹å°±è¶ç¨³å®ã è¿éæä¸äºä¼åç£ç I/O çæå·§ï¼ - ä½¿ç¨ SSDãå°±åå ¶ä»å°æ¹æè¿çï¼ ä»ä»¬æ¯æºæ¢°ç£çä¼ç§å¤äºã - ä½¿ç¨ RAID 0ãæ¡å¸¦å RAID 伿é«ç£ç I/Oï¼ä»£ä»·æ¾ç¶å°±æ¯å½ä¸åç¡¬çæ éæ¶æ´ä¸ªå°±æ éäºãä¸è¦ä½¿ç¨éåæè å¥å¶æ ¡éª RAID å ä¸ºå¯æ¬å·²ç»æä¾äºè¿ä¸ªåè½ã - å¦å¤ï¼ä½¿ç¨å¤å硬çï¼å¹¶å 许 Elasticsearch éè¿å¤ä¸ª path.data ç®å½é ç½®ææ°æ®æ¡å¸¦ååé å°å®ä»¬ä¸é¢ã - ä¸è¦ä½¿ç¨è¿ç¨æè½½çåå¨ï¼æ¯å¦ NFS æè SMB/CIFSãè¿ä¸ªå¼å ¥çå»¶è¿å¯¹æ§è½æ¥è¯´å®å ¨æ¯èéèé©°çã - å¦æä½ ç¨çæ¯ EC2ï¼å½å¿ EBSãå³ä¾¿æ¯åºäº SSD ç EBSï¼é叏乿¯æ¬å°å®ä¾çåå¨è¦æ ¢ã ### å é¨ç´¢å¼ä¼å  Elasticsearch 为äºè½å¿«éæ¾å°æä¸ª Termï¼å å°ææç Term æä¸ªåºï¼ç¶åæ ¹æ®äºåæ³æ¥æ¾ Termï¼æ¶é´å¤æåº¦ä¸º logNï¼å°±åéè¿åå ¸æ¥æ¾ä¸æ ·ï¼è¿å°±æ¯ Term Dictionaryã ç°å¨åçèµ·æ¥ï¼ä¼¼ä¹åä¼ ç»æ°æ®åºéè¿ B-Tree çæ¹å¼ç±»ä¼¼ã使¯å¦æ Term 太å¤ï¼Term Dictionary ä¹ä¼å¾å¤§ï¼æ¾å åä¸ç°å®ï¼äºæ¯æäº Term Indexã å°±ååå ¸éçç´¢å¼é¡µä¸æ ·ï¼A å¼å¤´çæåªäº Termï¼åå«å¨åªé¡µï¼å¯ä»¥çè§£ Term Indexæ¯ä¸æ£µæ ã è¿æ£µæ ä¸ä¼å 嫿æç Termï¼å®å å«çæ¯ Term çä¸äºåç¼ãéè¿ Term Index å¯ä»¥å¿«éå°å®ä½å° Term Dictionary çæä¸ª Offsetï¼ç¶åä»è¿ä¸ªä½ç½®åå¾åé¡ºåºæ¥æ¾ã å¨å åä¸ç¨ FST æ¹å¼å缩 Term Indexï¼FST 以åèçæ¹å¼å卿æç Termï¼è¿ç§å缩æ¹å¼å¯ä»¥ææç缩ååå¨ç©ºé´ï¼ä½¿å¾ Term Index 足以æ¾è¿å åï¼ä½è¿ç§æ¹å¼ä¹ä¼å¯¼è´æ¥æ¾æ¶éè¦æ´å¤ç CPU èµæºã 对äºåå¨å¨ç£çä¸çåæè¡¨åæ ·ä¹éç¨äºåç¼©ææ¯åå°å卿å ç¨ç空é´ã ### è°æ´é ç½®åæ° è°æ´é ç½®åæ°å»ºè®®å¦ä¸ï¼ - ç»æ¯ä¸ªææ¡£æå®æåºçå ·æå缩è¯å¥½çåºåæ¨¡å¼ IDï¼é¿å éæºç UUID-4 è¿æ ·ç IDï¼è¿æ ·ç ID å缩æ¯å¾ä½ï¼ä¼ææ¾ææ ¢ Luceneã - 对äºé£äºä¸éè¦èååæåºçç´¢å¼å段ç¦ç¨ Doc valuesãDoc Values æ¯æåºçåºäº `document=>field value` çæ å°å表ã - ä¸éè¦åæ¨¡ç³æ£ç´¢çåæ®µä½¿ç¨ Keyword ç±»åä»£æ¿ Text ç±»åï¼è¿æ ·å¯ä»¥é¿å å¨å»ºç«ç´¢å¼å对è¿äºææ¬è¿è¡åè¯ã - å¦æä½ çæç´¢ç»æä¸éè¦è¿å®æ¶çå确度ï¼èèææ¯ä¸ªç´¢å¼ç `index.refresh_interval` æ¹å° 30s ã å¦æä½ æ¯å¨å大æ¹éå¯¼å ¥ï¼å¯¼å ¥æé´ä½ å¯ä»¥éè¿è®¾ç½®è¿ä¸ªå¼ä¸º -1 å ³æå·æ°ï¼è¿å¯ä»¥éè¿è®¾ç½® `index.number_of_replicas: 0` å ³é坿¬ãå«å¿è®°å¨å®å·¥çæ¶åéæ°å¼å¯å®ã - é¿å 深度å页æ¥è¯¢å»ºè®®ä½¿ç¨ Scroll è¿è¡å页æ¥è¯¢ãæ®éå页æ¥è¯¢æ¶ï¼ä¼å建ä¸ä¸ª `from+size` ç空ä¼å éåï¼æ¯ä¸ªåçä¼è¿å `from+size` æ¡æ°æ®ï¼é»è®¤åªå å«ææ¡£ ID åå¾å Score ç»åè°èç¹ã 妿æ N 个åçï¼ååè°èç¹å对ï¼from+sizeï¼Ãn æ¡æ°æ®è¿è¡äºæ¬¡æåºï¼ç¶åéæ©éè¦è¢«ååçææ¡£ãå½ from å¾å¤§æ¶ï¼æåºè¿ç¨ä¼åå¾å¾æ²éï¼å ç¨ CPU èµæºä¸¥éã - åå°æ å°å段ï¼åªæä¾éè¦æ£ç´¢ï¼èåææåºçåæ®µãå ¶ä»å段å¯åå¨å ¶ä»åå¨è®¾å¤ä¸ï¼ä¾å¦ Hbaseï¼å¨ ES ä¸å¾å°ç»æååå» Hbase æ¥è¯¢è¿äºå段ã - å建索å¼åæ¥è¯¢æ¶æå®è·¯ç± Routing å¼ï¼è¿æ ·å¯ä»¥ç²¾ç¡®å°å ·ä½çåçæ¥è¯¢ï¼æåæ¥è¯¢æçãè·¯ç±çéæ©éè¦æ³¨ææ°æ®çåå¸åè¡¡ã ### JVM è°ä¼ JVM è°ä¼å»ºè®®å¦ä¸ï¼ - ç¡®ä¿å å åæå°å¼ï¼ Xms ï¼ä¸æå¤§å¼ï¼ Xmx ï¼ç大尿¯ç¸åçï¼é²æ¢ç¨åºå¨è¿è¡æ¶æ¹åå å å大å°ãElasticsearch é»è®¤å®è£ å设置çå å 忝 1GBãå¯éè¿` ../config/jvm.option` æä»¶è¿è¡é ç½®ï¼ä½æ¯æå¥½ä¸è¦è¶ è¿ç©çå åç50%åè¶ è¿ 32GBã - GC é»è®¤éç¨ CMS çæ¹å¼ï¼å¹¶å使¯æ STW çé®é¢ï¼å¯ä»¥èèä½¿ç¨ G1 æ¶éå¨ã - ES é常ä¾èµæä»¶ç³»ç»ç¼åï¼Filesystem Cacheï¼ï¼å¿«éæç´¢ãä¸è¬æ¥è¯´ï¼åºè¯¥è³å°ç¡®ä¿ç©ç䏿ä¸åçå¯ç¨å ååé å°æä»¶ç³»ç»ç¼åã