es在启动的时候都会对系统配置进行检查,来确保你的配置是最合理的。但是es会判断你当前是什么环境,如果是开发环境,那么会输出警告日志到日志文件,如果是生产环境,那么会输出异常,导致启动失败。如何来判断是生产还是开发,es是通过network.host参数来判断,如果设置了127.0.0.1那么是开发环境,如果是其他表示是在生产环境上。也可以在开发环境强制启动检查启动配置,需要设置es.enforce.bootstrap.checks
为true
或者在环境变量中加入-Des.enforce.bootstrap.checks=true
堆大小检查
es会检查初始化堆大小和最大堆大小是否相等,如果不相等就会启动失败,因为不相等的话,堆在调整大小的时候会出现较长的暂停。并且要保证bootstrap.memory_lock是开启状态。
文件描述符检查
linux中一切都是文件,所以文件描述符是很重要的配置。es中需要使用大量的文件描述符。所以启动的时候会检查文件描述符是否配置正确。
内存锁检查
基于linux的swap特性,会对内存进行交换, 这样会导出es的性能出现问题,所以启动的时候会去检查内存这个的配置是否正确。
最大线程数检查
es通过将请求分解为多个阶段并将这些阶段传递给不同的线程池执行器来执行请求。所以线程数对es来说也是很重要的,必须要保证有足够多的线程数来执行,这样es的性能才能达到极致。
最大文件大小检查
es中的segment文件或者translog文件可能会很大,但是有些操作系统的文件大小是有限制的,如果超过了该限制,那么会写入失败。所以需要去设置文件的大小限制,可以在/etc/security/limits.conf中配置fsize=unlimited
最大虚拟内存大小检查
Elasticsearch和Lucene使用mmap将索引的部分映射到Elasticsearch地址空间,效果非常好。这将某些索引数据保存在JVM堆之外的内存中,以便快速访问。Elasticsearch应该有无限的地址空间。最大虚拟内存大小检查强制Elasticsearch进程拥有无限的地址空间,并且只在Linux上强制执行。在/etc/security/limits.conf文件里面配置as为unlimited。
最大map计数检查
es还需要更多的内存映射区域,es启动的时候会检查是否配置了至少262,144个内存映射区域,你可以在sysctl里面配置vm.max_map_count为262144。
客户端jvm检查
jvm分为服务端的和客户端的,es要求必须使用服务端的jvm来启动es。这样可以让es的性能达到最大化。
使用串行收集器检查
jvm有很多垃圾收集器,其中串行收集器对es的性能会有很大的影响,所以如果你设置了串行收集器,那么es会启动失败,可以在jvm.options里面配置-XX:+UseSerialGC。es默认使用CMS收集器。
系统调用筛选器检查
Elasticsearch根据操作系统安装不同风格的系统调用过滤器(例如,Linux上的seccomp)。安装这些系统调用过滤器是为了防止执行与fork相关的系统调用,将其作为一种防御机制,抵御对Elasticsearch的任意代码执行攻击。设置引导程序bootstrap.system_call_filter
为false
。
OnError和OnOutOfMemoryError检查
如果JVM遇到致命错误(OnError)或OutOfMemoryError (OnOutOfMemoryError), JVM选项OnError和OnOutOfMemoryError可以执行任意命令。但是,默认情况下,Elasticsearch系统调用过滤器(seccomp)是启用的,并且这些过滤器防止forking。因此,使用OnError或OnOutOfMemoryError与系统调用过滤器是不兼容的。如果使用了其中一个JVM选项,并且启用了系统调用过滤器,那么OnError和OnOutOfMemoryError检查将阻止Elasticsearch启动,这种检查总是强制执行的。要通过此检查,请不要启用OnError或OnOutOfMemoryError;或者可以升级到Java 8u92并使用JVM标志ExitOnOutOfMemoryError。虽然它不具备OnError或OnOutOfMemoryError的全部功能,但启用seccomp后,将不支持任意forking。
早期访问检查
OpenJDK项目提供了即将发布的版本的早期访问快照,这些版本不适合生产,早期访问检查检测这些早期访问快照,要通过此检查,必须在JVM的发行版构建上启动Elasticsearch。
G1GC检查
JDK 8附带的HotSpot JVM的早期版本存在一些问题,当启用G1GC收集器时,这些问题可能导致索引损坏。受影响的版本是那些比JDK 8u40附带的HotSpot版本更早的版本。G1GC检查检测热点JVM的这些早期版本。
所有权限检查
es在启动的时候,会去检查java.security.AllPermission是否开启,如果开启了,那么等同于禁用安全管理器,所以要确保该配置是关闭的。
发现配置检查
默认情况下,当Elasticsearch第一次启动时,它将尝试发现运行在同一主机上的其他节点。如果在几秒钟内没有发现选定的主节点,则Elasticsearch将形成一个集群,其中包含发现的任何其他节点。在开发模式中不需要任何额外的配置就可以形成这个集群,这是很有用的,但是这不适合生产环境,因为可能会形成多个集群并因此丢失数据。此引导程序检查确保没有使用默认配置运行发现。可以修改以下任一配置:
- discovery.seed_hosts
- discovery.seed_providers
- cluster.initial_master_nodes
注意:本文归作者所有,未经作者允许,不得转载