ElasticSearch 5.x 部署及常见问题

部署5.x版本的ES
下载 Elasticsearch5.x ES 官网下载
环境需求:

es5.x版本 不能以root用户运行es,需增加普通用户,此例新加用户es
JDK 1.8

useradd es

修改系统参数

1 vi /etc/security/limits.conf

添加如下内容:
*  soft nofile 65536

* hard nofile 131072

* soft nproc 2048

* hard nproc 4096


2 vi /etc/security/limits.d/90-nproc.conf

找到如下内容:

* soft nproc 1024

修改为

* soft nproc 2048

3 vi /etc/sysctl.conf

添加下面配置:

vm.max_map_count=655360

并执行命令:

sysctl -p

4 文件打开数,要求大于65535
 ulimit -n 65536

普通用户进入解压安装包。
tar -zxvf elastic*.tar.gz
在本机中找一个存储空间比较大的磁盘,如 /data,在该目录下执行以下命令

mkdir -p /data/es5/{data,logs}

用于存放es的数据和日志文件


ES参数配置

elasticsearch.yml是elasticsearch主要的配置文件,所有的配置都在这个文件里完成,一般情况下,默认的配置已经可以比较好地运行一个集群了,但你也可以对其进行微调。下面对其比较常见的一部分参数做一些说明:


Cluster

  1. cluster.name

集群名称,如果有多个集群,那么每个集群名就得是唯一的。


Node

1.node.data

集群中的节点名称,比如前面说的82、83、84三台机子每台都有一个名称,你也可以不设这个名称,默认的集群启动时会自己给每个节点初始化一个名称,但强烈建议这里还是由自己设置比较好。

2.node.master

该节点是否是master,true表示是的,false表示否,默认是true.

3.node.data

该节点是否存储数据,默认true表示是的。

说明:对于上面两个节点,如果你希望该节点只是一个master,但不存储数据,则应当设置为:

node.master: true

node.data: false

如果你希望该节点只存储数据,但不是一个master,则应该设置:

node.master: false

node.data: true

如果你既不希望该节点为一个master,也不想它存储数据,则应该设置为:

node.master: false

node.data: false

这种情况一般是你希望该节点仅仅是作为一个搜索负载均衡器,比如从各节点得到数据,聚合结果等。


Index

1. index.number_of_shards

设置一个索引被分成的分片数,默认是5

2.index.number_of_replicas

设置一个索引有几个拷贝,默认为1。拷贝指的是其它节点对该节点的拷贝,比如在84上创建了一个索引,那么这个拷贝会存在于82和83上,这是一个分布式的属性。

拷贝越多,则搜索性能越佳,而分片越多则索引创建性能越好。


Paths

1.path.conf

配置文件目录,默认为es根目录下的config目录。

2.path.data

索引存储路径,默认为es根目录下的data目录,可以有多个存储路径,各存储路径用逗号隔开,如:path.data: /path/to/data1,/path/to/data2

3.path.work

临时文件存放目录,默认为es根目录下的work目录

4.path.logs

日志文件存放目录,默认为es根目录下的logs目录。

5.path.plugins

插件的安装目录,默认为es根目录下的plugins目录。


Network And HTTP

1.network.bind_host

Es节点绑定的地址,为一个ip地址(IPv4或IPv6)

2.network.publish_host

Es发布的地址,其它节点通过这个地址与其进行通信

3.network.host

该节点网络地址,也是一个ip地址,如果设置了该属性,则network.bind_host与network.publish_host都不用再设置了,比如我这里三台机子设置的值分别为:

118.200.108.82、118.200.108.83、118.200.108.84。

4.transport.tcp.port

节点之间通信的端口,默认为9300,在我们应用程序中调用es的方法提交索引创建时也是使用的这个端口。

5.http.port

http访问端口,默认是9200,通过这个端口,调用方可以索引查询请求。

6.http.max_content_length

设置内容的最大容量,默认是100MB

7.http.enabled

是否禁止http访问,默认是false。


Discovery

1 discovery.zen.minimum_master_nodes

设置这个参数来保证集群中的节点可以知道其它N个有master资格的节点。默认为1,对于大的集群来说,可以设置大一点的值(2-4)。

2 discovery.zen.ping.timeout

设置集群中自动发现其它节点时ping连接超时时间,默认为3秒,对于比较差的网络环境可以高点的值来防止自动发现时出错

3 discovery.zen.ping.multicast.enabled

设置是否打开多播来发现来发现节点,默认是true

4 discovery.zen.ping.unicast.hosts


配置 config/elasticsearch.yml 文件

# ---------------------------------- Cluster -----------------------------------
#定义es集群名称
cluster.name: es5-cluster
# ------------------------------------ Node ------------------------------------
#定义该节点的名称,各个节点不能重复
node.name: es1
# ----------------------------------- Paths ------------------------------------
#配置数据目录
path.data: /data1/hadoop/es5/data
#配置日志目录
path.logs: /data1/hadoop/es5/logs
# ----------------------------------- Memory -----------------------------------
#关闭锁定内存
bootstrap.memory_lock: false
# ---------------------------------- Network -----------------------------------
#指定本机IP地址,每个节点都要修改
network.host: 192.168.1.222
#指定http访问端口
http.port: 9200
# --------------------------------- Discovery ----------------------------------
#广播地址
discovery.zen.ping.unicast.hosts: ["es1:9300", "es2:9300", "es3:9300"]
discovery.zen.minimum_master_nodes: 3

# 增加新的参数,这样head插件可以访问es
http.cors.enabled: true
http.cors.allow-origin: "*"

配置bin/elasticsearch文件

#由于es5.0依赖的是jdk8,所以需要下载jdk8并指定PAHT路径
export PATH=/home/hadoop/jdk1.8.0_101/bin:$PATH
export JAVA_HOME=/home/hadoop/jdk1.8.0_101
export ES_HOME=/home/hadoop/elasticsearch-5.0.0

启动

./bin/elasticsearch -d

可能遇到的问题:

问题一:

[2016-11-06T16:27:21,712][WARN ][o.e.b.JNANatives ] unable to install syscall filter:

Java.lang.UnsupportedOperationException: seccomp unavailable: requires kernel 3.5+ with CONFIG_SECCOMPandCONFIG_SECCOMP_FILTERcompiledinatorg.elasticsearch.bootstrap.Seccomp.linuxImpl(Seccomp.java:349) ~[elasticsearch-5.0.0.jar:5.0.0]

at org.elasticsearch.bootstrap.Seccomp.init(Seccomp.java:630) ~[elasticsearch-5.0.0.jar:5.0.0]

原因:报了一大串错误,大家不必惊慌,其实只是一个警告,主要是因为你Linux版本过低造成的。

解决方案:
1、重新安装新版本的Linux系统
2、警告不影响使用,可以忽略

问题二:
ERROR: bootstrap checks failed

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

原因:无法创建本地文件问题,用户最大可创建文件数太小

解决方案:
切换到root用户,编辑limits.conf配置文件, 添加类似如下内容:

vi /etc/security/limits.conf

添加如下内容:
*  soft nofile 65536

* hard nofile 131072

* soft nproc 2048

* hard nproc 4096

备注:* 代表Linux所有用户名称(比如 hadoop)

保存、退出、重新登录才可生效

问题三:
max number of threads [1024] for user [es] likely too low, increase to at least [2048]
原因:无法创建本地线程问题,用户最大可创建线程数太小
解决方案:切换到root用户,进入limits.d目录下,修改90-nproc.conf 配置文件。

vi /etc/security/limits.d/90-nproc.conf

找到如下内容:

* soft nproc 1024

修改为

* soft nproc 2048

问题四:
max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
原因:最大虚拟内存太小
解决方案:切换到root用户下,修改配置文件sysctl.conf

vi /etc/sysctl.conf

添加下面配置:

vm.max_map_count=655360

并执行命令:

sysctl -p

然后重新启动elasticsearch,即可启动成功。

问题五:
ElasticSearch启动找不到主机或路由
原因:ElasticSearch 单播配置有问题
解决方案:
检查ElasticSearch中的配置文件
vi config/elasticsearch.yml
找到如下配置:

discovery.zen.ping.unicast.hosts:[“192.168..:9300”,”192.168..:9300”]
一般情况下,是这里配置有问题,注意书写格式

问题六:
org.elasticsearch.transport.RemoteTransportException: Failed to deserialize exception response from stream

原因:ElasticSearch节点之间的jdk版本不一致

解决方案:ElasticSearch集群统一jdk环境

问题七:
Unsupported major.minor version 52.0

原因:jdk版本问题太低
解决方案:更换jdk版本,ElasticSearch5.0.0支持jdk1.8.0

问题八:
bin/elasticsearch-plugin install license
ERROR: Unknown plugin license

原因:ElasticSearch5.0.0以后插件命令已经改变
解决方案:使用最新命令安装所有插件

bin/elasticsearch-plugin install x-pack


5.2以上常见问题

1、启动 elasticsearch 如出现异常 can not run elasticsearch as root

解决方法:创建ES 账户,修改文件夹 文件 所属用户 组

2、启动异常:ERROR: bootstrap checks failed
system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk

问题原因:因为Centos6不支持SecComp,而ES5.2.1默认bootstrap.system_call_filter为true进行检测,所以导致检测失败,失败后直接导致ES不能启动。详见 :https://github.com/elastic/elasticsearch/issues/22899

解决方法:在elasticsearch.yml中配置bootstrap.system_call_filter为false,注意要在Memory下面:
bootstrap.memory_lock: false
bootstrap.system_call_filter: false

3、启动后,如果只有本地可以访问,尝试修改配置文件 elasticsearch.yml
中network.host(注意配置文件格式不是以 # 开头的要空一格, : 后要空一格)
为 network.host: 0.0.0.0

默认端口是 9200

注意:关闭防火墙 或者开放9200端口

4、ERROR: bootstrap checks failed

max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]
max number of threads [1024] for user [lishang] likely too low, increase to at least [2048]

解决方法:切换到root用户,编辑limits.conf 添加类似如下内容

vi /etc/security/limits.conf 


添加如下内容:


* soft nofile 65536


* hard nofile 131072


* soft nproc 2048


* hard nproc 4096

5、max number of threads [1024] for user [lish] likely too low, increase to at least [2048]

解决:切换到root用户,进入limits.d目录下修改配置文件。

vi /etc/security/limits.d/90-nproc.conf 


修改如下内容:


* soft nproc 1024

修改为


* soft nproc 2048

6、max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]

解决:切换到root用户修改配置sysctl.conf

vi /etc/sysctl.conf

添加下面配置:

vm.max_map_count=655360

并执行命令:

sysctl -p

然后,重新启动elasticsearch,即可启动成功。

7、 expected settings to start with ‘object’, instead was [VALUE_STRING]]

 Exception in thread "main" ElasticsearchParseException[malformed, expected settings to start with 'object', instead was [VALUE_STRING]]
    at org.elasticsearch.common.settings.loader.XContentSettingsLoader.load(XContentSettingsLoader.java:70)
    at org.elasticsearch.common.settings.loader.XContentSettingsLoader.load(XContentSettingsLoader.java:50)
    at org.elasticsearch.common.settings.loader.YamlSettingsLoader.load(YamlSettingsLoader.java:50)
    at org.elasticsearch.common.settings.Settings$Builder.loadFromStream(Settings.java:938)
    at org.elasticsearch.common.settings.Settings$Builder.loadFromPath(Settings.java:927)
    at org.elasticsearch.node.internal.InternalSettingsPreparer.prepareEnvironment(InternalSettingsPreparer.java:102)
    at org.elasticsearch.bootstrap.Bootstrap.initialEnvironment(Bootstrap.java:230)
    at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:270)
    at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:121)
    at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:112)
    at org.elasticsearch.cli.SettingCommand.execute(SettingCommand.java:54)
    at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:122)
    at org.elasticsearch.cli.Command.main(Command.java:88)
    at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:89)
    at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:82)
Refer to the log for complete error details.

可能原因是 elasticsearch.yml配置文件格式上有细微的错误。
例如
cluster.name:es-cluster (错误)冒号后少一个空格
cluster.name: es-cluster (正确)

8 Could not find JavaVersionChecker

[es@master bin]$ ./elasticsearch
Error: Could not find or load main class org.elasticsearch.tools.JavaVersionChecker
[es@master bin]$ cd 

可能原因:es安装目录安装在root下,将es安装目录迁移至es用户目录,或其他目录,避免放在root目录


elasticsearch 6 请求头问题

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

解办法参考:
406请求错误解析

参考:

Elasticsearch搭建–适用每天增量为3亿的数据量
如果部署中遇到问题,可以提问,互相交流!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值