集群调优
- elasticsearch.yml 中尽量只写必备参数其余通过api动静设置
- 参见文档 setup elasticsearch -》impotant elasticsearch configuration
- 随着es降级 很多网络流传的配置参数不再反对
根本参数设置
- cluster.name
- node.name
- node.master/node.data/node.ingest
- network.host 倡议指定的内网ip 而不是偷懒设置为0.0.0.0
- discovery.zen.ping.unicast.hosts 设置为集群其余节点地址
- discovery.zen.minimum_master_nodes个别设定为2
- path.data/path.log
- 除上述参数外再依据须要再减少其余动态配置参数
- 动静设定的参数有transient和persistent两种,前者再集群重启后会失落,后者不会,然而两种设置都会笼罩elasticsearch.yml的配置
jvm内存
- 不要超过31GB
- 余留一半给操作系统,用来做文件缓存
具体大小杜绝存储的数量来估算,为了性能,在内存和数据量间有一个倡议的比例
- 搜寻类我的项目的比例倡议在1:16以内
- 日志类我的项目比例在1:48 - 1:96
- 假如总数据量大小为1TB 3个node 1正本 那么每个node存储的数量为666GB,即700GB,预留20%,每个node存储850GB数据
- 如果是搜寻类,每个node内存大小为850GB/16=53GB 大于31GB 31*16=496 即每个node最多存储496GB数据 即起码须要5个node
- 如果是日志类我的项目 每个node内存大小为850GB/48=18GB因而三个节点足够
写性能优化
指标是增大写的吞吐量eps
客户端 多线程写
es 在高质量数据建模的前提下 次要在refresh translog flush 之间做文章
升高refresh频率
- 减少refresh_interval 升高实时性 增大每次refresh文档解决数,默认为1s 设置为-1 禁止主动refresh
- 减少index buffer size 参数为indices.memory.index_buffer_size 动态参数 须要设定在elasticsearch.yml 默认为10%
升高translog写磁盘的频率 进步写效率 然而 升高了灾备的能力
- index.translog.durability 设置为async index.translog.sync_interval设置须要的大小 例如 120s那么translog每120s写一次磁盘
- index.translog.flush_threshold_size 默认为512mb 即translog超过大小时会触发一次flush,那么调大该大小能够防止flush产生
- 设置正本数0 写入结束后再减少
正当设计shard数 保障shard均匀分布在集群上 充分利用资源
- index.routing.allocation.total_shards_per_node限定每个索引在每个node上可调配的总主副分片数
5个node某索引有10个主分片 1个正本 上述值该设置为多少?
- (10+10)/5=4
- 理论设置5个 搁置在node下线时 分片迁徙失败
读优化
- 高质量的数据建模是优化的根底
- 将须要通过script脚本动静计算的值进步筹备好作为字段存储在文档中
- 尽量使得数据模型贴近业务模型
设定shard数
- es性能是线性扩大的 只须要测出一个shard的性能指标,而后依据需要算出须要几个shard,例如单个shard写入eps是10000 那么需要是50000 则须要5个shard
测试单个shard
- 搭建与生产雷同配置的单节点集群
- 设定一个单分片零正本索引
- 写入理论生产数据进行测试 获取性能指标
- 针对数据进行查问申请 获取读性能指标
- 压测器具可选esrally
- 搜寻场景 单个shard大小不要超过15gb,如果是日志场景 单个shard不要超过50GB shard越大 查问性能越低
- 此时只有估算出索引总数居大小再除以单个shard大小也能够失去分片数