Elasticsearch7.3.2单节点与集群部署

最近对新版本的ES进行测试,现在整理一下。

一、Elasticsearch 7.x 特性

ES 7.0是2019年4月份发布的,底层是Lucence 8.0。其新特性有:

1、废除单个索引下多Type的支持

2、彻底废弃_all字段支持,为提升性能默认不再支持全文检索

3、新增应用程序主动检测功能,搭配对应版本的kibana,用户可监测应用服务的健康状态,并在出现问题后及时发出通知

4、取消Query结果中的Hits Count的支持(聚合查询除外),使得查询性能大幅提升。这就意味着,每次查询后将不能得到精确的结果集数量

5、完整的High Level REST Client,对于java编程,建议采用该方式操作ES集群

6、新增间隔查询(Intervals Queries),用户可设置多字符串在文档中出现的先后顺序进行检索

7、新增Script Score Query,通过此操作,用户可以精确控制返回结果的score分值

8、引入新的集群协调子系统,缩减配置项提升稳定性。时间戳纳秒级支持,提升数据精度

9、自带jdk,所以在安装ES时不再需要单独下载和配置JAVA_HOME。

10、不会再有OOM的情况,JVM引入了新的circuit breaker(熔断)机制,当查询或聚合的数据量超过单机处理的最大内存限制时会被截断,并抛出异常。

11、默认Primary Shard数从5到1,避免Over Sharding;

12、TOP-K检索更快,即查询相关性速度优化,采用Weak-AND算法,核心原理:取TOP N结果集,估算命中记录数。

一般我们在计算文本相关性的时候,会通过倒排索引的方式进行查询,通过倒排索引要比全量遍历节约大量时间,但有时仍然很慢。原因时很多时候我们其实只是想要top n个结果,一些结果明显较差的也进行了复杂的相关性计算,而weak-and算法通过计算每个词的贡献上限来估计文档的相关性上限,从而建立一个阈值对倒排中的结果进行剪枝,从而得到提速的效果。

二、Elasticsearch7.3.2安装步骤

下载地址:https://www.elastic.co/cn/downloads/elasticsearch

Elasticsearch7.3.2单节点与集群部署_第1张图片

如上图,下载对应需要的 ES,ES 支持 Docker 方式启动。ES 7.x 不需要本地 JDK 环境支持:

ES 5,安装需要 JDK 8 以上;ES 6.5,安装需要 JDK 11 以上;ES 7.3.2,内置了 JDK 12

1、解压(我用的是linux,下载的elasticsearch-7.3.2-linux-x86_64.tar.gz)

tar -xzf elasticsearch-7.3.2-linux-x86_64.tar.gz
cd elasticsearch-7.3.2/

Elasticsearch7.3.2单节点与集群部署_第2张图片

目录结构说明:

bin :脚本文件,包括 ES 启动 & 安装插件等等

config : elasticsearch.yml(ES 配置文件)、jvm.options(JVM 配置文件)、日志配置文件等等

JDK : 内置的 JDK,JAVA_VERSION="12.0.2"

lib : 类库

logs : 日志文件

modules : ES 所有模块,包括 X-pack 等

plugins : ES 已经安装的插件。默认没有插件

JVM堆内存大小的设置,请参考:https://www.elastic.co/guide/cn/elasticsearch/guide/current/heap-sizing.html

2、启动 Elasticsearch

启动方式很简单,进入bin目录,直接./elasticsearch

刚开始我是用的root用户启动的,报如下错误:

OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
[2019-09-17T19:47:26,884][WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [iZ2zednnrz8j330kpcso5eZ] uncaught exception in thread [main]
org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root
	at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:163) ~[elasticsearch-7.3.2.jar:7.3.2]
	at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:150) ~[elasticsearch-7.3.2.jar:7.3.2]
	at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) ~[elasticsearch-7.3.2.jar:7.3.2]
	at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124) ~[elasticsearch-cli-7.3.2.jar:7.3.2]
	at org.elasticsearch.cli.Command.main(Command.java:90) ~[elasticsearch-cli-7.3.2.jar:7.3.2]
	at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:115) ~[elasticsearch-7.3.2.jar:7.3.2]
	at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:92) ~[elasticsearch-7.3.2.jar:7.3.2]
Caused by: java.lang.RuntimeException: can not run elasticsearch as root
	at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:105) ~[elasticsearch-7.3.2.jar:7.3.2]
	at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:172) ~[elasticsearch-7.3.2.jar:7.3.2]
	at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:349) ~[elasticsearch-7.3.2.jar:7.3.2]
	at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:159) ~[elasticsearch-7.3.2.jar:7.3.2]
	... 6 more

ES提示在root用户下是不能启动的,所以就需要增加一个用户es。

#添加用户
adduser es
#设置密码
passwd es
---------------
#授权,root用户下
chmod -v u+w /etc/sudoers
#编辑
vim /etc/sudoers
#文件中插入,在root用户的下面(NOPASSWD:ALL,使用sudo时不用输密码)
es      ALL=(ALL)       NOPASSWD:ALL
#收回权限
chmod -v u-w /etc/sudoers
---------------
#添加分组
groupadd testgroup
usermod -G testgroup es
#修改es目录的访问权限
chown -R es:testgroup *

用户es创建完成后,直接启动。然而启动又报错了,如下:

Elasticsearch7.3.2单节点与集群部署_第3张图片

查看了下资料发现,是我linux版本的问题导致的,

 因为Centos6不支持SecComp,而ES默认bootstrap.system_call_filter为true进行检测,所以导致检测失败,失败后直接导致ES不能启动解决:修改elasticsearch.yml 添加一下内容 :

#bootstrap.memory_lock: true

bootstrap.system_call_filter: false

然后保存后,就ok了。

如果让ES在后台保持运行,可以使用:nohup ./elasticsearch >es.log 2>&1 &

打开新的窗口访问一下:curl '127.0.0.1:9200',返回如下内容,说明单节点的ES已经启动成功了。

Elasticsearch7.3.2单节点与集群部署_第4张图片

name : 默认启动的时候指定了 ES 实例名称

cluster_name : 默认名为 elasticsearch

version :版本信息

可以通过curl '127.0.0.1:9200/_cat/nodes/?v' ,可以看到当前节点的信息,如下:

ES集群的配置,待续。

你可能感兴趣的:(Elasticsearch)