久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

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

     cathy001 2015-11-18
         GitHub此前的搜索使用Solr實現,新上線的搜索基于elasticsearch,運行在多個集群上。由于代碼搜索索引很大,GitHub專門為其指定了一個集群。目前該集群包括26個存儲節點和8個客戶端節點。存儲節點負責保存構成搜索索引的數據,而客戶端節點負責協調查詢活動。每個搜索節點中有2TB的SSD存儲。
          發生故障時,整個集群保存了大概17TB的代碼。數據以分片方式跨越整個集群存儲,每個分片(shard)在另一個節點上有一份復制作為冗余,整個索引用去大約34TB存儲空間。整個存儲容量占用了集群總存儲空間的67%左右。代碼搜索集群運行在Java 6和elasticsearch 0.19.9上。當時這個集群已經正常運行了好幾個月。
          在1月17日、星期四,準備上線這個代碼搜索功能,以完成整個統一搜索的實現。后來發現elasticsearch已經發布了0.20.2版本,其中包括多個功能修復和性能改進。
    他們決定推遲代碼搜索上線,先升級elasticsearch,希望這可以讓新功能的上線更加順暢。
           在1月17日完成了升級,集群中所有節點都成功上線,而且恢復到正常的集群狀態。
    問題就此開始出現。
          從這次升級開始,集群中出現兩次故障。
    elasticsearch與其他使用大量單一索引存儲數據的索引服務不同,它使用分片模式切分數據,這樣可以很容易地將數據分布在整個集群中,而且易于管理。每個分片自己是一個Lucene索引,elasticsearch使用Lucene合并索引來聚合所有的分片搜索查詢。
          在升級后兩個小時,第一次故障出現了,恢復的過程中要重啟整個集群。我們在索引日志中發現的錯誤信息指出:有些分片無法分配到特定節點上。進一步檢查后,我們發現:這些數據分片有些區段的緩存文件已經損壞,其他在磁盤上已經丟失,但elasticsearch仍然可以恢復有損壞區段緩存的分片,它也可以恢復丟失了一份復制的分片,但是總計510個分片中有7個分片,主分片和副本都已經丟失了。
          我們復核了發生故障的環境,當時的結論是:我們發現的問題,來源于集群恢復帶來的高負載。對問題的進一步研究后,沒有發現其他elasticsearch用戶遇到過類似問題。在那個周末,集群沒有問題,因此我們決定發布新功能。
          下一次故障出現在1月24日、星期四。引起團隊注意的,是他們的異常跟蹤和監控系統,其中檢測到大量的異常爆發。進一步調查指出:大部分異常來自代碼查詢的超時,以及加入新數據時更新代碼搜索索引的后臺作業。
          這一次,我們開始同時檢查集群中全部節點的整體狀態和elasticsearch的日志。我們發現:看似隨機性的多個存儲節點出現高負載。大多數節點的CPU使用率都是個位數,有幾個消耗量幾乎100%可用的CPU核。我們可以消除系統和IO引起的負載,在這些服務器上唯一導致高負載的是運行elasticsearch的Java進程。現在搜索和索引還是會超時,我們也在日志中注意到:一些節點被很快選為master,此后又很快被移除。為了消除這種快速切換master角色帶來的潛在問題,我們決定:最好的方法,是讓集群完全停機,然后將其啟動,禁止數據分片的分配和重新平衡。
          這種方式讓集群恢復上線,但是他們發現elasticsearch日志中有一些問題。集群重啟后,他們發現有些節點無法重新加入到集群中,有些數據分片試圖二次分配到同一個節點上。這次,他們求助于elasticsearch公司的技術人員,并確認:
          這些無法分配的分片(主分片與復制合計23個)都有數據丟失。除數據丟失外,集群花費很多時間試圖恢復剩余的分片。在這次恢復過程中,我們必須多次重啟整個集群,因為我們加入了多次升級和配置變更,必須要驗證和再次恢復分片。這是這次故障中最耗時的部分,因為多次從磁盤中加載17TB索引數據十分緩慢。
          和elasticsearch的技術人員一起,他們發現集群中有些地方配置錯誤,或是需要調優配置,才能得到最佳性能。這次問題也讓elasticsearch的技術人員也發現了elasticsearch的兩個bug。還有一個很重要的原因:
          我們當時運行的Java 6是2009年早期的版本,其中包含多個嚴重bug,影響elasticsearch和Lucene,同時造成大量內存分配,導致高負載。
          根據他們的建議,我們馬上升級了Java和elasticsearch,并按他們的推薦調整了配置。具體做法是:在我們的Puppetmaster上,針對這些特定變更,創建了一個新的話題分支,并在環境中的這些節點上運行了Puppet。使用了新的配置、新版本elasticsearch和Java7之后,此前兩次故障中遇到的負載不穩定和快速master選舉問題再也沒有出現了。
    但是,1月28日,又出現一次故障。不過這次與之前沒有關系,完全是人為錯誤。
          一名工程師要把包含有Java和elasticsearch更新的特性分支合并到我們的生產環境中。過程中,工程師將代碼搜索節點上的Puppet環境回滾到了生產環境中,這是在部署合并代碼之前。這導致elasticsearch在節點上重啟,因為Puppet運行在上面。
          我們馬上就發現了問題根源,并停下集群,防止在一個集群中運行多個版本Java和elasticsearch導致任何問題。當合并代碼部署后,我們在所有代碼搜索節點上再次運行Puppet,啟動集群。我們沒有選擇在集群處于降級狀態時建立索引和查詢,而是等它完全恢復。當集群完成恢復后,我們將代碼搜索功能打開。
          總結這幾次故障,Will指出:
          在將代碼搜索集群中的elasticsearch升級到0.20.2版本之前,我們沒有在我們的基礎設施中對其進行足夠測試,也沒在其他集群中測試。還有一個原因是:對于代碼搜索集群,我們沒有足夠的上線前(staging)環境。
          現在運行的Java版本已經經過elasticsearch團隊測試,而且代碼集群配置也經過他們審核,未來的審核過程也已經安排確定。
          對于周一的故障,我們正在開發自動化過程,保證這樣的效果:如果GitHub上的分支比Puppetmaster上分支更超前,確保這個環境中的Puppet不會運行。
    最后,elasticsearch團隊提供了對運行大集群的幾點優化建議:
    1.設置ES_HEAP_SIZE環境變量,保證JVM使用的最大和最小內存用量相同。如果設置的最小和最大內存不一樣,這意味著當jvm需要額外的內存時(最多達到最大內存的大小),它會阻塞java進程來分配內存給它。結合使用舊版本的java情況就可以解釋為什么集群中的節點會停頓、出現高負載和不斷的進行內存分配的情況。elasticsearch團隊建議給es設置50%的系統內存
    2.縮短recover_after_time超時配置,這樣恢復可以馬上進行,而不是還要再等一段時間。
    3.配置minimum_master_nodes,避免多個節點長期暫停時,有些節點的子集合試圖自行組織集群,從而導致整個集群不穩定。
    4.在es初始恢復的時候,一些節點用完了磁盤空間。這個不知道是怎樣發生的,因為整個集群只使用了總空間的67%,不過相信這是由于之前的高負載和舊java版本引起的。elasticsearch的團隊也在跟進這個問題。
    原文地址

      本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發現有害或侵權內容,請點擊一鍵舉報。
      轉藏 分享 獻花(0

      0條評論

      發表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 一卡二卡三卡四卡视频区| 成人免费AA片在线观看| 丁香五月婷激情综合第九色| 综合图区亚洲欧美另类图片 | 成人久久免费网站| 久热综合在线亚洲精品| 欧洲精品久久久AV无码电影| 久久精品娱乐亚洲领先| 亚洲第一极品精品无码| 超碰成人人人做人人爽| 午夜福利片1000无码免费| 人妻久久久一区二区三区| 亚洲香蕉网久久综合影视| 午夜亚洲乱码伦小说区69堂| 亚洲人成小说网站色在线 | 久久久久免费看成人影片| 午夜福利高清在线观看| 亚洲一卡2卡3卡4卡精品| 116美女极品a级毛片| 国内精品伊人久久久久影院对白| 欧美人成精品网站播放| 精品亚洲欧美无人区乱码| 中文字幕国产精品av| 久久天天躁狠狠躁夜夜AVAPP| 中国熟妇毛多多裸交视频| 人人妻人人狠人人爽| 亚洲AV旡码高清在线观看| 中文字幕无码av不卡一区| 国产精品青青在线观看爽香蕉| 中文字幕av国产精品| 天天夜碰日日摸日日澡性色AV| 精品日韩人妻中文字幕| 人妻系列无码专区无码中出| 一本一本久久A久久精品综合不卡| 日本边添边摸边做边爱喷水| 狠狠色噜噜狠狠亚洲AV| 2020中文字字幕在线不卡| 亚洲精品无码日韩国产不卡av| 精品国偷自产在线视频| 国产乱码一区二区三区免费| 亚洲欧美人成电影在线观看|