Elasticsearch 6.1.4 upgrade to 7.4.0
Contents
[TOC]
1. 集群改动
1. Zen Discovery 改动
不再有discovery.zen.minimum_master_nodes
这个控制集群脑裂的配置,转而由集群自主控制,并且新版在启动一个新的集群的时候需要有cluster.initial_master_nodes
初始化集群列表。
|
|
discovery.seed_hosts
:7.x版本新增参数,写入候选主节点的设备地址,来开启服务时就可以被选为主节点,由discovery.zen.ping.unicast.hosts
参数改变而来。
cluster.initial_master_nodes
: 7.x版本新增参数,写入候选主节点的设备地址,来开启服务时就可以被选为主节点。
2. 插件改动
1. IndexStore 和 DirectoryService 被移除
PR: Remove IndexStore and DirectoryService
主要修改:
- 移除所有
IndexStore
类,将继承FsDirectoryService
的类换成实现IndexStorePlugin.DirectoryFactory
接口。
2. slf4j-log4j12
包依赖问题
由于Hdfs
模块内,依赖了slf4j-log4j12
,但是内部包有冲突,需要排除后,手动依赖一个指定版本。
此时,会报
|
|
错误,具体原因并未找到。
解决办法为:排除冲突包,依赖指定版本:
|
|
3. 参数调整(优化)
1. 慢查询超时设置
默认查询的超时是-1
,即不超时。超时设置使用:
|
|
2. Mapping
动态字段设置
当前线上集群的磁盘占用大小:
而V2
集群的磁盘占用大小为:
可以看到,同样的数据量,磁盘占用相差了 30G 左右,差距很大。
经分析,查看两者的Schema
,V2
版本的schema
多出了一些动态创建的字段,而这些字段本身是不需要的,导致磁盘占用变大,部分数据如下:
|
|
因为默认的dynamic
是true
,所以在添加数据时,对于没有在mapping
中定义的字段,es
会自动添加该字段。
解决方案:
在mapping
中,指定dynamic
为false
:
|
|
对于
dynamic
字段的取值有三种:
true
:允许ES
动态创建mapping
;
false
:不允许ES
动态创建mapping
,但是数据可以写入;
strict
:当写入数据中有mapping
定义之外的数据,直接报错,不能进行写入;