Elasticsearch7 单节点与集群部署

最近对新版本的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

如上图,下载对应需要的 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/

目录结构说明:

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创建完成后,直接启动。然而启动又报错了,如下:

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

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

#bootstrap.memory_lock: true

bootstrap.system_call_filter: false

然后保存后,就ok了。


1、报max_map_count错误:

解决办法:

修改配置sysctl.conf

sudo vi /etc/sysctl.conf

添加下面配置:vm.max_map_count=655360,并执行命令:sysctl -p

2、报 max file descriptors错误:

 max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]

解决办法:

编辑 /etc/security/limits.conf,追加以下内容(*为所有用户,可指定用户):

* soft nofile 65536

* hard nofile 65536

此文件修改后需要重新登录用户,才会生效


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

nohup ./elasticsearch 1>/dev/null 2>&1 &

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

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

cluster_name : 默认名为 elasticsearch

version :版本信息


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

 

#健康检查
curl '127.0.0.1:9200/_cat/health?v'

#查询es中所有索引,所有已存在的索引
curl '127.0.0.1:9200/_cat/indices?v'

#创建新的索引【索引要求是全小写字符,可以有下划线隔开】
curl -XPUT 127.0.0.1:9200/my_new_index?pretty

在给索引添加数据时,需要注意,由于7.x不再支持创建type,但实际上并未彻底去掉type,而是提供了默认值“_doc”。

执行添加文档:

curl -XPUT 127.0.0.1:9200/my_new_index/_doc/1?pretty -d  '{"name":"zhangsan","age":"33"}'

结果报错了。。。

{"error" : "Content-Type header [application/x-www-form-urlencoded] is not supported","status" : 406}

找到问题后,执行下面的命令就可以了。

curl -H "Content-Type: application/json" -XPUT 127.0.0.1:9200/my_new_index/_doc/1?pretty -d  '{"name":"张三","age":"33"}'

查看数据

curl -XGET 127.0.0.1:9200/my_new_index/_doc/1?pretty


补充:官方给的消息是从6.8 和 7.1 开始默认提供安全插件,已经不需要付费购买了,配置起来也很简单。

第一步:切换到elastsearch的目录下,使用下列命令生成证书

bin/elasticsearch-certutil cert -out config/elastic-certificates.p12 -pass ""

第二步:打开config/elasticsearch.yaml,在尾部添加下面一行代码:

xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12

第三步:自动生成好几个默认用户和密码

启动elasticsearch,新打开一个终端,使用cd命令切换到elasticsearch目录,然后使用 bin/elasticsearch-setup-passwords auto 命令自动生成好几个默认用户和密码。


三、ES集群的配置

直接把elasticsearch.yml的配置贴出来:

# ---------------------------------- Cluster -----------------------------------
# Use a descriptive name for your cluster:
cluster.name: intellis-7.4.2

# ------------------------------------ Node ------------------------------------
# Use a descriptive name for the node:
node.name: node-2

# Path to directory where to store the data (separate multiple locations by comma):
path.data: /data/apps/middle/es/elasticsearch-7.4.2/data

# Path to log files:
path.logs: /data/apps/middle/es/elasticsearch-7.4.2/logs

# Set the bind address to a specific IP (IPv4 or IPv6)
network.host: 172.59.30.254

# Set a custom port for HTTP:
http.port: 9202
#集群服务的端口,默认为9300
transport.tcp.port: 9300

# --------------------------------- Discovery ----------------------------------
#
# Pass an initial list of hosts to perform discovery when this node is started:
# The default list of hosts is ["127.0.0.1", "[::1]"]

discovery.seed_hosts: ["172.59.30.51:9300","172.59.30.254:9300","172.59.30.99:9300"]

# Bootstrap the cluster using an initial set of master-eligible nodes:
#
cluster.initial_master_nodes: ["node-1","node-2","node-3"]

#此处我使用了sql插件,所以需要禁用ES默认sql插件
xpack.sql.enabled: false
  • 集群关联遇到的坑:所有节点的集群配置完成前,不要单独启动某一个节点!!!如果拷贝已启用的,请手动删除data和logs目录的数据!!!

四、Elasticsearch安全认证

安全认证是在7.6上操作。

1、集群身份认证

在elasticsearch.yml配置文件中加入

xpack.security.enabled: true

2、生成证书

在创建过程中加入密码

./bin/elasticsearch-certutil ca

会生成elastic-stack-ca.p12,将证书copy到config下,命名为elastic-certificates.p12。所有集群节点共用同一个证书文件,将elastic-certificates.p12拷贝到其它节点上。

3、配置elasticsearch.yml文件

#开始加过了,不要重复
#xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.keystore.type: PKCS12
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.type: PKCS12
xpack.security.audit.enabled: true

4、将证书密码加入到你的Elasticsearch keystore中

./bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password

./bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password

启动每一个节点。所有节点启动完成后,生成用户密码

5、集群创建用户密码

需要保证存在master节点,在一个节点上创建就可以了。

#手动创建密码
./bin/elasticsearch-setup-passwords interactive
#自动创建密码
./bin/elasticsearch-setup-passwords auto
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值