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
此时使用刚才创建的用户,进入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进程,如需结束进程依然可以使用上面的方法。