ElasticSearch 启动引导检查

引导检查可以确保es能够更好的提供服务,以及提前发现一些问题。
单点模式下可以通过设置es.enforce.bootstrap.checks = true或者配置在JVM配置中ES_JAVA_OPTS添加-Des.enforce.bootstrap.checks=true配置强制进行与节点配置无关的引导检查。

堆内存大小检查(Heap size check)

要通过堆大小检查,必须配置堆大小,并且将初始大小与最大配置成一样,避免在扩展时导致系统暂停。如果
bootstrap.memory_lock=trueJVM将在启动时锁定堆的初始大小

文件描述符大小检查(File descriptor check)

系统限制了应用打开的文件描述符数量,需要进行配置允许一个应用打开的文件描述符多少,es检查需要的文件描述符需要大于等于65535.

应用内存锁定检查(Memory lock check)

当jvm进行majorGC时,他会触及所有应用内存分页,单某些内存被交换到硬盘的虚拟内存中时,他需要被重新交换回来,会带来大量的性能损耗,所以锁定内存,禁止交换是很有必要的。要通过这个检查,可以设置bootstrap.memory_lock=true来进行锁定。

最大线程数检查(Maximum number of threads check)

Elasticsearch通过将请求分解为步骤并将这些步骤传递给不同的线程池执行器来执行请求。Elasticsearch中有不同的线程池执行器,用于执行各种任务。因此,Elasticsearch需要创建大量线程的能力。Elasticsearch进程至少创建4096个线程。这可以通过/etc/security/limits.conf使用nproc设置

最大文件数检查(Max file size check)

在Elasticsearch进程可以创建的最大文件大小受到限制于系统,当写入文件太大时可能导致写入失败。因此需要设置写入最大文件限制,可以通过设置/etc/security/limits.conf fsize不受限。

最大虚拟内存检查(Maximum size virtual memory check)

Elasticsearch使用了内存映射mmap 技术提升访问索引的速度,在linux系统中可以通过设置/etc/security/limits.conf,指定运行es的用户不受限制。

最大映射数检查(Maximum map count check)

内存映射mmap除了需要设置虚拟内存不受限,还需要设置内核是否允许进程拥有262144个内存映射区域,你可以通过设置
sysctl vm.max_map_count = 262144
仅当使用mmapfs或hybridfs作为索引的存储类型时,才需要最大映射计数检查,如果你不需要使用内存映射技术,此项不会强制引导检查

JVM检查(Client JVM check)

OpenJDK派生的JVM提供了两种不同的JVM:客户机JVM和服务器JVM。这些jvm使用不同的编译器从Java字节码生成可执行的机器代码。客户机JVM针对启动时间和内存占用进行了优化,而服务器JVM则针对最大化性能进行了优化。两个vm之间的性能差异可能很大。客户端JVM检查确保Elasticsearch不在客户端JVM中运行。要通过客户机JVM检查,必须使用服务器VM启动Elasticsearch。在现代系统和操作系统中,服务器VM是默认的

串行收集器检查(Use serial collector check)

串行收集器适合於单逻辑CPU机器或非常小的堆内存,它不适合运行Elasticsearch。将串行收集器与Elasticsearch结合使用可能会对性能造成破坏。串行收集器检查确保Elasticsearch未配置为与串行收集器一起运行。要通过串行收集器检查,不能使用串行收集器启动Elasticsearch(无论是使用的JVM的默认值,还是使用-XX:+UseSerialGC显式指定的值)。
注意,Elasticsearch附带的默认JVM配置将Elasticsearch配置为使用CMS收集器。

系统调用过滤器检查(System call filter check)

Elasticsearch根据操作系统(例如,Linux上的seccomp)安装不同风格的系统调用过滤器。安装这些系统调用过滤器是为了防止执行与forking相关的系统调用,以此作为对Elasticsearch上任意代码执行攻击的防御机制。系统调用筛选器检查确保如果启用了系统调用筛选器,则它们已成功安装。要通过系统调用筛选器检查,您必须修复系统上阻止安装系统调用筛选器的任何配置错误(检查日志),或者自行承担通过设置禁用系统调用筛选器的风险,关闭系统调用过滤检查bootstrap.system_call_fiter=false

错误或者内存溢出错误检查 (OnError and OnOutOfMemoryError checks)

此检查总是强制的。若要通过此检查,请不要启用OnError或onoutfmemoryerror;而是升级到Java 8u92并使用JVM标志ExitOnOutOfMemoryError。虽然这不具备OnError或OnOutOfMemoryError的全部功能,但启用seccomp时将不支持任意分叉

JVM稳定版本检查(Early-access check)

OpenJDK项目提供了即将发布的版本的早期访问快照。这些版本不适合生产。早期访问检查检测这些早期访问快照。要通过此检查,必须在JVM的发布版本上启动Elasticsearch。

G1垃圾收集器检查(G1GC check)

众所周知,JDK 8附带的HotSpot JVM的早期版本存在一些问题,当G1GC收集器启用时,这些问题会导致索引损坏。受影响的版本是那些早于JDK 8u40附带的HotSpot版本的版本。G1GC检查检测这些早期版本的热点JVM

所有权限检查(All permission check)

所有权限检查确保在引导期间使用的安全策略不会授予Elasticsearch java.security.all.AllPermission 。在授予所有权限的情况下运行等同于禁用安全管理器。

发现配置检查(Discovery configuration check)

默认情况下,当Elasticsearch首次启动时,它将尝试发现运行在同一主机上的其他节点。如果在几秒钟内找不到选定的主节点,则Elasticsearch将形成一个集群,其中包括已发现的任何其他节点。在开发模式下可以在不进行任何额外配置的情况下形成此群集是很有用的,但这不适合生产,因为这样可能会形成多个群集并因此丢失数据。

此引导检查可确保发现未使用默认配置运行。可以通过设置以下至少一个属性来满足:

  • discovery.seed_hosts
  • discovery.seed_providers
  • cluster.initial_master_nodes
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章