Elasticsearch安装配置

文档地址:

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连接请求的。

Elasticsearch安装配置_第1张图片

此外虽然配置文件中默认注释了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
    swap可能会拖慢ES的性能,因此建议关闭swap,关闭swap的各种方式参考链接内容即可。
  • 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
    同样的,修改用户limit,确保ulimit -u至少为4096即可。
  • 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
    设置logs和data的路径,无需多说。
  • Cluster name
    默认是elasticsearch,你可以自定义,只有cluster.name相同的节点才能在同一个集群下。
  • Node name
    node.name即节点名,自定义即可,如果每个服务器作为一个集群的一个节点,将其设置为$HOSTNAME即可。
  • Network host
    默认情况下ES绑定的是本地回环IP,因此如果要搭建集群会或外提供服务,可以将此配置修改为对应的IP。
  • Discovery settings
    主要用于集群的投票,这点熟悉其他软件投票规则的都比较熟了,不再多说。
  • Heap size

    ES默认使用1G的heap,Xms,Xmx都是1g,为保证生产上内存足够,可以适当加大,修改jvm.options文件即可,例如:

-Xms4g 
-Xmx4g
  • Heap dump path
    主要用于出现内存泄露时进行memory dump,此目录可以在jvm.options文件中修改:-XX:HeapDumpPath=
  • GC logging
    暂时用不到,这个日志默认会开,但是达到2G的上限就会自动关闭了,不关注。
  • Temp directory

    ES的临时文件位置,默认是$ES_TMPDIR,一般$ES_TMPDIR不设置,所以默认其实是/tmp,当然你可以在jvm.options文件中修改-Djava.io.tmpdir项来直接指定位置,最好还是export一个$ES_TMPDIR吧。

此外需要注意的是ES并无内置的安全认证模块,因此安全性暂需要依靠第三方软件或者bind ip+防火墙来实现。

你可能感兴趣的:(Elasticsearch安装配置)