首页 专题 文章 代码 归档

Centos7安装Elasticsearch

1. Elasticsearch简介

1.1. 介绍

ES=elaticsearch简写, Elasticsearch是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。

Elasticsearch也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。

1.2. 解决的痛点

  • 检索相关数据;
  • 返回统计结果;
  • 速度要快。

1.3. 核心概念

A. Cluster:集群

ES可以作为一个独立的单个搜索服务器。不过,为了处理大型数据集,实现容错和高可用性,ES可以运行在许多互相合作的服务器上。这些服务器的集合称为集群。

B. Node:节点 形成集群的每个服务器称为节点。

C. Shard:分片 当有大量的文档时,由于内存的限制、磁盘处理能力不足、无法足够快的响应客户端的请求等,一个节点可能不够。这种情况下,数据可以分为较小的分片。每个分片放到不同的服务器上。

当你查询的索引分布在多个分片上时,ES会把查询发送给每个相关的分片,并将结果组合在一起,而应用程序并不知道分片的存在。即:这个过程对用户来说是透明的。

D. Replia:副本 为提高查询吞吐量或实现高可用性,可以使用分片副本。

副本是一个分片的精确复制,每个分片可以有零个或多个副本。ES中可以有许多相同的分片,其中之一被选择更改索引操作,这种特殊的分片称为主分片。

当主分片丢失时,如:该分片所在的数据不可用时,集群将副本提升为新的主分片。

E. 全文检索 全文检索就是对一篇文章进行索引,可以根据关键字搜索,类似于mysql里的like语句。

全文索引就是把内容根据词的意义进行分词,然后分别创建索引,例如”你们的激情是因为什么事情来的” 可能会被分词成:“你们“,”激情“,“什么事情“,”来“ 等token,这样当你搜索“你们” 或者 “激情” 都会把这句搜出来。

1.4. 安装

1、Elasticsearch基于Java开发,所以我们需要先安装JDK环境,jdk>=1.8

2、安装Elasticsearch

2. JDK环境安装

2.1. 下载jdk

这里放出一个jdk8的下载地址:

https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

截图-1580268806

2.2. 解压

将其解压到/usr/local/jdk就好:

截图-1580268855

2.3. 配置环境变量

A. 然后就是配置环境变量了:

vi /etc/profile

在其文件尾添加如下:

JAVA_HOME=/usr/local/jdk
JRE_HOME=$JAVA_HOME/jre
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export JAVA_HOME PATH JRE_HOME

Tips:如果你解压位置和我的不一样,那么必须要修改JAVA_HOME的值!

B. 刷新全局变量

source /etc/profile

C. 验证

java -version

截图-1580269059

至此,JDK环境安装完毕!

3. ElasticSearch安装

3.1. 下载压缩包

官网下载地址:

https://www.elastic.co/cn/downloads/elasticsearch

我们这里下载Linux的版本:

截图-1580269122

Tips:你可以先下载到本地电脑上,然后在上传到Linux环境的系统(服务器),或者直接在Linux环境下用wget等下载工具下载也可。


我这里先下载到了Windows,然后通过rz上传到linux:

截图-1580270242

3.2. 解压安装

方便起见,我们这里也解压到/usr/local目录下:

参考解压命令:

# 仅供参考
tar zxvf elasticsearch-7.5.2-linux-x86_64.tar.gz -C /usr/local

截图-1580270354

3.3. 配置

ES的默认配置文件是在:

config/elasticsearch.yml

内存配置文件:

config/jvm.options


我们这里配置下内存文件:

vi config/jvm.options

截图-1580270628

:wq保存退出

待会我们还会修改很多配置项才能运行成功。

3.4. 创建新用户和用户组

A. 创建

useradd es -U # 创建同名的用户和用户组

B. 分配

/usr/local/elasticsearch-7.5.2目录分配给es用户/组

参考命令,具体目录根据自己修改:

chown es:es elasticsearch-7.5.2/ -R

结果:

截图-1580271131

3.5. 启动

A. 切换到刚才创建的用户

su es

B. 启动

bin/elasticsearch # 如果加-d则为后台守护进程启动

启动成功:

演示的时候还算幸运,没出现诸如网上说的各种错误。

启动时如果你像我这样,卡在这里,是正常的(因为我们没后台守护启动):

截图-1580271436

然后另起一个shell(不要关闭当前卡住的这个shell),输入以下测试命令:

curl localhost:9200 # 9200是es的默认端口

如果出现如下界面,说明启动成功:

截图-1580271545

3.6. 常见启动错误

虽然我演示的时候,挺正常的,但是不排除你会出现网上流传的各种错误,所以还是总结了一下:

错误1:

错误:

max number of threads [3894] for user [elasticsearch] is too low,increase to at least [4096]

原因:

elasticsearch这个用户的最大打开线程数(3894)太低,至少增加到4096

解决:

1、查看用户最大线程打开数

ulimit -a

截图-1580271731

2、切换到root用户,编辑文件

su root # 切换到root用户
vi /etc/security/limits.conf

到文件尾,增加如下:

*       soft    nproc   4096
*       hard    nproc   4096

截图-1580271905

* 表示匹配所有用户, nproc 表示配置最大打开线程数

3、退出从新登录后,再次查看,修改成功

截图-1580271950

错误2:

最大虚拟内存区域vm.max_map_count(65530)太低,至少增加到262144

解决:

root账号下修改配置文件

vi /etc/sysctl.conf

在末尾添加配置,值大于等于实体的262144就可以

kernel.printk = 5
vm.max_map_count = 262144

截图-1580272081

添加完成后执行下面命令

sysctl -p

截图-1580272155

上面问题解决后,切换成elasticsearch账号,继续启动es。

4. 扩展

4.1. 扩展1:Php

虽然es是基于Java编写的,但它是基于HTTP协议来创建索引、更新索引、查找搜索的,所以严格意义上来讲,凡是有http访问的语言,都可以使用ES,对于PHP,ES官方有扩展包。

地址如下:

https://packagist.org/packages/elasticsearch/elasticsearch

4.2. 扩展2:php-Xunsearch

对于PHP来说,还有一种全文搜索引擎,那就是Xunsearch,但是不知道是设计缺陷还是什么,在使用xunsearch时,并不能较好的结合框架(如Laravel框架)。

因为有一点重要的,xunsearch的配置还是用过.ini文件来配置的,并不像ES那样直接传入项目名称(索引名称),就自己在内部处理,不需要通过什么.ini配置文件来处理。

但,总的来说,还是能用滴,比起ES,轻量点。

此文阅读完毕,您可以:
二维码图片 扫描关注我们哟