Linux下安装Elasticsearch
1、版本
虽然眼下已经出了v6.5.0,但为了和ik分词器版本一致,这里选择6.4.3的版本。
官网:https://www.elastic.co/
选择适用于linux的安装包进行下载
2、安装与配置
2.1.新建用户
由于Elasticsearch默认不允许以root账号运行,首先我们需要
创建用户:useradd orcas
设置密码(可选): passwd orcas
切换用户: su - orcas
2.2 .上传并解压安装包
- 这里通过Xshell的文件传输将安装包上传至指定目录下:
/home/learn
- cd到该目录进行解压:
tar -zxvf elasticsearch-6.4.3.tar.gz
- 删除安装包(可选):
rm -rf elasticsearch-6.4.3.tar.gz
- 重命名目录以便于之后配置路径(可选):
mv elasticsearch-6.4.3/ elasticsearch
进入elasticsearch可看到其目录结构:
2.3 .修改配置
进入config目录修改其下两个配置文件:
- jvm.options
将默认的内存占用1g设置小一些。
-Xms512m
-Xmx512m - elasticsearch.yml
修改数据和日志目录:
path.data: /home/learn/elasticsearch/data
# 数据目录位置
path.logs: /home/learn/elasticsearch/logs
# 日志目录位置 - 回退到elasticsearch的根目录,会发现有logs目录,并没有data,因此需手动创建:
mkdir data
- 修改绑定的ip:
network.host: 0.0.0.0
# 绑定到0.0.0.0,允许任何ip来访问。
2.3 .elasticsearch.yml的其他配置
属性名 | 说明 |
---|---|
cluster.name | 配置elasticsearch的集群名称,默认是elasticsearch。建议修改成一个有意义的名称。 |
node.name | 节点名,es会默认随机指定一个名字,建议指定一个有意义的名称,方便管理 |
path.conf | 设置配置文件的存储路径,tar或zip包安装默认在es根目录下的config文件夹,rpm安装默认在/etc/ elasticsearch |
path.data | 设置索引数据的存储路径,默认是es根目录下的data文件夹,可以设置多个存储路径,用逗号隔开 |
path.logs | 设置日志文件的存储路径,默认是es根目录下的logs文件夹 |
path.plugins | 设置插件的存放路径,默认是es根目录下的plugins文件夹 |
bootstrap.memory_lock | 设置为true可以锁住ES使用的内存,避免内存进行swap |
network.host | 设置bind_host和publish_host,设置为0.0.0.0允许外网访问 |
http.port | 设置对外服务的http端口,默认为9200。 |
transport.tcp.port | 集群结点之间通信端口 |
discovery.zen.ping.timeout | 设置ES自动发现节点连接超时的时间,默认为3秒,如果网络延迟高可设置大些 |
discovery.zen.minimum_master_nodes | 主结点数量的最少值 ,此值的公式为:(master_eligible_nodes / 2) + 1 ,比如:有3个符合要求的主结点,那么这里要设置为2 |
3、运行
3.1 .运行报错
进入elasticsearch/bin目录,运行可执行文件: ./elasticsearch
然而现在运行其实会报错,我们需要修改一些配置。
-
Centos6不支持SecComp,它需要至少3.5以上版本的Linux内核,而Centos6内核版本比较低,v2.x。
使用cat /proc/version
或者uname -a
命令查看linux版本,我这里使用的centos7,所以可以。
Linux version 3.10.0-514.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC) ) #1 SMP Tue Nov 22 16:42:41 UTC 2016
elasticsearch启动时默认bootstrap.system_call_filter: true,就会进行检测,为了避免该问题,可以在
elasticsearch.yml
中添加一条配置将其设置成false禁用:bootstrap.system_call_filter: false
-
文件权限不足
报错:max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]
这是因为我们使用的新建的用户权限不足。
我们先切换成root的用户:su - root
,然后再修改权限:
vim /etc/security/limits.conf
添加如下:
* soft nofile 65536
* hard nofile 131072
* soft nproc 4096
* hard nproc 4096
-
用户最大进程数过低(centos7不用修改)
报错:max number of threads [1024] for user [orcas] is too low, increase to at least [4096]
修改配置:vim /etc/security/limits.d/90-nproc.conf
将进程数设置为4096:* soft nproc 4096
ps: centos7的limits.d下是20-nproc.conf
,里面默认就设置了非root用户的最大进程数为4096。 -
进程虚拟内存过低
报错:max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
同样根据提示将其设置大些:
vim /etc/sysctl.conf
添加一条:vm.max_map_count=655360
重新加载系统参数:sysctl -p
3.2 .重启
(注意不要是root用户)进入到elasticsearch的bin目录,再次执行./elasticsearch
,如果以上几点坑都一个个躲过了,就能成功运行了。
启动过程还挺久的,可以看到默认绑定了两个端口:
- 9300:集群节点间通讯接口
- 9200:客户端访问接口
ps: 再报错,例如:
[WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [] 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.4.3.jar:6.4.3]
at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:127) ~[elasticsearch-6.4.3.jar:6.4.3]
at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) ~[elasticsearch-6.4.3.jar:6.4.3]
at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124) ~[elasticsearch-cli-6.4.3.jar:6.4.3]
at org.elasticsearch.cli.Command.main(Command.java:90) ~[elasticsearch-cli-6.4.3.jar:6.4.3]
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:93) ~[elasticsearch-6.4.3.jar:6.4.3]
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:86) ~[elasticsearch-6.4.3.jar:6.4.3]
Caused by: java.lang.RuntimeException: can not run elasticsearch as root
at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:104) ~[elasticsearch-6.4.3.jar:6.4.3]
at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:171) ~[elasticsearch-6.4.3.jar:6.4.3]
at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:326) ~[elasticsearch-6.4.3.jar:6.4.3]
at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:136) ~[elasticsearch-6.4.3.jar:6.4.3]
... 6 more
你看看是不是不小心使用root用户启动了。
最后,浏览器访问:http://192.168.58.128:9200/
会显示如下内容: