ElasticSearch安装
1. 简介
官网:https://www.elastic.co/cn/products/elasticsearch
ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。
Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
我们建立一个网站或应用程序,并要添加搜索功能,但是想要完成搜索工作的创建是非常困难的。我们希望搜索解决方案要运行速度快,我们希望能有一个零配置和一个完全免费的搜索模式,我们希望能够简单地使用JSON通过HTTP来索引数据,我们希望我们的搜索服务器始终可用,我们希望能够从一台开始并扩展到数百台,我们要实时搜索,我们要简单的多租户,我们希望建立一个云的解决方案。因此我们利用Elasticsearch来解决所有这些问题及可能出现的更多其它问题。
ElasticSearch是Elastic Stack的核心,同时Elasticsearch 是一个分布式、RESTful风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。作为Elastic Stack的核心,它集中存储您的数据,帮助您发现意料之中以及意料之外的情况。
2. 安装
参考:https://www.jianshu.com/p/3fa27dda63ab
2.1 下载
从官网下载TAR格式解压包,上传到linux服务器上。
如果你的linux可以访问外网的话,推荐直接在linux中下载,执行如下命令:
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.1.1.tar.gz
2.2 解压
执行解压命令:
tar -zxvf elasticsearch-7.1.1.tar.gz
解压完成后,会出现elasticsearch-7.1.1目录。
2.3启动
进入elasticsearch-7.1.1目录,执行启动命令:
./bin/elasticsearch
ps:
如果你是root用户启动的话,会报"can not run elasticsearch as root"的错误。
因为安全问题elasticsearch不让用root用户直接运行,所以要创建新用户,继续阅读2.4步骤。
2.4 创建新用户
第一步:liunx创建新用户:(root用户权限下)
adduser elsearch
第二步:切换刚才创建的用户:
su elsearch
然后启动elasticsearch。如果显示Permission denied权限不足,则继续进行第三步。
第三步:给新用户赋权限
因为这个用户本身就没有权限,肯定自己不能给自己付权限。所以要用root用户登录并赋予权限
chown -R elsearch:elsearch 你的elasticsearch安装目录
通过上面三步就可以启动elasticsearch了。
然后我们就可以对我们的配置文件进行修改了
进入到 elsearch下的config目录
cd /soft/elsearch/config
然后找到下面的配置
打开配置文件
vim elasticsearch.yml
设置ip地址,任意网络均可访问
network.host: 0.0.0.0
node.name: node-1
cluster.initial_master_nodes: ["node-1"]
在Elasticsearch中,如果network.host不是localhost或者127.0.0.1的话,就会认为是生产环境,会对环境的要求比较高,我们的测试环境不一定能够满足,一般情况下需要修改2处配置,如下:
修改jvm启动参数
vim config/jvm.options
根据自己机器情况修改
-Xms128m
-Xmx128m
然后在修改第二处的配置
切换root用户,编辑文件
vim /etc/sysctl.conf
增加这样一条配置
一个进程在VMAs(虚拟内存区域)创建内存映射最大数量
vm.max_map_count=655360
让配置生效
sysctl -p
2.5 验证启动是否成功
首先我们需要切换到 elsearch用户
su - elsearch
然后在到bin目录下,执行下面
进入bin目录
cd /soft/elsearch/bin
后台启动
./elasticsearch -d
如果一切正常,Elasticsearch就会在默认的9200端口运行。
这时,打开另一个命令行窗口,请求该端口:
curl localhost:9200
如果得到如下的返回,就说明启动成功了:
2.6、远程访问elasticsearch服务
默认情况下,Elasticsearch 只允许本机访问
如果需要远程访问,可以修改 Elasticsearch
安装目录中的config/elasticsearch.yml文件,去掉network.host的注释,将它的值改成0.0.0.0,让任何人都可以访问,然后重新启动 Elasticsearch 。
回到运行Elasticsearch 的命令行窗口,ctrl+c停止运行
切换为root用户
修改 Elasticsearch 安装目录中的config/elasticsearch.yml文件
去掉network.host的注释,将它的值改成0.0.0.0
注意:
修改后的每行前面不能有空格,修改后的“:”后面必须有一个空格
线上服务不要这样设置,要设成具体的 IP。
切换为普通用户,重新启动 Elasticsearch
2.7 设置开机自启
cd /etc/init.d
touch elasticsearch
vim elasticsearch
编写开机启动脚本
#!/bin/sh
#chkconfig: 2345 80 05
#description: elasticsearch
#jdk相关路径
export JAVA_HOME=/var/local/java/jdk1.8.0_241
export JAVA_BIN=/var/local/java/jdk1.8.0_241/bin
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPATH
case "$1" in
start)
#es的启动账号名
su elsearch<<!
#es的安装路径
cd /var/local/elasticsearch-6.2.4/
./bin/elasticsearch -d
!
echo "elasticsearch startup"
;;
stop)
es_pid=`ps aux|grep elasticsearch | grep -v 'grep elasticsearch' | awk '{print $2}'`
kill -9 $es_pid
echo "elasticsearch stopped"
;;
restart)
es_pid=`ps aux|grep elasticsearch | grep -v 'grep elasticsearch' | awk '{print $2}'`
kill -9 $es_pid
echo "elasticsearch stopped"
su es<<!
cd /var/local/elasticsearch-6.2.4/
./bin/elasticsearch -d
!
echo "elasticsearch startup"
;;
*)
echo "start|stop|restart"
;;
esac
exit $?
脚本中的各种路径需要根据自己服务器修改。
为启动脚本增加执行权限:
chmod +x /etc/init.d/elasticsearch
配置开机启动es:
chkconfig --add elasticsearch
重启机器:
reboot
检查ES是否启动:
jps
2.8 安装ik分词器
ik分词器 GitHub地址
为ik分词器的安装准备环境
cd your-es-root/plugins/ && mkdir ik
二)、下载ik分词器
注意!要下载和ElasticSearch版本一致的
wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.1.1/elasticsearch-analysis-ik-7.1.1.zip
三)解压ik分词器安装包
如果没有安装unzip解压,使用yum install unzip命令安装
unzip elasticsearch-analysis-ik-7.1.1.zip
四)、重新启动ElasticSearch
五)、查看是否安装成功
[root@CentOS7 bin]# curl http://localhost:9200/_cat/plugins node1 analysis-ik 7.1.1
3. 异常
3.1 错误 CircuitBreakingException[[FIELDDATA] Data too large, data for [proccessDate] would be larger than limit of [10307921510/9.5gb]]; }]
以上异常原因是fielddata 的缓存不够用。
修改方法:
向Elasticsearch发送如下请求
fielddata 断路器默认设置堆的 60% 作为 fielddata 大小的上限。
控制fielddata允许内存大小
PUT /_cluster/settings
{
"persistent": {
"indices.breaker.fielddata.limit": "60%"
}
}
request 断路器估算需要完成其他请求部分的结构大小,例如创建一个聚合桶,默认限制是堆内存的 40%。
PUT /_cluster/settings
{
"persistent": {
"indices.breaker.request.limit": "40%"
}
}
total 揉合 request 和 fielddata 断路器保证两者组合起来不会使用超过堆内存的 70%。
PUT /_cluster/settings
{
"persistent": {
"indices.breaker.total.limit": "70%"
}
}
之后再发送请求即可成功。
如果还报错(气!!!)
最直接的就是修改config/jvm.options下的参数(根据服务器实际内存大小适当提高此虚拟机允许内存最大值)
3.2 错误: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
解决办法: 将当前用户的软硬限制调大。
切换root用户,编辑文件
vim /etc/security/limits.conf
在文件的最后追加如下配置:
es soft nofile 65535
es hard nofile 65537
soft nofile表示软限制,hard nofile表示硬限制,
上面两行语句表示,es用户的软限制为65535,硬限制为65537(也可以将es用户换成*,表所有用户)
即表示es用户能打开的最大文件数量为65537,不管它开启多少个shell。
硬限制是严格的设定,必定不能超过这个设定的数值。
软限制是警告的设定,可以超过这个设定的值,但是若超过,则有警告信息。
在设定上,通常soft会比hard小,举例来说,soft可以设定为80,而hard设定为100,那么你可以使用到90(因为没有超过100),但介于80~100之间时,系统会有警告信息。
修改了limits.conf,不需要重启,将当前用户重新登录即生效。
查看当前用户的软限制
ulimit -n
等价于
ulimit -S -n
结果:65535
查看当前用户的硬限制
ulimit -H -n
结果:65537