CentOS7 安装ElasticSearch6.4 (一) 单机版步骤及踩坑

一、准备工作

      操作系统的安装参考我的这个帖子 

      1.0:机器规划如下,这次是单机版

IP名称作用其他
192.168.122.21xxCentos7OneElasticSearch、Kibanajdk1.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

#如上所述,执行完毕之后,能够从页面访问了。

 

 

 

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值