四、ES启动检查
43、堆大小检查
JVM初始堆大小(Xms)与最大堆大小(Xmx)的值设置为相同。
44、文件描述符检查
设置为65536。
45.内存锁定检查
直接禁用操作系统的交换分区。
46.最大线程数检查
最大线程数,最少2048。
47.最大虚拟内存检查
max memory size设置为unlimited。
48.最大文件大小检查
file size设置为unlimited。
49.虚拟内存区域最大数量检查
vm.max_map_count=262144
50.JVMClient模式检查
OpenJDK提供了两种JVM的运行模式:clientJVM模式与serverJVM模式。需要以server的方式来启动ES,这也是默认的。
51.串行收集检查
ES默认使用CMS收集器,不能使用串行收集器。
52.系统调用过滤器检查
bootstrap.system_call_filter:false
- OnError与OnOutOfMemoryError检查
升级到Java8u92使用ExitOnOutOfMemoryError。
54.Early-access检查
需要让ES运行在JVM的稳定版。
55.G1GC检查
JDK8的早期版本有些问题,会导致索引损坏,JDK8u40之前的版本都会受影响。
五、优化写入速度
56、加大translog flush间隔,目的是降低iops、writeblock。
index.translog.durability:request这是影响ES写入速度的最大因素。
57、加大index refresh间隔,除了降低I/O,更重要的是降低了segmentmerge频率。
58、调整bulk请求。
59、优化磁盘间的任务均匀情况,将shard尽量均匀分布到物理主机的各个磁盘。
60、优化节点间的任务分布,将任务尽量均匀地发到各节点。
61、优化Lucene层建立索引的过程,目的是降低CPU占用率及I/O,例如,禁用_all字段。
六、搜索优化
62、为不再更新的只读索引执行forcemerge,将Lucene索引合并为单个分段。
63、使用eager_global_ordinals
64、关闭norms
65、index.store.preload预加载,加速查询。
66、调节搜索请求中的batched_reduce_size
67、设置action.search.shard_count。
68、近似聚合.
69、深度优先和广度优先。
70、ARS PUT /_cluster/settings{"transient":{"cluster.routing.use_adaptive_replica_selection":true}}
71、doc_values
如果确信某字段不需要排序或者聚合,或者从脚本中访问字段值,那么我们可以设置 doc_values = false,这样可以节省磁盘空间。
72、field_data
fielddata默认是关闭的,只有在使用text字段进行排序或聚合的时候要用到。
七、故障诊断
73、Profile API慢查询诊断
检查查询执行时间和其他详细信息。
74、Explain API
对于未分配的分片,给出为什么没有分配的具体原因。
对于已分配的分片,给出为什么将分片分配给特定节点的理由。
75、节点CPU使用率高节点占用CPU很高
hot_threads API。
76、节点内存使用率高
bulk队列
Netty的内存池。
indexing buffer
超大数据集的聚合
分段内存。
Fielddata cache:
77、ES集群分片磁盘容量策略
PUT _cluster/settings
{
“transient”: {
“cluster.routing.allocation.disk.watermark.low”: “85%”,
“cluster.routing.allocation.disk.watermark.high”: “50gb”,
“cluster.info.update.interval”: “1m”
}
}
78、I/O分析工具
iostat、blktrace、pidstat、iotop、systemtap、
79、内存诊断
top、free、vmstat、sar -B、sar -W
80、cpu诊断
vmstat/mpstat/
strace –c、perf
81、网络连接和流量
Sar、netstat –anp等。
八、其它相关的
82、集群重启步骤一
第一步:先暂停集群的shard自动均衡。
curl -XPUT http://ip:9200/_cluster/settings -d’
{
“transient” : {
“cluster.routing.allocation.enable” : “none”
}
}’
83、集群重启步骤二
第二步:shutdown你要升级的节点
curl -XPOST http://ip:9200/_cluster/nodes/_local/_shutdown
也可以通过各自的节点ID来关闭指定的节点(或者像这里说明 的别的选项):
curl -XPOST ‘http://ip:9200/_cluster/nodes/nodeId1,nodeId2/_shutdown’
84、集群重启步骤三
第三步:升级重启该节点,并确认该节点重新加入到了集群中
85、集群重启步骤四
第四步:重复2-3步,升级重启其它要升级的节点。
86、集群重启步骤五
第五步:重启启动集群的shard均衡
curl -XPUT http://ip/_cluster/settings -d’
{
“transient” : {
“cluster.routing.allocation.enable” : “all”
}
}’
到此整个集群安全升级并且重启结束。
87、集群规划
数据总量,每天的增量;
查询类型和搜索并发,QPS;
SLA级别。
88、节点数量
节点总数不应该太多,一般来说,最大集群规模最好控制在100个节点左右。
89、分片大小及分片数量
单个分片不要超过50GB,最大集群分片总数控制在几十万的级别。太多分片增加了主节点的管理负担,而且集群重启恢复时间会很长。
90、服务器配置
建议为集群配置较好的硬件,搜索对CPU、内存、磁盘的性能要求都很高,要达到比较低的延迟就需要较好的硬件资源。使用相同配置的服务器。
91、内存比较大的服务器,官方建议使用内存大小除以64GB来确定要部署的节点数,每个节点配置一部分数据盘,优点是利用率最高,缺点是部署复杂。
92、Commit Point
Lucene中有一个文件,用来记录所有Segments信息,叫做CommitPoint。查询时会同时查询所有Segments,并且对结果汇总。
93、es中默认是30分钟才flush一次磁盘
es数据提交到os chche。默认30分钟才flush一次磁盘,所以才需要translog。
94、flush命令的api如下:
POST /blogs/_flush //flush特定的index
POST /_flush?wait_for_ongoing//flush
95、elasticsearch可在本地离线安装文档。