文档地址:
https://www.elastic.co/guide/en/elasticsearch/reference/6.5/setup.html
官方页面提供自0.9版本以来的说明文档,由于我下载的是6.5.4版本,因此通过6.5版本的文档进行安装配置。
本文的安装测试环境为Red Had Linux 6.5,关于elastic对各系统的支持度,参见:https://www.elastic.co/support/matrix
Java版本:
要求至少java 8,官方推荐的版本为:1.8.0_131 or a later version in the Java 8 release series
你可以通过修改JAVA_HOME参数指定java版本。
一、下载和安装、启动:
本文使用的6.5.4版本下载地址为:https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.4.tar.gz
[root@python ~]# tar -zxf elasticsearch-6.5.4.tar.gz [root@python ~]# cd elasticsearch-6.5.4 [root@python elasticsearch-6.5.4]# ./bin/elasticsearch [2019-01-11T09:25:52,573][WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [unknown] 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:140) ~[elasticsearch-6.5.4.jar:6.5.4] at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:127) ~[elasticsearch-6.5.4.jar:6.5.4] at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) ~[elasticsearch-6.5.4.jar:6.5.4] at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124) ~[elasticsearch-cli-6.5.4.jar:6.5.4] at org.elasticsearch.cli.Command.main(Command.java:90) ~[elasticsearch-cli-6.5.4.jar:6.5.4] at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:93) ~[elasticsearch-6.5.4.jar:6.5.4] at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:86) ~[elasticsearch-6.5.4.jar:6.5.4] Caused by: java.lang.RuntimeException: can not run elasticsearch as root at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:103) ~[elasticsearch-6.5.4.jar:6.5.4] at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:170) ~[elasticsearch-6.5.4.jar:6.5.4] at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:333) ~[elasticsearch-6.5.4.jar:6.5.4] at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:136) ~[elasticsearch-6.5.4.jar:6.5.4] ... 6 more
通常我们把此解压目录称作:$ES_HOME,以上错误表示不能以超级用户root启动es,我们新建一个用户即可:
[root@python elasticsearch-6.5.4]# useradd es [root@python elasticsearch-6.5.4]# passwd es [root@python ~]# mv elasticsearch-6.5.4 /home/es/ [root@python es]# chown -R es.es elasticsearch-6.5.4/ [root@python elasticsearch-6.5.4]# su - es [es@python ~]$ echo "export ES_HOME=/home/es/elasticsearch-6.5.4" >> .bashrc [es@python ~]$ echo "export PATH=$ES_HOME/bin:$PATH" >> .bashrc [es@python ~]$ elasticsearch ...... [2019-01-11T09:32:31,567][INFO ][o.e.l.LicenseService ] [lejuhty] license [47723c44-43e9-49af-85db-0909d8bb47e3] mode [basic] - valid
至此es已经启动,通过config目录中的elasticsearch.yml文件我们可以修改es的启动端口,默认是9200。
接下来检查下es是否正常启动,除了通过ps -ef|grep elasic之外,我们执行:
[es@python elasticsearch-6.5.4]$ curl 'http://localhost:9200' { "name" : "lejuhty", "cluster_name" : "elasticsearch", "cluster_uuid" : "qSwz2X0EQU25G85c9H4Q0Q", "version" : { "number" : "6.5.4", "build_flavor" : "default", "build_type" : "tar", "build_hash" : "d2ef93d", "build_date" : "2018-12-17T21:17:40.758843Z", "build_snapshot" : false, "lucene_version" : "7.5.0", "minimum_wire_compatibility_version" : "5.6.0", "minimum_index_compatibility_version" : "5.0.0" }, "tagline" : "You Know, for Search" } --可以看到es已经正常运行
以上的es运行方式可以通过ctrl-c或者关闭窗口来关闭,平时我们可以通过守护进程的方式在后台启动es:
./bin/elasticsearch -d -p pid
p表示启动之后es的pid会被记录入一个名为pid的文件中,关闭时只要kill这个文件中记录的pid就可以了。
ES启动后会默认开放2个端口,9200和9300,前者用于REST API或curl等基于http协议的RESTFUL请求,后者多用于集群节点之间的tcp交流。由于ES本身提供的快捷API命令和针对各编程语言的接口全都是RESTFUL风格编写的,因此对于ES的访问几乎只能从9200端口进行,对于9300端口目前还了解不多待看到分布式集群时再解释。
下图中的::1:port表示ipv6的loopback address,添加了::ffff前缀表示ipv4地址的ipv6映射,被称作ipv4-mapped ipv6 address(下图2所示的映射方式),例如::ffff:127.0.0.1:9200表示ipv6中的本地回环地址,相当于ipv4中的127.0.0.1,但是不同于::1:9200此映射的ipv6地址是可以接受ipv4连接请求的。
此外虽然配置文件中默认注释了network.host=127.0.0.1,但ES其实是默认绑定此loopback IP的,因此不修改network.host只能本地连接,但是修改network.host后又必须对系统配置作出修改,原因参见第二部分中系统配置部分的解释。
二、配置Elasticsearch:
关于config目录下各个配置文件的功能及其具体的配置项解释,参考官方页面:https://www.elastic.co/guide/en/elasticsearch/reference/6.5/settings.html
这里先简短的说明一些文件的功用:
- elasticsearch.yml for configuring Elasticsearch
- jvm.options for configuring Elasticsearch JVM settings
- log4j2.properties for configuring Elasticsearch logging
ES的配置可以主要分为两大部分:
1.系统配置部分
这部分比较好理解,ES的良好运行需要进行一些系统配置,其中官网列出的必须要进行的配置包含:
- Disable swapping
- Increase file descriptors
此配置在windows上无需配置,在Linux上需要修改如下用户limit配置:
es hard nofile 65536 es soft nofile 65536
- Ensure sufficient virtual memory
在/etc/sysctl.conf中添加如下记录即可:
vm.max_map_count=262144
- Ensure sufficient threads
- JVM DNS cache settings
- Temporary directory not mounted with
noexec
以上两个系统配置项用到的较少,一个是DNS缓存的问题,只有DNS变动较大时需要设置缓存超时时间。另一个是ES运行所需的JNA文件会被放在/tmp目录的文件夹下,因此/tmp目录如果是额外mount的盘,那么可能需要设置正确的权限才能避免出现找不到shared object的错误。
一般来说如果这些项配置错误,那么只会以warning的形式出现在log中,但是一旦你修改了ES网络相关的参数,例如network.host,那么ES就认为你将要从开发模式转为生产模式,ES会开启一个名为bootstrap checks的检查,日志显示为:“bound or publishing to a non-loopback address, enforcing bootstrap checks”,此时warnings将会以exception形式出现在log中,这些exceptions将会导致ES无法启动,这是ES为了防止你因配置错误导致数据丢失而做的一项预防措施,因此在转向生产时,请务必为ES正确配置系统参数。
这里我再重复一遍,对elasticsearch.yml中network.host的更改,会导致ES认为你将要部署的是生产服务器,此时错误的系统配置将会导致ES启动后自动关闭。
2.ES的配置部分
ES本身的配置主要包含一些诸如PATH,Cluster name等等参数。其中一些必须配置的参数配置方法参见如下链接列表:
- Path settings
- Cluster name
- Node name
- Network host
- Discovery settings
- Heap size
ES默认使用1G的heap,Xms,Xmx都是1g,为保证生产上内存足够,可以适当加大,修改jvm.options文件即可,例如:
-Xms4g -Xmx4g
- Heap dump path
- GC logging
- Temp directory
ES的临时文件位置,默认是$ES_TMPDIR,一般$ES_TMPDIR不设置,所以默认其实是/tmp,当然你可以在jvm.options文件中修改-Djava.io.tmpdir项来直接指定位置,最好还是export一个$ES_TMPDIR吧。
此外需要注意的是ES并无内置的安全认证模块,因此安全性暂需要依靠第三方软件或者bind ip+防火墙来实现。