一、准备工作
操作系统的安装参考我的这个帖子
1.0:机器规划如下,这次是单机版
IP | 名称 | 作用 | 其他 |
192.168.122.21 | xxCentos7One | ElasticSearch、Kibana | jdk1.8 |
1.1:因为ElasticSearch从5.0之后,不允许root用户使用,因此要先创建一个专用用户来运行它。
二、安装配置
2.1:下载安装包,解压
[root@xxCento7One ~]# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.2.tar.gz
[root@xxCento7One local]# tar -vxf elasticsearch-6.4.2.tar.gz
2.2:移动elasticsearch-6.4.2目录
#将ES按抓个目录移动到/home下(之前创建了一个ES专用的账户esuser,就位于/home,因此决定把ES解压缩后的东西也放到这儿)
[root@xxCento7One local]# mv elasticsearch-6.4.2 /home/
#创建esdata文件夹,用来存储es相关数据。再建立两个子文件夹data和log分别存放具体数据和日志
[root@xxCento7One home]# mkdir -p esdata/data
[root@xxCento7One home]# mkdir -p esdata/log
2.3:修改配置
[root@xxCento7One config]# vim elasticsearch.yml
#因为是单机版,因此和Cluster 、Node相关的配置都被注释
#只需要修改数据和日志路径即可。找到配置文件中的path相关,修改方法如下
# ---------------------------------- Cluster -----------------------------------
#
# elasticsearch集群名称,这里配置为“myEsClusterTest”
# elasticsearch会自动发现在同一网段下的集群名为esbigdata的主机
# 如果在同一网段下有多个集群,就可以通过这个属性来区分不同的集群。
#
#cluster.name: myEsClusterTest
# ------------------------------------ Node ------------------------------------
#
# 节点名称,用来区分一个集群中的节点。保证不重复即可
#
#node.name: node-1
#
# 指定该节点是否有资格被选举成为master,默认是true。一般来说,第一个被启动的节点是master
#
#node.master: true
#
# 当前值为true,则当前节点为存储节点;若值为false,则当前节点为路由(转发请求)节点
# 路由节点的作用是:将集群层面的请求转发到主节点,将数据相关的请求转发到数据节点
#
#node.data: true
# ----------------------------------- Paths ------------------------------------
#
# Path to directory where to store the data (separate multiple locations by comma):
#数据路径
path.data: /home/esdata/data
#
# Path to log files:
#日志路径
path.logs: /home/esdata/log
# ----------------------------------- Memory -----------------------------------
#
# 为ElasticSearch锁住物理内存大小,目的是避免使用swap,以便提高ElasticSearch性能
# linux下可以通过“ulimit -l”命令查看最大锁定内存地址空间(memlock)是不是unlimited
# 一般置为物理内存大小的一半左右
#
#bootstrap.memory_lock: true
#
# Make sure that the heap size is set to about half the memory available
# on the system and that the owner of the process is allowed to use this
# limit.
#
# Elasticsearch performs poorly when the system is swapping the memory.
#
#修改和网络相关内容,比如本机的ip或域名,以及端口号
# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#主机ip
network.host: 192.168.122.21
#
# Set a custom port for HTTP:
#端口
http.port: 9200
#
# For more information, consult the network module documentation
2.4:到这里为止,常规的配置已经完毕,理论上来说可以运行一下ES试试了
[root@xxCento7One ~]# cd /home/elasticsearch-6.4.2/bin/
[root@xxCento7One bin]# ./elasticsearch &
#如果看到类似下面的日志,说明已经启动了
[2019-08-30T16:46:02,552][INFO ][o.e.n.Node ] [JXP_Ky_] starting ...
[2019-08-30T16:46:07,951][INFO ][o.e.t.TransportService ] [JXP_Ky_] publish_address {192.168.122.21:9300}, bound_addresses {192.168.122.21:9300}
[2019-08-30T16:46:07,977][INFO ][o.e.b.BootstrapChecks ] [JXP_Ky_] bound or publishing to a non-loopback address, enforcing bootstrap checks
[2019-08-30T16:46:11,110][INFO ][o.e.c.s.MasterService ] [JXP_Ky_] zen-disco-elected-as-master ([0] nodes joined)[, ], reason: new_master {JXP_Ky_}{JXP_Ky_2SUORyt75ClLMUA}{E-1PsZH7QxiZr95iAe3o2g}{192.168.122.21}{192.168.122.21:9300}{ml.machine_memory=3954171904, xpack.installed=true, ml.max_open_jobs=20, ml.enabled=true}
三、运行及踩坑
3.1:异常:logs/gc.log due to Permission denied
bash-4.2$ ./elasticsearch
Java HotSpot(TM) 64-Bit Server VM warning: Cannot open file logs/gc.log due to Permission denied
Exception in thread "main" org.elasticsearch.bootstrap.BootstrapException: java.nio.file.AccessDeniedException: /home/elasticsearch-6.4.2/config/elasticsearch.keystore
Likely root cause: java.nio.file.AccessDeniedException: /home/elasticsearch-6.4.2/config/elasticsearch.keystore
at sun.nio.fs.UnixException.translateToIOException(UnixException.java:84)
at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
at sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:214)
我开始以为是由于新建账号的权限不足以运行java。但是执行java -version完全没问题,可以看到java版本号。因此问题不在这里。然后看到这里也有相同的报错 原来gc.log位置是在ElasticSearch安装目录下的logs目录下,原因就是这个gc.log文件没有对应的权限造成的。简单来说,删除它即可。然后重启ElasticSearch,问题解决。
3.2: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
这个异常的通用解决方法
#进入下面的配置文件,在文件的最下面,追加以下三部分内容。其中esuser是我用来运行ES的专属用户
[root@xxCento7One ~]# vim /etc/security/limits.conf
#修改最大文件描述符
esuser soft nofile 65536
esuser hard nofile 65536
#修改最大线程数
esuser soft nproc 65536
esuser hard nproc 65536
#最大锁定内存地址空间
esuser soft memlock unlimited
esuser hard memlock unlimited
一般来说,这里配置后应该就不会出现上述报错了。但是我的环境中通过这种方法并没有解决问题。
参考这位同仁的方法 最后解决了问题。方法如下所示
[root@xxCento7One config]# ulimit -Hn
4096
#不是我们希望的65536,进入profile文件,在末尾追加需要的内容
[root@xxCento7One config]# vi /etc/profile
#影响elasticsearch的配置
ulimit -n 65536
#改完记得要刷新profile,以使其生效
[root@xxCento7One config]# source /etc/profile
这样修改后,问题依然存在,不得已,重启服务器。。。。。问题解决(原来重启解千愁这方法在CentOS上依然适用)
3.3:max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
#方法1:
[root@xxCento7One ~]# sysctl -w vm.max_map_count=262144
vm.max_map_count = 262144
[root@xxCento7One ~]# more /proc/sys/vm/max_map_count
262144
#方法2:在这个配置文件的末尾,追加如下所示的内容
[root@xxCento7One ~]# vim /etc/sysctl.conf
#下面的设置用于限制java线程可拥有的内存区域大小
vm.max_map_count=262144
3.4:浏览器访问:http://192.168.122.21:9200/ .失败
一般这个情况,肯定是防火墙的问题。同时CentOS7之后,默认防火墙是firewall。所以我们向防火墙添加过滤规则即可
[root@xxCento7One config]# firewall-cmd --zone=public --add-port=9200/tcp --permanent
FirewallD is not running
#上面报没有启动,启动它
[root@xxCento7One config]# systemctl start firewalld
Failed to start firewalld.service: Unit is masked.
#上面说明被屏蔽了,解除屏蔽即可
[root@xxCento7One config]# systemctl unmask firewalld
[root@xxCento7One config]# systemctl start firewalld
[root@xxCento7One config]# firewall-cmd --zone=public --add-port=9200/tcp --permanent
success
#修改之后,发现依然不能访问。然后怀疑是启动方式有问题,改为下面的写法
[root@xxCento7One config]# systemctl start firewalld.service
[root@xxCento7One config]# firewall-cmd --zone=public --add-port=9200/tcp --permanent
#如上所述,执行完毕之后,能够从页面访问了。