安装与运行
本示例使用的Elasticsearch版本:Elasticsearch 6.8.0,JDK版本:1.8,系统:Linux CentOS 7。
1. 确保合适的JDK版本已经安装
Elasticsearch是java开发的,所以要先确保机器上已经安装了JDK。Elasticsearch对JDK版本的要求:1
2
3
4
5
6
7
8
9
10
11ES JDK
0.90 1.6
----------------
1.3 1.7
... 1.7
2.4 1.7
----------------
5.0 1.8
... 1.8
————————————————
参考地址:https://www.elastic.co/guide/en/elasticsearch/reference/index.html 。比如Elasticsearch 6.6版本中的设置中(Elasticsearch Reference [6.6] ——> Set up Elasticsearch)就有介绍:
Java (JVM) Version
Elasticsearch is built using Java, and requires at least Java 8 in order to run. Only Oracle’s Java and the OpenJDK are supported. The same JVM version should be used on all Elasticsearch nodes and clients.
We recommend installing Java version 1.8.0_131 or a later version in the Java 8 release series. We recommend using a supported LTS version of Java. Elasticsearch will refuse to start if a known-bad version of Java is used.
The version of Java that Elasticsearch will use can be configured by setting the JAVA_HOME environment variable.
2.下载
从官网下载对应的压缩包并解压,https://www.elastic.co/cn/downloads/past-releases#elasticsearch 。1
tar -zxvf elasticsearch-6.8.0.tar.gz
3.运行
进入到压后的,Elasticsearch的目录,执行./bin/elasticsearch
即可启动Elasticsearch。
打开另一个终端进行测试:1
curl 'http://localhost:9200/?pretty'
可以看到以下返回信息:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17{
"name" : "iQ0-NOB",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "DWm71mBHSKq0oWVxdF2h4g",
"version" : {
"number" : "6.8.0",
"build_flavor" : "default",
"build_type" : "tar",
"build_hash" : "65b6179",
"build_date" : "2019-05-15T20:06:13.172855Z",
"build_snapshot" : false,
"lucene_version" : "7.7.0",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}
注意:
- 如果你想把 Elasticsearch 作为一个守护进程在后台运行,那么可以在启动命令后面添加参数
-d
。 tail -f ./logs/elasticsearch.log
可以查看日志。
4.启动时可能会出现的异常
异常一: Elasticsearch有执行脚本的能力,因安全因素,在root用户下运行会报错。
1 | [root@server01 elasticsearch-6.8.0]# bin/elasticsearch |
解决办法:使用非root帐户,并把 Elasticsearche 的解压目录的所有者和所属组给这个新建的用户,我这里使用的是名为hadoop的帐户。
异常二:内存不足
1 | [hadoop@server01 elasticsearch-6.8.0]# bin/elasticsearch |
解决办法:修改conf目录下的JVM配置文件(jvm.options),将2g改成512m。1
2
3
4
5
6
7################################################################
# Xms represents the initial size of total heap space
# Xmx represents the maximum size of total heap space
-Xms512m
-Xmx512m
异常三:进程最大同时打开文件数太小
1 | max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536] |
每个进程最大同时打开文件数太小,可通过下面2个命令查看当前数量。
1 | ulimit -Hn |
解决方式:修改/etc/security/limits.conf文件,增加如下配置,用户退出后重新登录生效。1
2* soft nofile 65536
* hard nofile 65536
其中*
表示对每个Linux用户都生效,当然也可以指定为要启动ES的用户,比如本文的hadoop
。
异常四:用户最大线程个数太低
1 | max number of threads [3818] for user [es] is too low, increase to at least [4096] |
问题同上,最大线程个数太低。修改配置文件/etc/security/limits.conf(和问题1是一个文件),增加如下配置,用户退出后重新登录生效。1
2* soft nproc 4096
* hard nproc 4096
可通过如下命令查看:1
2ulimit -Hu
ulimit -Su
异常五:vm.max_map_count太小
1 | max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144] |
解决办法:修改/etc/sysctl.conf文件,增加配置vm.max_map_count=262144,执行命令sysctl -p
生效。1
2vim /etc/sysctl.conf
sysctl -p
常用配置
Elasticsearch配置文件路径是:%ES_HOME%/config/elasticsearch.yml。下面介绍一些常用的配置项:
cluster.name: elasticsearch
配置elasticsearch的集群名称,默认是elasticsearch。elasticsearch会自动发现在同一网段下的集群名为elasticsearch的主机,如果在同一网段下有多个集群,就可以用这个属性来区分不同的集群。生成环境时建议更改。
node.name: “Franz Kafka”
节点名,默认随机指定一个name列表中名字,该列表在elasticsearch的jar包中config文件夹里name.txt文件中,其中有很多作者添加的有趣名字,大部分是漫威动漫里面的人物名字。生成环境中建议更改以能方便的指定集群中的节点对应的机器
node.master: true
指定该节点是否有资格被选举成为node,默认是true,elasticsearch默认集群中的第一台启动的机器为master,如果这台机挂了就会重新选举master。
node.data: true
指定该节点是否存储索引数据,默认为true。如果节点配置node.master:false并且node.data: false,则该节点将起到负载均衡的作用
index.number_of_shards: 5
设置默认索引分片个数,默认为5片。索引分片对ES的查询性能有很大的影响,在应用环境,应该选择适合的分片大小。
index.number_of_replicas: 1
设置默认索引副本个数,默认为1个副本。此处的1个副本是指对所有shards的一个完全拷贝;默认5个分片1个拷贝;即总分片数为10。
path.conf: /path/to/conf
设置配置文件的存储路径,默认是es根目录下的config文件夹。
path.data: /path/to/data1,/path/to/data2
设置索引数据的存储路径,默认是es根目录下的data文件夹,可以设置多个存储路径,用逗号隔开。
path.work:/path/to/work
设置临时文件的存储路径,默认是es根目录下的work文件夹。
path.logs: /path/to/logs
设置日志文件的存储路径,默认是es根目录下的logs文件夹。
path.plugins: /path/to/plugins
设置插件的存放路径,默认是es根目录下的plugins文件夹
transport.tcp.port: 9300
设置交互的tcp端口,默认是9300。
transport.tcp.compress: true
设置是否压缩tcp传输时的数据,默认为false,不压缩。
http.port: 9200
设置交互的http端口,默认为9200。