ElasticSearch(下面简称ES)是一个开源的、基于Apache Lucene的、分布式的实时分析搜索引擎。其设计理念就是可以从不用的数据源获取数据,进行实时的检索和分析。

利用ES可以减少数据库压力和数据复杂度,不用在原表大量添加索引,且可以使用廉价机器平行扩展性能,具有轻量高效的特点。

0. Java安装及环境变量配置

ElasticSearch基于Lucene封装了一套REST API,Lucene是Java开源库,所以需要在服务器(或本地)配置好Java环境,所需版本是jdk1.8以上。

java -version 
echo $JAVA_HOME

1. 下载安装Elasticsearch

官方下载地址及安装方法:Download Elasticsearch

以6.1.1版本为例:

$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.1.1.zip
$ unzip elasticsearch-6.1.1.zip
$ cd elasticsearch-6.1.1/ 
$ ./bin/elasticsearch

至此一个单节点集群就可以跑起来了,浏览器访问 http://localhost:9200 即可

2. Linux下的服务器配置

首先进入Elasticsearch的目录,修改config/elasticsearch.yml,找到network.host一行,将其改为:

network.host: 0.0.0.0

注意去掉前面的#号注释,分号后的空格不能省略。
设成0.0.0.0让任何人都可以访问。具体可根据需要设置相应IP。

正常在本地直接运行启动能跑起来,但服务器上到 $ bin/elasticsearch这一步就会报错了:

org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root

这是因为elastic限制了root账户直接启动,需要创建一个账户来启动:

0 . 创建一个用户组

groupadd elastic

1 . 添加用户

useradd 你的用户名 -g elastic -p 密码

我第一次创建完后登录不上账号,可能是密码太过于简单,此时可以重新使用root账号登录,执行修改密码:

passwd 用户名

2 . 若此时登录该账号执行启动会提示“权限不足”,所以需要在root权限下,赋给文件夹执行权限

chown -R 用户名 /opt/elasticsearch-6.1.1 (这里换成你Elasticsearch的目录)

配置好了权限,再次运行下,可能又会报一个bootstrap checks failed的错误,不同的机器可能提示的错误不一样,好像是内存空间一类的配置问题,没有达到其要求的最低值,主要修改以下两个地方,root用户,执行:

vi /etc/security/limits.conf 

添加以下内容:

* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096

接着执行:

vi /etc/sysctl.conf 

添加以下内容:

vm.max_map_count=655360

然后执行:

sysctl -p

参考文章:
http://www.cnblogs.com/sloveling/p/elasticsearch.html

此时使用刚才创建的用户,进入elasticsearch目录执行bin/elasticsearch启动,启动成功,并且可以在外网访问,但是终端一关闭就不能访问了,配置在服务器上我们希望即使关闭终端也不销毁进程,这就需要让其挂在后台运行,在目录下执行:

nohup bin/elasticsearch &

成功后提示 $ nohup: 忽略输入并把输出追加到"nohup.out"

此时控制台不会输出运行情况了,ctrl + c退出来,执行:jobs -l 可查看当前挂在后台的进程:

[1]+ 28290 运行中               nohup ./bin/elasticsearch &

如上28290即为该进程标识,结束进程可以执行

kill -9 28290

关闭终端,ES依然可以访问,但是重新ssh连接服务器后发现 jobs -l 无法查看到进程了,此时可执行:

ps -u 用户名

查看进程,看到一条正在运行的Java进程,如需结束进程依然可以使用上面的方法。