前言:网上有很多相关方面的教程,但是却没有系统的体系,最近在学ElasticSearch,所以先整理一份,互相交流学习。
整体过程概述
1. 设置普通用户,ElasticSearch默认只能使用普通用户启动。
2. 配置环境,需要依赖JDK环境
3. 安装ElasticSearch,解决kernal版本低的问题
4. 配置外网访问,解决无法启动的三个错误问题
5. 让ElasticSearch在后台运行
6. 如何关闭ElasticSearch的后台进程
一、用户设置
ElasticSearch默认是不能使用root用户进行启动的,所以需要先添加一个普通用户,并使用普通用户身份安装ElasticSearch。
[root@localhost soft]# adduser king
2.设置用户密码,需要输入两次。其中提示无效的密码可以不用管,是因为密码太简单,不符合安全要求。
[root@localhost soft]# passwd king
更改用户 king 的密码 。
新的 密码:
无效的密码: 过于简单化/系统化
无效的密码: 过于简单
重新输入新的 密码:
passwd: 所有的身份验证令牌已经成功更新。
3.在根目录下创建一个文件夹soft
,并将拥有者更改为king,使用ls -al /soft
命令查看此时/soft文件夹的拥有者。
[root@localhost /]# mkdir /soft
[root@localhost /]# chown king /soft
[root@localhost /]# ls -al /soft
drwxr-xr-x. 2 king root 4096 9月 3 01:58 .
dr-xr-xr-x. 26 root root 4096 9月 3 01:58 ..
一个点代表当前目录,两个点代表上级目录,可以看到当前目录的拥有者已经是king了。
二、安装jdk1.8
如果已经安装jdk1.8可跳过此步骤
ElasticSearch是基于Java开发的,所以要先安装jdk环境。
1.使用yum安装openjdk1.8,使用yum search jdk1.8
搜索安装包
[root@localhost elasticsearch-5.5.2]$ yum search jdk
java-1.8.0-openjdk.x86_64 : OpenJDK Runtime Environment
# 会有很多版本的jdk,只展示我们要安装的这个版本
2.安装openjdk1.8
[root@localhost ~]# yum install java-1.8.0-openjdk.x86_64
安装完成后输入java
命令,有相应输出就说明安装成功了。
3.至此之前,我们都是使用root身份来操作的,下面使用如下命令切换到king用户。
[root@localhost /]# su king
[king@localhost /]$ cd /soft
[king@localhost soft]$
这时就以king用户身份登录了,我们使用cd命令进入/soft目录,然后进行接下来的操作。
三、下载ElasticSearch并安装
1.首先到官网下载最新版本的ElasticSearch的zip压缩包,也可以复制下载地址在终端中使用wget命令直接下载到CentOS中。例如在终端中执行以下命令:
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.2.zip
下载过程可能比较慢,可以使用自己电脑下载后使用ftp工具上传到/soft目录。
2.下载完成后,解压elasticsearch-5.5.2.zip
unzip elasticsearch-5.5.2.zip
解压完成后内容如下
[king@localhost soft]$ ls
elasticsearch-5.5.2 elasticsearch-5.5.2.zip
3.进入elasticsearch-5.5.2,并启动elasticsearch
[king@localhost soft]$ cd elasticsearch-5.5.2
[king@localhost elasticsearch-5.5.2]$ bin/elasticsearch
## 会有一堆日志输出,还报了一个异常java.lang.UnsupportedOperationException: seccomp unavailable: requires kernel 3.5+ ...不过这个异常不影响启动,是因为我们的内核版本太低了,新版本系统应该没这个问题。
4.让启动不提示这个异常可以在config/elasticsearch.yml添加如下两行内容,其中:号后面要加上一个空格,因为这是yaml文件的格式要求,yaml是一种新的属性文件的写法,更简洁,不懂的可以自行查查。
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
5..这时重新启动,不会提示任何错误了。新打开一个窗口,输入curl localhost:9200
,如果有以下输出则说明启动成功。
[king@localhost ~]$ curl localhost:9200
{
"name" : "ZGws7ZX","cluster_name" : "elasticsearch","cluster_uuid" : "yeYDTLbNQ--rmDXMi2xO-g","version" : {
"number" : "5.5.2","build_hash" : "b2f0c09","build_date" : "2017-08-14T12:33:14.154Z","build_snapshot" : false,"lucene_version" : "6.6.0"
},"tagline" : "You Know,for Search"
}
四、配置外网访问
这个时候只有服务器本身能访问ElasticSearch的服务,接下来配置外网服务。
1.在config/elasticsearch.yml添加如下内容:
network.host: 0.0.0.0
五、错误处理
重新启动会报如下三个错误(我的翻译可能有误,大概这个意思)
ERROR: [3] bootstrap checks Failed
#文件句柄太少,至少要65536
[1]: max file descriptors [4096] for elasticsearch process is too low,increase to at least [65536]
#最大线程数太少,至少2048个(经典的2048游戏)
[2]: max number of threads [1024] for user [king] is too low,increase to at least [2048]
#虚拟内存太少,至少262144
[3]: max virtual memory areas vm.max_map_count [65530] is too low,increase to at least [262144]
那么接下来分别解决上面三个问题:
首先切换回root用户进行这些系统操作,使用如下命令
[king@localhost elasticsearch-5.5.2]$ su -
密码:
[root@localhost ~]#
1.更改文件句柄数
[root@localhost ~]# vi /etc/security/limits.conf
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
2.增加线程数
[root@localhost ~]# vi /etc/security/limits.d/90-nproc.conf
将其中的
* soft nproc 1024
修改为
* soft nproc 2048
3.增加虚拟内存
[root@localhost ~]# vim /etc/sysctl.conf
在其中添加
vm.max_map_count=655360
4.这些修改完成后,并没有生效,需要使用以下命令使其生效。
sysctl -p
六、重新启动ElasticSearch
su king
2.进入elastic目录,并启动,这时一切正常啦^_^
[king@localhost soft]$ cd elasticsearch-5.5.2
[king@localhost elasticsearch-5.5.2]$ bin/elasticsearch
输出信息如下:
OpenJDK 64-Bit Server VM warning: If the number of processors is expected to increase from one,then you
#中间信息省略,出现下面这个started就成功了。
[2017-09-03T03:26:07,843][INFO ][o.e.n.Node ] [ZGws7ZX] started
这里打开本地浏览器,输入服务器地址就可心成功访问了,显示如下
3.如果项目启动成功了,但是本地访问不到,那么可能是防火墙没有配置。此处就直接把防火墙关闭了。命令如下:
service iptables stop
七、配置ElasticSearch后台运行(方式一:复杂但是通用所有程序)
现在这样虽然可以用了,但是一旦关闭终端ElasticSearch就会停止运行了。方式很简单,使用如下命令运行就可以了:
nohup bin/elasticsearch &
这个时候关闭终端也无防了。稍解释下,nohup就是不接收挂断信号了,直观上的看,就是不占用终端,可以继续在同一个终端干其它的事,但是终端关闭,ElasticSearch程序也会退出。&会让程序在后台执行,不依赖当前用户。二者结合就可以让ElasticSearch程序在后台永远的执行下去了。
这个时候程序的日志都会保存在程序目录的nohup.out文件中,可以使用如下命令动态查看日志
tail -fn 200 nohup.out
如果不想输出nohup.out文件怎么办呢?也很简单,将输出信息重定向就可以了
nohup bin/elasticsearch >/dev/null 2>&1 &
1代表标准(正确)输出,2代表错误输出。 >/dev/null
是将所有正确输出都保存到null文件中,都会被抛弃掉。2>&1
是指将错误输出也重定向到标准输出。(如果看不懂没关系,那就去学,大神略过)。
七、配置ElasticSearch后台运行(方式二:简单但是只能用于ElasticSearch)
在启动时加上 -d 参数,如下
[king@localhost elasticsearch-5.5.2]$ bin/elasticsearch -d
OpenJDK 64-Bit Server VM warning: If the number of processors is expected to increase from one,then you should configure the number of parallel GC threads appropriately using -XX:ParallelGCThreads=N
[king@localhost elasticsearch-5.5.2]$
八、关闭后台的ElasticSearch程序
先查看后台的信息
[king@localhost elasticsearch-5.5.2]$ ps -ef|grep elastic
king 41496 41309 2 03:53 pts/0 00:00:11 /usr/bin/java -Xms2g -Xmx2g -XX:+UseConcMarkSweepGC - .............
[king@localhost elasticsearch-5.5.2]$ kill 41496
[king@localhost elasticsearch-5.5.2]$ ps -ef|grep elastic
king 41642 41309 0 04:02 pts/0 00:00:00 grep elastic
[1]+ Exit 143 nohup bin/elasticsearch > /dev/null 2>&1