1、开发模式

开发模式是默认配置(未配置集群发现设置),如果用户只是出于学习目的,而引导检查会把很多用户挡在门外,所以ES提供了一个设置项discovery.type=single-node。此项配置为指定节点为单节点发现以绕过引导检查。

2、生产模式

2.1 何为生产模式

生产模式,顾名思义,即用于生产环境的模式

当用户修改了有关集群的相关配置会触发生产模式,在生产模式下,服务启动会触发ES的引导检查或者叫启动检查(bootstrap checks),所谓引导检查就是在服务启动之前对一些重要的配置项进行检查,检查其配置值是否是合理的。引导检查包括对JVM大小、内存锁、虚拟内存、最大线程数、集群发现相关配置等相关的检查,如果某一项或者几项的配置不合理,ES会拒绝启动服务,并且在开发模式下的某些警告信息会升级成错误信息输出。引导检查十分严格,之所以宁可拒绝服务也要阻止用户启动服务是为了防止用户在对ES的基本使用不了解的前提下启动服务而导致的后期性能问题无法解决或者解决起来很麻烦。因为一旦服务以某种不合理的配置启动,时间久了之后可能会产生较大的性能问题,但此时集群已经变得难以维护和扩展,ES为了避免这种情况而做出了引导检查的设置,本来在开发模式下为警告的启动日志会升级为报错(Error)。这种设定虽然增加了用户的使用门槛,但是避免了日后产生更大的问题。

ES 在 8.x 版本中,默认开启了Security,这对新手学习很不友好,实际上违背了Elastic官方设置开发模式的初衷,安全固然重要,但是没必要把门槛设置这么高,建议官方在后续更新中,把Security在开发模式中默认关闭,在生产模式下,默认开启。这样更加合理。

2.2 哪些配置会触发生产模式

  • network.host
  • discovery.seed_hosts
  • cluster.initial_master_nodes

总结;当你配置集群发现相关配置项的时候,系Elasticsearch 就会认为你将用于生产环境,并将警告升级为异常。这些异常将阻止 Elasticsearch 节点启动。这是一项重要的安全措施,可确保不会因为服务器配置错误而丢失数据。

原因很简单,ES认为:你不用于生产,干嘛配置集群?单节点明明就够学习用了!既然你配置集群了,那么肯定是用于生产环境的。