es集群規划及優化


很多問題也沒有考慮的很規范,對elastic產品也只停留的很淺的理解,不足之處望理解並指出,相互交流學習。

es7.1.1環境搭建

es7版本自帶jdk環境,不需要再重裝

  • 創建es用戶

    # 添加用戶組
    groupadd es
    
    # 添加用戶
    useradd -m -g es es
    
    #配置密碼
    passwd es
    
  • 時間同步

    yum install -y ntp 
    systemctl enable ntpd && systemctl start ntpd
    timedatectl set-timezone Asia/Shanghai
    timedatectl set-ntp yes
    ntpq -p
    
  • sudo權限

    # 在最后增加
    elsearch ALL=(ALL)  NOPASSWD:ALL
    
  • 下載 & 解壓

    # 下載
    wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.1.1-linux-x86_64.tar.gz
    
    #解壓
    tar xvf elasticsearch-7.1.1-linux-x86_64.tar.gz
    
  • 系統配置

    swapoff -a
    
    cat >> /etc/sysctl.conf <<EOF
    fs.file-max=655360
    vm.max_map_count = 262144
    EOF
    
    vim /etc/security/limits.conf
    * soft nproc 20480
    * hard nproc 20480
    * soft nofile 65536
    * hard nofile 65536
    * soft memlock unlimited
    * hard memlock unlimited
    
    vim /etc/sysctl.conf
    新增vm.max_map_count = 655360
    執行sysctl –p
    
    vim /etc/security/limits.d/20-nproc.conf
    * soft nproc 20480
    
    
  • 啟動服務 & 配置jvm

    # vim jvm.options
    -Xms20g
    -Xmx20g
    
    # elasticsearch.yml基礎配置
    
    cluster.name:es-test
    # 配置es集群名稱,相同名稱的集群會自動識別
    node.name: node-1
    # es7.0集群節點名稱會自動獲取本機hostname,如果不是多實例部署,可不配置該項
    path.data: /data/es/data
    # 指定數據存放目錄,多目錄逗號分隔
    path.logs: /data/es/logs
    # 指定日志存放目錄
    network.host: 0.0.0.0
    # 指定本機ip地址
    http.port: 9200
    # 指定http協議端口 ,多實例部署時需要修改
    transport.tcp.port
    # 指定tcp協議端口,多實例部署時需要修改
    cluster.initial_master_nodes: ["node-1"]
    # 指定主節點列表,需要在每個節點上配置該參數
    discovery.zen.ping.unicast.hosts: []
    # 廣播節點
    
    #啟動服務(需要通過前面創建的普通用戶啟動,同時需要注意相關配置文件權限)
    ./bin/elasticsearch -d 				#放到后台啟動
    
es集群及參數優化
  • 系統層面

    # 系統層面的調優主要是內存的設定與避免交換內存。
    swapoff -a   #禁用swapping,開啟服務器虛擬內存交換功能會對es產生致命的打擊
    
    # jvm內存配置
    # jvm.options主要是進行內存相關配置,官方建議分配給es的內存不要超出系統內存的50%,預留一半給Lucene,因為Lucene會緩存segment數據提升檢索性能;內存配置不要超過32g,如果你的服務器內存沒有遠遠超過64g,那么不建議將es的jvm內存設置為32g,因為超過32g后每個jvm對象指針的長度會翻倍,導致內存與cpu的開銷增大。(機器配置32G內存服務器節點上也基本不跑其他服務,建議配置16G)
    -Xms16g
    -Xmx16g
    
    
  • 分片和副本、索引

    # 分片(shard)索引通常都會分解成不同部分, 分布在不同節點的部分數據就是分片。7版本以后es默認分片數為1,由於創建索引分片后不能更改,這里需要充分考慮后期數據量增漲情況合理規划分片數,分片數對性能會造成很大影響。
    (建議:分片數確認需要根據業務量和機器節點分配)
    # 副本數可以動態調整,前期保障數據容災先設置1個副本數,后期可根據集群壓測實際業務量、存儲空間等原因調整
    
    # 索引(index)7版本的es默認最大索引數1000個,合理的規划索引及保障了性能也方便后期的管理,
    (建議如果每天的數據量很大,則可以按天創建索引,如果是一個月積累起來導致數據量很大,則可以一個月創建一個索引。)
    
  • 參數調優

    bootstrap.memory_lock: true
    #設置為true鎖住內存,當服務混合部署了多個組件及服務時,應開啟此操作,允許es占用足夠多的內存。
    
    index.merge.scheduler.max_thread_count: 1 
    # 索引 merge 最大線程數設置為 1 個,該參數可以有效調節寫入的性能,配置線程數越多對磁盤io消耗就越大(SSD忽略)。
    
    index.translog.durability:async # 這個可以異步寫硬盤,增大寫的速度
    
    discovery.zen.fd.ping_timeout:120s # ping 超時時間
    
    discovery.zen.fd.ping_interval:120s	 # 節點檢測時間
    
    index.refresh_interval:300s #index 刷新間隔
    
    indices.requests.cache.size:2%
    #查詢request請求的DSL語句緩存,被緩存的DSL語句下次請求時不會被二次解析,可提升檢索性能,默認值是1%。
    curl -XPUT 'http://localhost:9200/_all/_settings?preserve_existing=true' -d '{
      "index.merge.scheduler.max_thread_count" : "1",
      "index.refresh_interval" : "300s",
      "index.translog.durability" : "async"
    }'
    
性能壓測數據對比

elasticsearch單節點 version:7.1.1

節點配置: 8core 32G

壓測工具: esrally1.3.0

部署配置參考文檔:https://www.jianshu.com/p/c89975b50447

官方: https://esrally.readthedocs.io/en/latest/install.html

調優參數:

1. swapoff -a
2. jvm  20g
3. bootstrap.memory_lock: true
	 index.merge.scheduler.max_thread_count: 1 
  • 壓測結果

    官方使用兩台服務器進行壓測,一台運行 esrally ,一台運行 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
    
    壓測結果:
    寫性能 平均12w.5
    讀性能  match-all 122.61ms, term 23.07ms, range 543.2ms, aggs 2905.16ms, scroll 1111.57ms
    
    • 寫性能,平均在9w

      Min Throughput docs/s |分鍾的吞吐量

      Median Throughput docs/s |平均吞吐量

      Max Throughput docs/s |最大吞吐量

      Min Throughput index-append 76453.2 docs/s
      Median Throughput index-append 90592.4 docs/s
      Max Throughput index-append 124138 docs/s
    • 讀性能

      Min Throughput ops/s |每秒完成term操作次數

      Median Throughput ops/s |平均完成term操作次數

      Max Throughput ops/s |最大完成term操作次數

      Min Throughput term 6.56 ops/s
      Median Throughput term 6.56 ops/s
      Max Throughput term 6.56 ops/s
      Min Throughput range 1 ops/s
      Median Throughput range 1 ops/s
      Max Throughput range 1 ops/s
    • 出錯率(主要在寫入數據方面存在數據丟失問題)

      error rate index-append 0.07 %
  • 添加優化參數后壓測(再上一次基礎上加如下參數),6以后無法通過es的yml文件直接添加參數,需要通過API添加

    curl -H "Content-Type: application/json" -XPUT 'http://localhost:9200/_all/_settings?preserve_existing=true' -d '{
      "index.merge.scheduler.max_thread_count" : "1",
      "index.refresh_interval" : "300s",
      "index.translog.durability" : "async"
    }'
    
    discovery.zen.fd.ping_timeout:120s
    discovery.zen.fd.ping_timeout:120s
    
    • 寫性能,平均也在9w,沒有明顯的變化

      Min Throughput index-append 73367.9 docs/s
      Median Throughput index-append 89433.4 docs/s
      Max Throughput index-append 118648 docs/s
    • 讀性能,term操作有較為明顯增長

      Min Throughput term 27 docs/s
      Median Throughput term 27 docs/s
      Max Throughput term 27 docs/s
      Min Throughput range 1 docs/s
      Median Throughput range 1 docs/s
      Max Throughput range 1 docs/s
    • 出錯率

      error rate index-append 0.08 %
  • 增加副本數為1

    curl -H "Content-Type: application/json" -XPUT 'http://127.0.0.1:9200/_all/_settings' -d '{
        "index": {
           "number_of_replicas": "1"
        }
    }'
    
    • 寫性能,由於增加副本數,導致寫速度微量變慢,8.5w左右

      Min Throughput index-append 73240.3 docs/s
      Median Throughput index-append 84554.1 docs/s
      Max Throughput index-append 121398 docs/s
    • 讀性能,相對速率下降一半

      Min Throughput term 10.68 docs/s
      Median Throughput term 10.68 docs/s
      Max Throughput term 10.68 docs/s
      Min Throughput range 1 docs/s
      Median Throughput range 1 docs/s
      Max Throughput range 1 docs/s
    • 出錯率,出錯率下降

      error rate index-append 0.05 %


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM