集群调优

  1. elasticsearch.yml 中尽量只写必备参数其余通过api动静设置
  2. 参见文档 setup elasticsearch -》impotant elasticsearch configuration
  3. 随着es降级 很多网络流传的配置参数不再反对

根本参数设置

  1. cluster.name
  2. node.name
  3. node.master/node.data/node.ingest
  4. network.host 倡议指定的内网ip 而不是偷懒设置为0.0.0.0
  5. discovery.zen.ping.unicast.hosts 设置为集群其余节点地址
  6. discovery.zen.minimum_master_nodes个别设定为2
  7. path.data/path.log
  8. 除上述参数外再依据须要再减少其余动态配置参数
  9. 动静设定的参数有transient和persistent两种,前者再集群重启后会失落,后者不会,然而两种设置都会笼罩elasticsearch.yml的配置

jvm内存

  1. 不要超过31GB
  2. 余留一半给操作系统,用来做文件缓存
  3. 具体大小杜绝存储的数量来估算,为了性能,在内存和数据量间有一个倡议的比例

    1. 搜寻类我的项目的比例倡议在1:16以内
    2. 日志类我的项目比例在1:48 - 1:96
  4. 假如总数据量大小为1TB 3个node 1正本 那么每个node存储的数量为666GB,即700GB,预留20%,每个node存储850GB数据
  5. 如果是搜寻类,每个node内存大小为850GB/16=53GB 大于31GB 31*16=496 即每个node最多存储496GB数据 即起码须要5个node
  6. 如果是日志类我的项目 每个node内存大小为850GB/48=18GB因而三个节点足够

写性能优化

指标是增大写的吞吐量eps
客户端 多线程写
es 在高质量数据建模的前提下 次要在refresh translog flush 之间做文章

  1. 升高refresh频率

    1. 减少refresh_interval 升高实时性 增大每次refresh文档解决数,默认为1s 设置为-1 禁止主动refresh
    2. 减少index buffer size 参数为indices.memory.index_buffer_size 动态参数 须要设定在elasticsearch.yml 默认为10%
  2. 升高translog写磁盘的频率 进步写效率 然而 升高了灾备的能力

    1. index.translog.durability 设置为async index.translog.sync_interval设置须要的大小 例如 120s那么translog每120s写一次磁盘
    2. index.translog.flush_threshold_size 默认为512mb 即translog超过大小时会触发一次flush,那么调大该大小能够防止flush产生
  3. 设置正本数0 写入结束后再减少
  4. 正当设计shard数 保障shard均匀分布在集群上 充分利用资源

    1. index.routing.allocation.total_shards_per_node限定每个索引在每个node上可调配的总主副分片数
    2. 5个node某索引有10个主分片 1个正本 上述值该设置为多少?

      1. (10+10)/5=4
      2. 理论设置5个 搁置在node下线时 分片迁徙失败

读优化

  1. 高质量的数据建模是优化的根底
  2. 将须要通过script脚本动静计算的值进步筹备好作为字段存储在文档中
  3. 尽量使得数据模型贴近业务模型

设定shard数

  1. es性能是线性扩大的 只须要测出一个shard的性能指标,而后依据需要算出须要几个shard,例如单个shard写入eps是10000 那么需要是50000 则须要5个shard
  2. 测试单个shard

    1. 搭建与生产雷同配置的单节点集群
    2. 设定一个单分片零正本索引
    3. 写入理论生产数据进行测试 获取性能指标
    4. 针对数据进行查问申请 获取读性能指标
    5. 压测器具可选esrally
  3. 搜寻场景 单个shard大小不要超过15gb,如果是日志场景 单个shard不要超过50GB shard越大 查问性能越低
  4. 此时只有估算出索引总数居大小再除以单个shard大小也能够失去分片数