Elasticsearch調(diào)優(yōu)

系統(tǒng)參數(shù)

  • 修改系統(tǒng)最大打開文件描述符數(shù)
    • vi /etc/security/limits.conf钞它,增加配置,用戶退出后重新登錄生效
*               soft    nofile          65535
*               hard    nofile          65535
  • ? 修改用戶可以打開的最大線程數(shù)
    • vi /etc/security/limits.conf梳码, 增加配置编振,用戶退出后重新登錄生效
  *               soft    nproc           4096
  *               hard    nproc           4096
  • 單個jvm能開啟的最大線程數(shù)
    • vi /etc/sysctl.conf
    • 添加如下配置
    • sysctl -p
vm.max_map_count=262144
  • 鎖定物理內(nèi)存
    • vi /etc/security/limits.conf
es soft memlock unlimited
es hard memlock unlimited
es soft memlock unlimited
es hard memlock unlimited
  • 關(guān)閉swap,鎖定進程地址空間势告,防止內(nèi)存swap
    • vi /etc/sysctl.conf
vm.swappiness=0
  • 重啟機器,使配置生效
    • reboot

elasticsearch.yml

# 集群的名稱岸啡,同一個集群該值必須設(shè)置成相同的
cluster.name: demo-application
# 該節(jié)點的名字
node.name: node-1
# 內(nèi)存鎖定
bootstrap.memory_lock: true
#該節(jié)點有機會成為master節(jié)點
node.master: true
# 該節(jié)點可以存儲數(shù)據(jù)
node.data: true
# 設(shè)置綁定的IP地址原叮,可以是IPV4或者IPV6
network.bind_host: 0.0.0.0
# 設(shè)置其他節(jié)點與該節(jié)點交互的IP地址
network.publish_host: 191.168.1.100
# 該參數(shù)用于同時設(shè)置bind_host和publish_host
network.host: 191.168.1.100
# 設(shè)置節(jié)點之間交互的端口號
transport.tcp.port: 9300
# 設(shè)置是否壓縮tcp上交互傳輸?shù)臄?shù)據(jù)
transport.tcp.compress: true
# 設(shè)置對外服務(wù)的http端口號
http.port: 9200
# 設(shè)置http內(nèi)容的最大大小
http.max_content_length: 100mb
# 是否開啟http服務(wù)對外提供服務(wù)
http.enabled: true 
# 設(shè)置這個參數(shù)來保證集群中的節(jié)點可以知道其它N個有master資格的節(jié)點,建議設(shè)置(n/2)+1, 防止腦裂問題
discovery.zen.minimum_master_nodes: 2
# 設(shè)置集群中自動發(fā)現(xiàn)其他節(jié)點時ping連接的超時時間
discovery.zen.ping_timeout: 30s
# 設(shè)置是否打開多播發(fā)現(xiàn)節(jié)點
#discovery.zen.ping.multicast.enabled: false
# 置集群中的Master節(jié)點的初始列表巡蘸,可以通過這些節(jié)點來自動發(fā)現(xiàn)其他新加入集群的節(jié)點
discovery.zen.ping.unicast.hosts: ["191.168.1.100:9300","191.168.1.101:9300","191.168.1.102:9300"]

# 是否支持跨域
http.cors.enabled: true
http.cors.allow-origin: "*"

jvm.options

  • Heap Size不超過物理內(nèi)存的一半奋隶,且小于32G
  • 如果Heap Size大于6g,建議使用G1垃圾回收
# 初始的Heap的大小悦荒,與Xmx的值保持一致
-Xms8g
# 最大Heap的大小唯欣,與Xms的值保持一致
-Xmx8g 

# 修改默認的垃圾回收機制CMS為G1
#-XX:+UseConcMarkSweepGC
#-XX:CMSInitiatingOccupancyFraction=75
#-XX:+UseCMSInitiatingOccupancyOnly
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200

全量導(dǎo)入數(shù)據(jù)準備操作

  • 開始導(dǎo)入前將副本分片數(shù)量設(shè)置為0
curl -H "Content-Type:application/json" -XPUT 'http://master:9200/cmas/_settings' -d '{"index": {"number_of_replicas":0}}'
  • 導(dǎo)入完成后設(shè)置副本分片數(shù)量為1
curl -H "Content-Type:application/json" -XPUT 'http://master:9200/cmas/_settings' -d '{"index": {"number_of_replicas":1}}'

索引優(yōu)化

合理設(shè)置分片

  • 適當增大分片,可以提升建立索引的能力搬味,5~20個比較合適
  • 如果分片數(shù)過多或過少境氢,都會導(dǎo)致檢索比較慢
    • 分片數(shù)過多蟀拷,會導(dǎo)致檢索時打開文件較多,另外也會導(dǎo)致多臺服務(wù)器之間通訊萍聊,影響效率
    • 分片數(shù)過少會導(dǎo)致至單個分片索引過大问芬,所以檢索速度慢
    • 建議單個分片最多存儲20G左右的索引數(shù)據(jù),通用計算公司:分片數(shù)量=數(shù)據(jù)總量/20G

合理設(shè)置副本數(shù)

  • 增加副本寿桨,可以提升搜索的能力
  • 如果副本設(shè)置過多此衅,會對服務(wù)器造成額外的壓力,因為主分片需要給所有的副本分片同步數(shù)據(jù)牛隅。另外炕柔,副本過多也會占用磁盤空間
  • 一般建議最多設(shè)置2~3個即可

合并索引

  • 定時對索引進行合并優(yōu)化酌泰,segment越多媒佣,占用的segment memory越多,查詢的性能也越差

    • 索引量不大的情況下陵刹,可以將segment設(shè)置為1
    • 在es1.2.0以前調(diào)用_optimize接口默伍,后期改為_forcemerge接口
    curl -u elastic:123456 -XPOST 'http://master:9200/test/_forcemerge?max_num_segments=1'
    

關(guān)閉索引

  • 針對不使用的index,建議close衰琐,減少內(nèi)存占用
  • 只要索引處于open狀態(tài)也糊,索引庫中的segment就會占用內(nèi)存,close之后就只會占用磁盤空間羡宙,不會占用內(nèi)存空間
curl -u elastic:123456 -XPOST 'master:9200/test/_close'

清除刪除文檔

  • 在Lucene中刪除文檔狸剃,數(shù)據(jù)不會馬上在磁盤上清除,而是在Lucene索引中產(chǎn)生一個.del文件狗热。然而在檢索過程中钞馁,這部分數(shù)據(jù)也會參與檢索,Lucene在檢索過程中會判斷是否刪除匿刮,如果已經(jīng)刪除僧凰,再過濾掉,這樣也會降低檢索效率
  • 可以執(zhí)行清除刪除文檔命令
curl -u elastic:123456 -XPOST 'http://master:9200/test/_optimize?only_expunge_deletes=true

合理數(shù)據(jù)導(dǎo)入

  • 如果在項目開始階段熟丸,需要批量入庫大量的數(shù)據(jù)训措,建議將副本數(shù)量設(shè)置為0.因為es在索引數(shù)據(jù)的時候,如果副本已經(jīng)存在光羞,數(shù)據(jù)會立即同步到副本中绩鸣,這樣會對es增加壓力
  • 等到索引完成之后,再恢復(fù)副本數(shù)即可纱兑,可以提高索引效率
curl -XGET http://master:9200/test/_settings?pretty
curl -H "Content-Type:application/json" -XPUT 'http://master:9200/test/_settings' -d '{"index": {"number_of_replicas":0}}'
curl -H "Content-Type:application/json" -XPUT 'http://master:9200/test/_settings' -d '{"index": {"number_of_replicas":1}}'

設(shè)置索引_all

  • 去掉mapping中_all域呀闻,index中默認會有__all域,雖然會給查詢帶來方便萍启,但是會增加索引時間和索引尺寸
PUT /my_index
{
    "mapping": {
        "user": {
            "_all": {
                "enable": false
            }
        }   
    }
}

設(shè)置索引_source

  • _source字段在我們檢索時相當重要
  • ES默認檢索只會返回ID总珠,如果在{"enable":false}情況下屏鳍,你需要通過根據(jù)這個ID去倒排索引中去取每個Field數(shù)據(jù),效率不高局服。反之钓瞭,在{"enable":true}情況下可以根據(jù)ID直接檢索對應(yīng)source JSON的字段,不用去倒排索引去按FIeld取數(shù)據(jù)

版本一致

  • 使用Java代碼操作ES集群淫奔,要保證本地es的版本和集群上es的版本保持一致
  • 保證集群中的每個節(jié)點的JDK版本和es配置一致

問題處理

集群腦裂問題

  • 原因

    • 網(wǎng)絡(luò)原因
    • 節(jié)點負載
    • 回收內(nèi)存
  • 解決方案

    • 將master節(jié)點與data節(jié)點分離
    node.master:true
    node.data:false
    
    • 為了使新加入的節(jié)點快速確定master位置山涡,可以將data節(jié)點的默認master發(fā)現(xiàn)方式由multicast修改為unicast
    discovery.zen.ping.multicast.enable:false
    discovery.zen.ping.unicast.hosts:["master1","master2","master3"]
    
    • discovery.zen.ping.timeout: 默認三秒,如果master節(jié)點在3秒內(nèi)沒有應(yīng)答唆迁,那么這個節(jié)點就是掛掉了鸭丛。增加這個值,會增加節(jié)點等待響應(yīng)的時間唐责,從一定程度上會減少誤判
    • discovery.zen.minimum_master_node:默認是1鳞溉,這個參數(shù)控制的是一個節(jié)點需要看到的具有master節(jié)點資質(zhì)的最小數(shù)量,然后才能在集群中做操作鼠哥。官方推薦的是(n/2)+1熟菲,其中n是具有master資格的節(jié)點的數(shù)量

翻頁問題

  • 盡量不要使用淺分頁
  • 如果業(yè)務(wù)需要必須使用淺分頁,需要考慮最大翻頁數(shù)
PUT /my_index/_settings
{
  "index": {
    "max_result_window": 50000
  }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末朴恳,一起剝皮案震驚了整個濱河市抄罕,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌于颖,老刑警劉巖呆贿,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異森渐,居然都是意外死亡做入,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進店門章母,熙熙樓的掌柜王于貴愁眉苦臉地迎上來母蛛,“玉大人,你說我怎么就攤上這事乳怎〔式迹” “怎么了?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵蚪缀,是天一觀的道長秫逝。 經(jīng)常有香客問我,道長询枚,這世上最難降的妖魔是什么违帆? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮金蜀,結(jié)果婚禮上刷后,老公的妹妹穿的比我還像新娘的畴。我一直安慰自己,他們只是感情好尝胆,可當我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布丧裁。 她就那樣靜靜地躺著,像睡著了一般含衔。 火紅的嫁衣襯著肌膚如雪煎娇。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天贪染,我揣著相機與錄音缓呛,去河邊找鬼。 笑死杭隙,一個胖子當著我的面吹牛哟绊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播寺渗,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼匿情,長吁一口氣:“原來是場噩夢啊……” “哼兰迫!你這毒婦竟也來了信殊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤汁果,失蹤者是張志新(化名)和其女友劉穎涡拘,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體据德,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡鳄乏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了棘利。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片橱野。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖善玫,靈堂內(nèi)的尸體忽然破棺而出水援,到底是詐尸還是另有隱情,我是刑警寧澤茅郎,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布蜗元,位于F島的核電站,受9級特大地震影響系冗,放射性物質(zhì)發(fā)生泄漏奕扣。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一掌敬、第九天 我趴在偏房一處隱蔽的房頂上張望惯豆。 院中可真熱鬧池磁,春花似錦、人聲如沸楷兽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拄养。三九已至离斩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間瘪匿,已是汗流浹背跛梗。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留棋弥,地道東北人核偿。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像顽染,于是被迫代替她去往敵國和親漾岳。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,514評論 2 348

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