日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

elasticsearch运维实战之2 - 系统性能调优

發(fā)布時(shí)間:2023/12/15 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 elasticsearch运维实战之2 - 系统性能调优 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

elasticsearch性能調(diào)優(yōu)

集群規(guī)劃

  • 獨(dú)立的master節(jié)點(diǎn),不存儲(chǔ)數(shù)據(jù), 數(shù)量不少于2
  • 數(shù)據(jù)節(jié)點(diǎn)(Data Node)
  • 查詢節(jié)點(diǎn)(Query Node),起到負(fù)載均衡的作用

Linux系統(tǒng)參數(shù)配置

文件句柄

Linux中,每個(gè)進(jìn)程默認(rèn)打開的最大文件句柄數(shù)是1000,對于服務(wù)器進(jìn)程來說,顯然太小,通過修改/etc/security/limits.conf來增大打開最大句柄數(shù)

* - nofile 65535

虛擬內(nèi)存設(shè)置

max_map_count定義了進(jìn)程能擁有的最多內(nèi)存區(qū)域

sysctl -w vm.max_map_count=262144

修改/etc/elasticsearch/elasticsearch.yml

bootstrap.mlockall: true

修改/etc/security/limits.conf, 在limits.conf中添加如下內(nèi)容

* soft memlock unlimited * hard memlock unlimited

memlock 最大鎖定內(nèi)存地址空間, 要使limits.conf文件配置生效,必須要確保pam_limits.so文件被加入到啟動(dòng)文件中。

確保/etc/pam.d/login文件中有如下內(nèi)容

session required /lib/security/pam_limits.so

驗(yàn)證是否生效

curl localhost:9200/_nodes/stats/process?pretty

磁盤緩存相關(guān)參數(shù)

vm.dirty_background_ratio 這個(gè)參數(shù)指定了當(dāng)文件系統(tǒng)緩存臟頁數(shù)量達(dá)到系統(tǒng)內(nèi)存百分之多少時(shí)(如5%)就會(huì)觸發(fā)pdflush/flush/kdmflush等后臺(tái)回寫進(jìn)程運(yùn)行,將一定緩存的臟頁異步地刷入外存;

vm.dirty_ratio

  • 該參數(shù)則指定了當(dāng)文件系統(tǒng)緩存臟頁數(shù)量達(dá)到系統(tǒng)內(nèi)存百分之多少時(shí)(如10%),系統(tǒng)不得不開始處理緩存臟頁(因?yàn)榇藭r(shí)臟頁數(shù)量已經(jīng)比較多,為了避免數(shù)據(jù)丟失需要將一定臟頁刷入外存);在此過程中很多應(yīng)用進(jìn)程可能會(huì)因?yàn)橄到y(tǒng)轉(zhuǎn)而處理文件IO而阻塞。

  • 把該參數(shù)適當(dāng)調(diào)小,原理通(1)類似。如果cached的臟數(shù)據(jù)所占比例(這里是占MemTotal的比例)超過這個(gè)設(shè)置,系統(tǒng)會(huì)停止所有的應(yīng)用層的IO寫操作,等待刷完數(shù)據(jù)后恢復(fù)IO。所以萬一觸發(fā)了系統(tǒng)的這個(gè)操作,對于用戶來說影響非常大的。

  • sysctl -w vm.dirty_ratio=10 sysctl -w vm.dirty_background_ratio=5

    為了將設(shè)置永久保存,將上述配置項(xiàng)寫入/etc/sysctl.conf文件中

    vm.dirty_ratio = 10 vm.dirty_background_ratio = 5

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

    swap空間是一塊磁盤空間,操作系統(tǒng)使用這塊空間保存從內(nèi)存中換出的操作系統(tǒng)不常用page數(shù)據(jù),這樣可以分配出更多的內(nèi)存做page cache。這樣通常會(huì)提升系統(tǒng)的吞吐量和IO性能,但同樣會(huì)產(chǎn)生很多問題。頁面頻繁換入換出會(huì)產(chǎn)生IO讀寫、操作系統(tǒng)中斷,這些都很影響系統(tǒng)的性能。這個(gè)值越大操作系統(tǒng)就會(huì)更加積極的使用swap空間。

    調(diào)節(jié)swappniess方法如下

    sudo sh -c 'echo "0">/proc/sys/vm/swappiness'

    io sched

    如果集群中使用的是SSD磁盤,那么可以將默認(rèn)的io sched由cfq設(shè)置為noop

    sudo sh -c 'echo "noop">/sys/block/sda/queue/scheduler'

    JVM參數(shù)設(shè)置

    在/etc/sysconfig/elasticsearch中設(shè)置最大堆內(nèi)存,該值不應(yīng)超過32G

    ES_HEAP_SIZE=32g ES_JAVA_OPTS="-Xms32g" MAX_LOCKED_MEMORY=unlimited MAX_OPEN_FILES=65535

    indice參數(shù)調(diào)優(yōu)

    以創(chuàng)建demo_logs模板為例,說明可以調(diào)優(yōu)的參數(shù)及其數(shù)值設(shè)定原因。

    PUT _template/demo_logs {"order": 6,"template": "demo-*","settings": {"index.merge.policy.segments_per_tier": "25","index.mapping._source.compress": "true","index.mapping._all.enabled": "false","index.warmer.enabled": "false","index.merge.policy.min_merge_size": "10mb","index.refresh_interval": "60s","index.number_of_shards": "7","index.translog.durability": "async","index.store.type": "mmapfs","index.merge.policy.floor_segment": "100mb","index.merge.scheduler.max_thread_count": "1","index.translog.translog.flush_threshold_size": "1g","index.merge.policy.merge_factor": "15","index.translog.translog.flush_threshold_period": "100m","index.translog.sync_interval": "5s","index.number_of_replicas": "1","index.indices.store.throttle.max_bytes_per_sec": "50mb","index.routing.allocation.total_shards_per_node": "2","index.translog.flush_threshold_ops": "1000000"},"mappings": {"_default_": {"dynamic_templates": [{"string_template": {"mapping": {"index": "not_analyzed","ignore_above": "10915","type": "string"},"match_mapping_type": "string"}},{"level_fields": {"mapping": {"index": "no","type": "string"},"match": "Level*Exception*"}}]}}"aliases": {}}

    replica數(shù)目

    為了讓創(chuàng)建的es index在每臺(tái)datanode上均勻分布,同一個(gè)datanode上同一個(gè)index的shard數(shù)目不應(yīng)超過3個(gè)。

    計(jì)算公式: (number_of_shard * (1+number_of_replicas)) < 3*number_of_datanodes

    每臺(tái)機(jī)器上分配的shard數(shù)目

    "index.routing.allocation.total_shards_per_node": "2",

    refresh時(shí)間間隔

    默認(rèn)的刷新時(shí)間間隔是1s,對于寫入量很大的場景,這樣的配置會(huì)導(dǎo)致寫入吞吐量很低,適當(dāng)提高刷新間隔,可以提升寫入量,代價(jià)就是讓新寫入的數(shù)據(jù)在60s之后可以被搜索,新數(shù)據(jù)可見的及時(shí)性有所下降。

    "index.refresh_interval": "60s"

    translog

    降低數(shù)據(jù)flush到磁盤的頻率。如果對數(shù)據(jù)丟失有一定的容忍,可以打開async模式。

    "index.translog.flush_threshold_ops": "1000000", "index.translog.durability": "async",

    merge相關(guān)參數(shù)

    "index.merge.policy.floor_segment": "100mb", "index.merge.scheduler.max_thread_count": "1", "index.merge.policy.min_merge_size": "10mb"

    mapping設(shè)置

    對于不參與搜索的字段(fields), 將其index方法設(shè)置為no, 如果對分詞沒有需求,對參與搜索的字段,其index方法設(shè)置為not_analyzed

    多使用dynamic_template

    集群參數(shù)調(diào)優(yōu)

    {"persistent": {"cluster": {"routing": {"allocation": {"enable": "new_primaries","cluster_concurrent_rebalance": "8","allow_rebalance": "indices_primaries_active","node_concurrent_recoveries": "8"}}},"indices": {"breaker": {"fielddata": {"limit": "30%"},"request": {"limit": "30%"}},"recovery": {"concurrent_streams": "10","max_bytes_per_sec": "200mb"}}},"transient": {"indices": {"store": {"throttle": {"type": "merge","max_bytes_per_sec": "50mb"}},"recovery": {"concurrent_streams": "8"}},"threadpool": {"bulk": {"type": "fixed""queue_size": "1000","size": "30"},"index": {"type": "fixed","queue_size": "1200","size": "30"}},"cluster": {"routing": {"allocation": {"enable": "all","cluster_concurrent_rebalance": "8","node_concurrent_recoveries": "15"}}}} }

    避免shard的頻繁rebalance,將allocation的類型設(shè)置為new_primaries, 將默認(rèn)并行rebalance由2設(shè)置為更大的一些的值

    避免每次更新mapping, 針對2.x以下的版本

    "indices.cluster.send_refresh_mapping": false

    調(diào)整threadpool, size不要超過core數(shù)目,否則線程之間的context switching會(huì)消耗掉大量的cpu時(shí)間,導(dǎo)致load過高。 如果沒有把握,那就不要去調(diào)整。

    定期清理cache

    為避免fields data占用大量的jvm內(nèi)存,可以通過定期清理的方式來釋放緩存的數(shù)據(jù)。釋放的內(nèi)容包括field data, filter cache, query cache

    curl -XPOST "localhost:9200/_cache/clear"

    其它

    • marvel: 安裝marvel插件,多觀察系統(tǒng)資源占用情況,包括內(nèi)存,cpu
    • 日志: 對es的運(yùn)行日志要經(jīng)常查看,檢查index配置是否合理,以及入庫數(shù)據(jù)是否存在異常

    調(diào)優(yōu)之后的運(yùn)行效果

    寫入量穩(wěn)定在30K/s

    轉(zhuǎn)載于:https://www.cnblogs.com/hseagle/p/6015245.html

    總結(jié)

    以上是生活随笔為你收集整理的elasticsearch运维实战之2 - 系统性能调优的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。