Elasticsearch 100问(下)

四、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

  1. 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可在本地离线安装文档。

猜你喜欢

转载自blog.csdn.net/qq_28834355/article/details/113388791