zoukankan      html  css  js  c++  java
  • elasticsearch index tuning

    一、扩容
    tag_server当前使用ElasticSearch版本为5.6,此版本单个index的分片是固定的,一旦创建后不能更改。
    1、扩容方法1,不适
    ES6.1支持split index功能,实现扩容:
     
    2、扩容方法2
    5.6版本,只能通过增加副本数量的方式:
    PUT /blogs/_settings
    {
    "number_of_replicas" : 2
    }
     
    ES默认分片数为5,副本数为1。即默认配置下,ES天然支持10个节点。tag_server使用的ES,原有3个节点,新申请了6个。只需将新节点加入cluster即可。
     
    二、优化
    1)增加refresh interval时长
    并不是所有的情况都需要每秒刷新。可能你正在使用 Elasticsearch 索引大量的日志文件, 你可能想优化索引速度而不是近实时搜索, 可以通过设置 refresh_interval , 降低每个索引的刷新频率:
     
    PUT /twitter/_settings
    {
    "index" : {
    "refresh_interval" : "1s"
    }
    }
    curl -XPUT '10.65.128.44:9200/shopee_id_v2/_settings' -d '{
    "index" : {
    "refresh_interval" : "60s"
    }
    }'
    2)新建大索引时,可临时关闭refresh功能
    refresh_interval 可以在既存索引上进行动态更新。 在生产环境中,当你正在建立一个大的新索引时,可以先关闭自动刷新,待开始使用该索引时,再把它们调回来:
     
    PUT /my_logs/_settings
    { "refresh_interval": -1 } 关闭自动刷新。
     
    PUT /my_logs/_settings
    { "refresh_interval": "1s" } 每秒自动刷新。
     
    refresh_interval 需要一个 持续时间 值, 例如 1s (1 秒) 或 2m (2 分钟)。 一个绝对值 1 表示的是 1毫秒 --无疑会使你的集群陷入瘫痪。
     
    3)调节translog的fsync到磁盘间隔时间
    translog 的目的是保证操作不会丢失。这引出了这个问题: Translog 有多安全 ?
     
    在文件被 fsync 到磁盘前,被写入的文件在重启之后就会丢失。默认 translog 是每 5 秒被 fsync 刷新到硬盘, 或者在每次写请求完成之后执行(e.g. index, delete, update, bulk)。这个过程在主分片和复制分片都会发生。最终, 基本上,这意味着在整个请求被 fsync 到主分片和复制分片的translog之前,你的客户端不会得到一个 200 OK 响应。
     
    在每次请求后都执行一个 fsync 会带来一些性能损失,尽管实践表明这种损失相对较小(特别是bulk导入,它在一次请求中平摊了大量文档的开销)。
     
    但是对于一些大容量的偶尔丢失几秒数据问题也并不严重的集群,使用异步的 fsync 还是比较有益的。比如,写入的数据被缓存到内存中,再每5秒执行一次 fsync 。
     
    这个行为可以通过设置 durability 参数为 async 来启用:
     
    PUT /my_index/_settings
    {
    "index.translog.durability": "async",
    "index.translog.sync_interval": "5s"
    }
    这个选项可以针对索引单独设置,并且可以动态进行修改。如果你决定使用异步 translog 的话,你需要 保证 在发生crash时,丢失掉 sync_interval 时间段的数据也无所谓。请在决定前知晓这个特性。
     
    如果你不确定这个行为的后果,最好是使用默认的参数( "index.translog.durability": "request" )来避免数据丢失。
     
    4)
    If you are doing a bulk import and don’t care about search at all, you can disable merge throttling entirely. This will allow indexing to run as fast as your disks will allow:
     
    PUT /_cluster/settings
    {
    "transient" : {
    "indices.store.throttle.type" : "none"
    }
    }
    Setting the throttle type to none disables merge throttling entirely. When you are done importing, set it back to merge to reenable throttling.
    PUT /_cluster/settings
    {
    "persistent" : {
    "indices.store.throttle.max_bytes_per_sec" : "20mb"
    }
    }
    If you are using spinning media instead of SSD, you need to add this to your elasticsearch.yml:
     
    index.merge.scheduler.max_thread_count: 1
     
    Spinning media has a harder time with concurrent I/O, so we need to decrease the number of threads that can concurrently access the disk per index. This setting will allow max_thread_count + 2 threads to operate on the disk at one time, so a setting of 1 will allow three threads.
     
    5)将replica个数临时调成0
    index.number_of_replicas: 0
     
    6)如何修改配置:
    临时或永久配置需要在 JSON 体里分别指定:
     
    PUT /_cluster/settings
    {
    "persistent" : {
    "discovery.zen.minimum_master_nodes" : 2
    },
    "transient" : {
    "indices.store.throttle.max_bytes_per_sec" : "50mb"
    }
    }
    这个永久设置会在全集群重启时存活下来。
    这个临时设置会在第一次全集群重启后被移除。
     
    示例:
    调节的relocation并发数,用于加入多个node时使用:
    curl -XPUT '10.65.128.44:9200/_cluster/settings' -d '{ "transient" : { "cluster.routing.allocation.cluster_concurrent_rebalance" : 2 } }'
     

  • 相关阅读:
    关于sencha touch中给文本添加焦点无效的解决方案
    sencha touch 入门系列 (五)sencha touch运行及代码解析(上)
    关于用phonegap 3.0+ 打包后sencha touch按钮点击切换动画延迟接近一秒的以及界面闪烁的解决方案
    Building a Simple User Interface(创建一个简单的用户界面)
    Running Your App(运行你的应用程序)
    android GridLayout布局
    Android Studio SVN的使用
    Android Library项目发布到JCenter最简单的配置方法
    AndroidStudio项目提交(更新)到github最详细步骤
    Android RecyclerView的使用
  • 原文地址:https://www.cnblogs.com/gm-201705/p/9522096.html
Copyright © 2011-2022 走看看