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

如果得到如下的返回,就说明启动成功了:

img

2.6、远程访问elasticsearch服务

默认情况下,Elasticsearch 只允许本机访问

如果需要远程访问,可以修改 Elasticsearch
安装目录中的config/elasticsearch.yml文件,去掉network.host的注释,将它的值改成0.0.0.0,让任何人都可以访问,然后重新启动 Elasticsearch 。

回到运行Elasticsearch 的命令行窗口,ctrl+c停止运行
切换为root用户
img

修改 Elasticsearch 安装目录中的config/elasticsearch.yml文件

去掉network.host的注释,将它的值改成0.0.0.0

注意:
修改后的每行前面不能有空格,修改后的“:”后面必须有一个空格
img

线上服务不要这样设置,要设成具体的 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下的参数(根据服务器实际内存大小适当提高此虚拟机允许内存最大值)

img


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

posted @ 2021-02-22 14:54  coolxin1024  阅读(91)  评论(0)    收藏  举报