ElasticSearch性能优化
1) 防止脑裂
discovery.zen.minimum_master_modes: 50% 节点最小数
2) 设置memory_lock
来锁定进程的物理内存地址 bootstrap.memory_lock: true 允许 JVM 锁住内存,禁止操作系统交换出去
3) 设置分片数
如果分片数过少或过多,都会导致检索比较慢。
分片数过多会导致检索时打开比较多的文件,另外也会导致多台服务器之间通讯。
而分片数过少会导至单个分片索引过大,所以检索速度也会慢。
建议单个分片最多存储20G左右的索引数据,分片个数建议5-20个比较合适
4) 设置副本数
副本多的话,可以提升搜索的能力,但是如果设置很多副本的话也会对服务器造成额外的压力,因为需要主分片需要给所有副本同步数据。所以建议最多设置1-2个即可
5) 构建全量数据
如果在项目开始的时候需要批量入库大量数据的话,建议将副本数设置为0,不需要实时refresh
"number_of_replicas": 0 可以先关闭replicas建立副本
"refresh_interval": "-1" 不需要实时refresh
6) 去掉mapping中_all字段
Index中默认会有_all这个字段,默认会把所有字段的内容都拷贝到这一个字段里面,这样会给查询带来方便,但是会增加索引时间和索引尺寸。
7) translog 优化:
"translog": {
"sync_interval": "60s", --sync间隔调高
"durability": "async", – 异步更新
"flush_threshold_size":"1g" --log文件大小
}
8) 使用node master, client data
master,client不存储任何索引数据。协调各种创建索引请求或者查询请求
data节点不用开启http服务。将其中的配置 参数这样设置:http.enabled: false,同时也不要安装head, bigdesk, marvel等监控 插件,这样保证data节点服务器只需处理创建/更新/删除/查询索引数据等操作。