Linux下Elasticsearch体系的下载、安装
包括:Elasticsearch、Kibana、Logstash、Elasticsearch-head......
由于Elasticsearch安装文档相关资源少及其版本更新迭代快,很多已经不适用,本文是通过自己摸索着安装的一个过程记载,过程比较详细,模拟了安装过程中各种奇奇怪怪的问题,众卿可参考之。
一、Elasticsearch下载
下载地址:https://www.elastic.co/cn/downloads/
这里直接下当前最新版本8.2.3
可根据自己的需求下载,一般下载Linux86_64压缩包,但是这东西配置麻烦,配置开机自启动啥的还得自己写脚本,麻烦,这里直接下rpm包进行安装
上传安装包后进入安装包所在目录,执行如下命令进行安装:
rpm -ivh 安装包名字
这里就会出现两个警告说使用绑定的jdk,一般就使用绑定的,使用自己的也可以但是有可能出现版本不兼容的问题。
这时,就会在/usr/lib/systemd/system/路径下生成一个名为elasticsearch.service的文件,使用如下命令查看这个文件内容:
cat /usr/lib/systemd/system/elasticsearch.service
就会发现有这么一句
从上图可以看到安装路径:/usr/share/elasticsearch 配置文件所在位置:/etc/elasticsearch
到这里就安装好了。
二、Elasticsearch 启动
然后理论上来说运行如下命令即可启动,不过嘛,能启动才怪。。。
systemctl start elasticsearch.service
还有使用这种方式启动虽然方便,但是报错的时候看不到有用的错误信息,先进入安装目录/usr/share/elasticsearch/bin下运行如下命令启动解决错误后再使用上面的方式启动,堪称完美。下面将会出现各种奇奇怪怪的问题,可怕的不是报错,是既不报错也不能正常使用,让人无从下手。后文所记载的异常和报错处理不一定会按照以下顺序出现,但过来过去无非就这些问题,可自行查阅。
cd /usr/share/elasticsearch/bin
./elasticsearch
然后就会发现报错说elasticsearch 不能在root用户下启动:org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root
解决方式无非就两种方法:
1.修改命令参数或者配置文件让它可以在root下启动,非常粗暴,对非root用户不友好,不建议使用。
#执行elasticsearch时加上参数-Des.insecure.allow.root=true,即
./elasticsearch -Des.insecure.allow.root=true
#或者用vi elasicsearch 打开启动文件elasicsearch进行编辑,在变量ES_JAVA_OPTS使用前添加以下命令
ES_JAVA_OPTS="-Des.insecure.allow.root=true"
2.在非root下启动。使用这个。
一般在安装虚拟机的时候已经新建了用户,比如我的是admin,下面以admin为例子说明,具体以自己的名字为准,可直接用以下命令切换当前用户:
#格式su 用户名
su admin
如果除了root没有其他用户,可运行以下命令新建用户并且切换:
#adduser *** //添加用户,我这里是admin,自行命名
adduser admin
#passwd *** //给用户设置密码,不设也可以
passwd 123456
#切换到admin用户
su admin
然后再运行命令./elasticsearch启动,这里建议开两个命令窗口,一个root,一个admin避免来回切换麻烦
然后就会出现以下权限相关的错误,稍微有点多但基本都是同类型,解决方式也比较单一,所以这里整合到一起,注意在root用户下解决,之后在admin用户的路径/usr/share/elasticsearch/bin下运行./elasticsearch检测是否还报同样的错,之后就等待它报新的错误。。。
#./elasticsearch-env:行88: /etc/sysconfig/elasticsearch: 权限不够 chown -R admin /etc/sysconfig/elasticsearch #bin/elasticsearch-env: 第 96 行:cd: /etc/elasticsearch: 权限不够 chown -R admin /etc/elasticsearch #Exception in thread "main" java.nio.file.AccessDeniedException: /var/lib/elasticsearch #只要看到AccessDeniedException异常就给它权限 chown -R admin /var/lib/elasticsearch #Error opening log file '/var/log/elasticsearch/gc.log': Permission denied #将整个elasticsearch目录权限给它 chown -R admin /var/log/elasticsearch
#另外将安装路径的权限给它,这里目前还没报错,不过报错是迟早的事
chown -R admin /usr/share/elasticsearch
然后在admin下运行./elasticsearch启动就会发现下面异常:
org.elasticsearch.bootstrap.StartupException: org.elasticsearch.ElasticsearchSecurityException: invalid configuration for xpack.security.transport.ssl - [xpack.security.transport.ssl.enabled] is not set, but the following settings have been configured in elasticsearch.yml : [xpack.security.transport.ssl.keystore.secure_password,xpack.security.transport.ssl.truststore.secure_password]
这是elasticsearch启动的Security配置,需要生成密钥,这里先不做配置,将其禁掉,修改如下两处为false,配置文件路径在/etc/elasticsearch下
#打开配置文件
vi /etc/elasticsearch/elasticsearch.yml
#修改这两处
xpack.security.enabled: false xpack.security.http.ssl:enabled: false
既然配置文件都打开了,顺便配置点其他的,迟早的事。
elasticsearch默认是不支持跨域的,在末尾添加如下两行支持跨域
http.cors.enabled: true
http.cors.allow-origin: "*"
打开并修改访问ip设置,不然只有本虚拟机才能访问,别的机器无法访问
network.host: 0.0.0.0
保存退出,然后在admin下运行./elasticsearch启动就会发现下面异常:
ERROR: [1] bootstrap checks failed. You must address the points described in the following [1] lines before starting Elasticsearch.
bootstrap check failure [1] of [1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]
大概是说elasticsearch 程序的当前max file descriptors 的限制为 4096,需要增加到 65536。
首先查看当前的大小,运行如下两个命令查看:
ulimit -Hn
ulimit -Sn
下面进行扩容,注意修改手法及步骤,不能打乱步骤或者少步骤,不然修改了但不起作用。
1.确认在root用户命令窗口下
2.打开配置文件vi /etc/security/limits.conf最后添加如下两行后保存退出
#admin是自己的用户名,其他的照写
admin hard nofile 65536
admin soft nofile 65536
3.通过命令切换到admin用户,不要直接打开admin用户窗口,一定要用命令做一下切换操作
su admin
4.然后查看是否修改成功
看到65536就表示扩容成功了,然后直接使用当前这个作为admin命令窗口,关掉原来那个admin命令窗口,再重新打开一个root命令窗口备用
在admin命令窗口回到安装目录/usr/share/elasticsearch/bin/重新运行./elasticsearch/启动,执行一大会儿后,等待出现异常:
咦?怎么回事!!!怎么突然启动成功了,没道理啊,内存还没修改呢,还没玩够呢,怎么就启动成功了,浏览器输入虚拟机IP:9200也正常显示成功。。。。
管他呢,关掉修改一番,免得以后出问题,
打开配置文件修改内存:内存不足会报错OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000e0c00000, 524288000, 0) failed; error='Not enough space' (errno=12)
因为我安装虚拟机的时候分配了2g,这里默认4g,已经远远超出了范围,所以这里改为500g,可按照自己实际情况修改。
vi /etc/elasticsearch/jvm.options
保存退出后就可以大摇大摆的用最前面的那种方式启动了,运行以下启动命令即可正常启动,注意是在admin用户下,并且过程中要输入root密码:
首先在root用户下修改启动文件,不修改的话虽然两种方式启动执行的是同一个文件但systemctl start elasticsearch.service方式启动出错,./elasticsearch方式却能正常启动
#打开文件 vim /usr/lib/systemd/system/elasticsearch.service #修改elasticsearch.service文件中用户名为自己的,我这里是admin ,如下图所示
#usr=admin
#重新加载启动文件
systemctl daemon-reload
然后在admin用户下用下面这些命令操作
#启动
systemctl start elasticsearch.service
#停止
systemctl stop elasticsearch.service
#查看启动状态
systemctl status elasticsearch.service
#添加到开机自启动
systemctl enable elasticsearch.service
如果这种方式无法启动,可以使用nohup ./elasticsearch & 方式启动
如果启动过程中遇到error:
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000e0c00000, 524288000, 0) failed; error='Not enough space' (errno=12)
一种是jvm内存的问题,和上面一样修改vi /etc/elasticsearch/jvm.options 里面内存大小就行了
一种是它已经处于启动状态了,前面没有完全停止,需要查到线程将其kill掉后再重新启动
#查看线程
ps -ef |grep elasticsearch
#root下进行
kill -9 上面查到的线程ID
浏览器输入你的ip:9200看到如下界面就表示成功了
由于文章比较详细,篇幅比较长,所以后面Kibana、Logstash、Elasticsearch-head......等安装将会择时另写文章说明,需要者自行查阅。