Elasticsearch 壓力測試

為什么要壓測

俗話說 "知己知彼变抽,百戰(zhàn)不殆"蜻底,當我們上線一個新的系統(tǒng)或應用的時候,至少要知道這個系統(tǒng)或應用的上線在哪里拔稳,做直接的數據可能就是【吞吐量】是多少葛峻,【延時】是多少,【瓶頸】是什么巴比。更多關于壓測的指導可參考CoolShell 的性能測試應該怎么做术奖?

壓測工具

rally es 官方提供的一款壓測工具。同時官方也將 es 的實時壓測結果放在了 https://elasticsearch-benchmarks.elastic.co/ , 你可以將你自己的結果與它進行對比匿辩,官方是使用 2 臺服務器進行壓測腰耙,一臺運行 rally, 一臺運行 es, 服務器的配置如下:

CPU: Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz
RAM: 32 GB
SSD: Crucial MX200
OS: Linux Kernel version 4.8.0-53
JVM: Oracle JDK 1.8.0_131-b11

rally

安裝

# 創(chuàng)建虛擬環(huán)境
virtualenv venv

pip3 install esrally

# 配置 rally,默認在 ~/.rally 目錄中
esrally configure

rally 相關術語

rally 是汽車拉力賽的意思铲球,所以關于它里面術語也是跟汽車的拉力賽有關挺庞。

  • track: 即賽道的意思,這里指壓測用到的樣本數據和壓測策略稼病,使用 esrally list tracks 列出选侨。rally 自帶的 track 可在 https://github.com/elastic/rally-tracks 中查看,每個 track 的文件名中都存在 README.md 對壓測的數據類型和參數做了詳細的說明然走。每個 track 都包含一個 track.json 文件援制,track.json 中定義了樣本數據的獲取 url,具體的策略芍瑞,我們來看一個具體的 eventdata/track.json:

    corpora定義了 eventdata 數據從 AWS S3 中獲取晨仑,這里獲取樣本數據比較坑爹,下載的速度很慢拆檬,國內基本就是無法下載洪己,我是通過 AWS 新加坡上的一個 ECS 下載下來在通過公網拉取到國內的服務器上,新加坡到國內用公網的速度還不錯竟贯,國內也有人將樣本數據都放在百度云了:https://pan.baidu.com/s/123zgferlhWflOj7qJxFD1w

    {% import "rally.helpers" as rally with context %}
    
    {
      "version": 2,
      "description": "This benchmark indexes HTTP access logs generated based sample logs from the elastic.co website using the generator available in https://github.com/elastic/rally-eventdata-track",
      "indices": [
        {
          "name": "eventdata",
          "body": "index.json"
        }
      ],
      "corpora": [
        {
          "name": "eventdata",
          "base-url": "http://benchmarks.elasticsearch.org.s3.amazonaws.com/corpora/eventdata",
          "documents": [
            {
              "source-file": "eventdata.json.bz2",
              "document-count": 20000000,
              "compressed-bytes": 791796014,
              "uncompressed-bytes": 16437108429
            }
          ]
        }
      ],
      "operations": [
        {{ rally.collect(parts="operations/*.json") }}
      ],
      "challenges": [
        {{ rally.collect(parts="challenges/*.json") }}
      ]
    }
    

    chanllenges 中定義了壓測的策略答捕, operations 中定義的策略可以被 chellenges 中引用,我們來看 eventdata 的默認策略 eventdata/challenges/default.json:

    名字為 append-no-conflicts 的 challenge 在 scheduleoperation 中定義了具體壓測中包含的內容(delete-index屑那,create-index, check-cluster-health 等)拱镐,更多的可參考官方文檔: https://esrally.readthedocs.io/en/latest/track.html

        {
          "name": "append-no-conflicts",
          "description": "Indexes the whole document corpus using Elasticsearch default settings. We only adjust the number of replicas as we benchmark a single node cluster and Rally will only start the benchmark if the cluster turns green. Document ids are unique so all index operations are append only.",
          "default": true,
          "schedule": [
            {
              "operation": "delete-index"
            },
            {
              "operation": {
                "operation-type": "create-index",
                "settings": {{index_settings | default({}) | tojson}}
              }
            },
            {
              "name": "check-cluster-health",
              "operation": {
                "operation-type": "cluster-health",
                "index": "eventdata",
                "request-params": {
                  "wait_for_status": "{{cluster_health | default('green')}}",
                  "wait_for_no_relocating_shards": "true"
                }
              }
            },
            {
              "operation": "index-append",
              "warmup-time-period": 120,
              "clients": {{bulk_indexing_clients | default(8)}}
            },
            {
              "operation": "force-merge",
              "clients": 1
            }
          ]
        }
    
  • car: 即賽車的意思艘款,這里指被壓測的不同類型的 es 實例 (包括 jvm 的大小,版本等)沃琅,rally 能根據你指定的 es 類型哗咆,自動幫你下載并配置,如果你想對一個已存在的 es 實例進行測試阵难,可以不使用這個選項岳枷,而是在后面的 Pipeline 中指定。
  • Pipeline: 指一個壓測流程呜叫,可以通過 esrally list pipeline 查看空繁,其中有一個 benchmark-only 的流程,就是將 es 的管理交給用戶來操作朱庆,rally 只用來做壓測盛泡,如果你想針對已有的 es 進行壓測,則使用改模式娱颊。
  • race: 即一次比賽的意思傲诵,這里是進行一次壓測,如果沒有指定 track箱硕, 則默認使用 geonames track 進行測試拴竹。

如下實例,使用 pmc 樣本數據對一個已存在的 es 實例進行壓力測試剧罩,使用 track-params 對默認的壓測參數進行覆蓋栓拜,對這次測試以 version:5.5.0 進行 tag 標記。

esrally --track=pmc --target-hosts=10.10.102.35:9200  \
    --pipeline=benchmark-only \
    --track-params="number_of_shards:3,number_of_replicas=1" \
    --user-tag="version:5.5.0"

被壓測 ES 硬件資源

  • OS:Ubuntu 16.04
  • CPU: 12 core
  • MEM: 24G
  • DISK: 普通硬盤
  • ES Version: 5.2

壓測結果

以下所有的壓測參數均使用默認值

壓測數據類型: pmc (學術論文)

單節(jié)點惠昔,普通硬盤幕与,副本數0

Task Min Throughput Median Throughput Max Throughput P99 latency
index-append 853.79 docs/s 889.94 docs/s 909.67 docs/s 19435.3ms

單節(jié)點,4塊普通硬盤組成 RAID0镇防,副本數0

Task Min Throughput Median Throughput Max Throughput P99 latency
index-append 1182.27 docs/s 1259.22 docs/s 1285.84 docs/s 4811.05 ms

壓測數據類型: eventdata

單節(jié)點啦鸣,普通硬盤,副本數0

Task Min Throughput Median Throughput Max Throughput P90 latency P99 latency
index-append 29751.8 docs/s 34498.3 docs/s 35366.3 docs/s 1338.77 ms 2337.83 ms

單節(jié)點来氧,4塊普通硬盤組成 RAID0诫给,副本數0

Task Min Throughput Median Throughput Max Throughput P90 latency P99 latency
index-append 39982.6 docs/s 40951.4 docs/s 41216.8 docs/s 1177.72 ms 1470.46 ms

3節(jié)點,4塊普通硬盤組成 RAID0啦扬,副本數0

Task Min Throughput Median Throughput Max Throughput P90 latency P99 latency
index-append 68381.3 docs/s 70045.9 docs/s 70533.6 docs/s 654.343 ms 800.628 ms

3節(jié)點中狂,4塊普通硬盤組成 RAID0,副本數1

Task Min Throughput Median Throughput Max Throughput P90 latency P99 latency
index-append 37794.8 docs/s 38637 docs/s 39569.2 docs/s 1232.43 ms 1426.42 ms

壓測數據類型: geonames

單節(jié)點考传,普通硬盤,副本數0

Task Min Throughput Median Throughput Max Throughput P90 latency P99 latency
index-append 49641.4 docs/s 50195.2 docs/s 51236.1 docs/s 1213.64ms 2235.51ms

單節(jié)點证鸥,4塊普通硬盤組成 RAID0僚楞,副本數0

Task Min Throughput Median Throughput Max Throughput P90 latency P99 latency
index-append 54829.7 docs/s 55663.9 docs/s 56248.9 docs/s 941.875 ms 1327.69 ms

3節(jié)點勤晚,4塊普通硬盤組成 RAID0,副本數0

Task Min Throughput Median Throughput Max Throughput P90 latency P99 latency
index-append 88812.7 docs/s 89132.5 docs/s 89452.5 docs/s 512.118 ms 961.595 ms

總結

  • 在同樣的硬件情況下泉褐,我通過 mdadm 將 4 塊硬盤組成了 RAID0 來提升硬盤的 IO赐写,可以看到針對不同的樣本數據,PMC 類型 的樣本性能提升最明顯膜赃,geonames 類型的提升最少挺邀。可見跳座,單條日志越大端铛,硬盤的性能提升對 ES 的性能提升越明顯。
  • 比對單節(jié)點與集群(3節(jié)點)的數據疲眷,可見禾蚕,通過新增節(jié)點的方式提升性能,性能的提升量并不等于*新增節(jié)點數據數量狂丝,增加一個節(jié)點性能提升 40% 左右换淆。
  • 對比開啟副本數為1與不開啟副本的結果,可見几颜,副本數為1是倍试,es 的寫性能和延遲是原來的 1/2,所以生產環(huán)境中的副本數蛋哭,還是需要在性能和穩(wěn)定性上做一定的權衡县习。

參考

https://segmentfault.com/a/1190000011174694#articleHeader0

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市具壮,隨后出現(xiàn)的幾起案子准颓,更是在濱河造成了極大的恐慌,老刑警劉巖棺妓,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件攘已,死亡現(xiàn)場離奇詭異,居然都是意外死亡怜跑,警方通過查閱死者的電腦和手機样勃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來性芬,“玉大人峡眶,你說我怎么就攤上這事≈诧保” “怎么了辫樱?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長俊庇。 經常有香客問我狮暑,道長鸡挠,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任搬男,我火速辦了婚禮拣展,結果婚禮上,老公的妹妹穿的比我還像新娘缔逛。我一直安慰自己备埃,他們只是感情好,可當我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布褐奴。 她就那樣靜靜地躺著按脚,像睡著了一般。 火紅的嫁衣襯著肌膚如雪歉糜。 梳的紋絲不亂的頭發(fā)上乘寒,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天,我揣著相機與錄音匪补,去河邊找鬼伞辛。 笑死,一個胖子當著我的面吹牛夯缺,可吹牛的內容都是我干的蚤氏。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼踊兜,長吁一口氣:“原來是場噩夢啊……” “哼竿滨!你這毒婦竟也來了?” 一聲冷哼從身側響起捏境,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤于游,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后垫言,有當地人在樹林里發(fā)現(xiàn)了一具尸體贰剥,經...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年筷频,在試婚紗的時候發(fā)現(xiàn)自己被綠了蚌成。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡凛捏,死狀恐怖担忧,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情坯癣,我是刑警寧澤瓶盛,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響惩猫,放射性物質發(fā)生泄漏窒所。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一帆锋、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧禽额,春花似錦锯厢、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至藻丢,卻和暖如春剪撬,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背悠反。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工残黑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人斋否。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓梨水,卻偏偏與公主長得像,于是被迫代替她去往敵國和親茵臭。 傳聞我的和親對象是個殘疾皇子疫诽,可洞房花燭夜當晚...
    茶點故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內容