分布式搜索与分析引擎 ElasticSearch

what is Elasticsearch?

Open Source, Distributed, RESTful Search Engine

Elasticsearch是一个开源的、分布式、RESTful搜索引擎;

2004年,一个叫做Shay Banon的开发者,由于妻子要去伦敦学习厨师,他也跟着去了伦敦,为了给妻子开发一个搜索食谱的搜索引擎,他开始基于Lucene开发发布了他的第一个开源项目,叫做“Compass”,此后好几年该项目没有维护,直到2010年,Shay Banon在工作中需要高性能的、实时的、分布式的搜索,然后他决定重写几年前的Compass库使其成为一个独立的服务并命名为Elasticsearch;

2010年2月,Elasticsearch第一个版本发布;

2012年2月,Elasticsearch 1.0发布,同时成立Elastic公司(创业)

2015年10月,Elasticsearch 2.0发布

2016年10月,Elasticsearch 5.0发布,至少需要jdk1.8

2017年8月,Elasticsearch 6.0发布

2019年8月,Elasticsearch 7.0发布

现在最新版本,Elasticsearch 7.6.2 (2020年5月)

谁在使用Elasticsearch?

1、维基百科,类似百度百科,全文检索;

2、Stack Overflow国外的程序异常问答网站;

3、GitHub 开源代码管理,搜索上千亿行代码;

4、京东到家订单中心

5、携程酒店订单

6、携程机票

7、去哪儿订单中心

8、滴滴打车地图搜索

9、58同城

10、饿了么

11、今日头条

12、360安全

13、小米

14、vivo等

站内搜索(新闻、论坛),IT信息系统搜索(OA,CRM,ERP等)

官网:https://www.elastic.co/

Github:https://github.com/elastic

Elastic search 2018年宣布上市,股票代码为“ESTC”;

搜索无处不在

1、基于数据库搜索

like %关键词%,有诸多不足与局限;

2、搜索引擎框架

解决基于数据库搜索的不足与局限,实现分布式、高可用、高性能搜索;

数据库排行榜

Elasticsearch 属于数据库范畴,可以称为nosql数据库;

https://db-engines.com/en/ranking

Elasticsearch官方认证考试

https://training.elastic.co/exam/elastic-certified-engineer

报名费:$400 (大约2400 - 2800元人民币)

ElasticSearch  VS  Solr

Solr是第一个基于Lucene核心库功能完备的搜索引擎产品,诞生早于Elasticsearch,早期在全文搜索领域,Solr有非常大的优势,在近几年大数据发展时代,Elastic由于其分布式特性,满足了很多PB级大数据的处理需求,特别是后面ELK三大组合的流行,Solr使用量逐渐下跌;

ElasticSearch和Solr均起源于Lucene,Lucene是基于Java语言开发的搜索引擎库类(jar包)创建于1999年,2005年成为Apache顶级开源项目,Lucene具有高性能、但易扩展有局限性,只能单机环境,而且只能基于Java语言开发,其他php、python等不能使用;

类库的接口学习曲线陡峭,原生并不支持水平扩展;

自己开发一个完整的搜索引擎工作量比较大,必须要懂一些搜索引擎原理的人才能用好,所以后来elasticsearch基于lucene进行封装,支持分布式,可水平扩展,降低全文检索的学习曲线,基于http restful api可以被任何编程语言调用;

倒排索引(反向索引)

全文检索:底层是倒排索引;

Elasticsearch 运行环境

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

解压缩

tar -xvf elasticsearch-7.6.2-linux-x86_64.tar.gz

将目录重命名

mv解压后的文件名  elasticsearch

#配置自己的jdk13

export JAVA_HOME=/usr/local/elasticsearch-7.6.2/jdk

export PATH=$JAVA_HOME/bin:$PATH

#添加jdk判断

if [ -x "$JAVA_HOME/bin/java" ]; then

        JAVA="/opt/jdk-11.0.1/bin/java"

else

        JAVA=`which java`

fi

改变所有文件拥有者

Chown centos:centos -R /usr/local/elasticsearch

进入config文件夹开始配置

编辑jvm.options:

vim jvm.options

默认配置如下:

-Xms1g

-Xmx1g

内存占用太多了,调小一些:

-Xms512m

-Xmx512m

vim elasticsearch.yml

修改数据和日志目录(不修改亦可,默认目录为当前安装目录的data和logs文件夹下):

path.data: /home/新用户名称/elasticsearch/data # 数据目录位置

path.logs: /home/新用户名称/elasticsearch/logs # 日志目录位置

修改绑定的ip:

network.host: 0.0.0.0 #绑定到0.0.0.0,允许任何ip来访问

默认只允许本机访问,修改为0.0.0.0后则可以远程访问

配置信息如下:

属性名及说明

cluster.name:配置elasticsearch的集群名称,默认是elasticsearch,可以修改成一个有意义的名称;

node.name:节点名,es会默认随机指定一个名字,建议指定一个有意义的名称;

path.data:设置索引数据的存储路径,默认是es根目录下的data文件夹,可以设置多个存储路径,用逗号隔开

path.logs:设置日志文件的存储路径,默认是es根目录下的logs文件夹

bootstrap.memory_lock:设置为true可以锁住ES使用的内存,避免内存进行swap

network.host:设置bind_host,设置为0.0.0.0允许外网访问

http.port:设置对外服务的http端口,默认为9200

discovery.seed_hosts:启动此节点时,传递要执行发现的主机的初始列表

cluster.initial_master_nodes:使用一组初始的主节点引导集群

max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]

出现以上报错解决方案:切换到root用户,编辑limits.conf 添加类似如下内容

vi /etc/security/limits.conf 

添加如下内容:

* soft nofile 65536

* hard nofile 131072

* soft nproc 2048

* hard nproc 4096

然后重启linux

[2] : max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

elasticsearch用户拥有的内存权限太小,至少需要262144;

解决办法:

在/etc/sysctl.conf文件最后添加一行

vm.max_map_count=262144

即可永久修改

[3]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured

把discovery.seed_hosts注释打开,写上当前主节点的IP;

启动与关闭

./elasticsearch 前台运行,Ctrl + C 则程序终止;

./elasticsearch -d 后台运行出现started时启动完成

关闭kill pid

Elasticsearch端口9300、92009300是tcp通讯端口,集群ES节点之间通讯使用;

9200是http协议的RESTful接口

elasticsearch-head插件

ealsticsearch只是后端提供各种resulful api,那么怎么直观的看它的信息呢?elasticsearch-head是一款专门针对于elasticsearch的客户端工具,用来展示数据:

elasticsearch-head安装包,下载地址:

https://github.com/mobz/elasticsearch-head

CentOS安装npm

npm: Nodejs下的包管理器;

推荐从此处下载:https://npm.taobao.org/mirrors/可以下载想要的最新node版本

Nodejs最新版本:https://npm.taobao.org/mirrors/node/latest/

下载 

node-v13.13.0-linux-x64.tar.gz

解压:

tar -zxvf node-v13.13.0-linux-x64.tar.gz

mv node-v13.13.0-linux-x64 node-v13.13.0

配置nodejs环境变量

vim /etc/profile

在path中加入 /usr/local/node-v13.13.0/bin即可;

source /etc/profile

验证:

node -v

npm -v

Npm环境准备好了之后,开始安装elasticsearch-head

解压:

unzip elasticsearch-head-master

Cd elasticsearch-head-master

npm install 

(如果执行失败,可以cnpm install,使用cnpm之前需要安装cnpm,通过

npm install -g cnpm --registry=https://registry.npm.taobao.org

该命令安装;

cnpm -v

npm run start(npm run-script start)

可以后台启动:

nohup npm run-script start &

npm -l 显示所有使用帮助信息

然后访问:http://localhost:9100/每个项目的根目录下面,一般都有一个package.json文件,定义了这个项目所需要的各种模块,以及项目的配置信息(比如名称、版本、许可证等元数据);npm install命令根据这个配置文件,自动下载所需的模块,也就是配置项目所需的运行和开发环境;

Head插件访问elasticsearch

要允许跨域:修改elasticsearch.yml文件,添加

http.cors.enabled: true

http.cors.allow-origin: "*"

Kibana运行环境

Kibana的版本要和elasticsearch版本一致;

测试工具其实可以用很多种:postman、curl、head、浏览器插件、kibana;

Github https://github.com/elastic/kibana

下载:https://www.elastic.co/downloads/kibana

下载下来是一个压缩包,解压即可;

启动,进入bin目录 ./kibana

汉化:./config/kibana.yml里面修改i18n.locale: “zh_CN“

kibana也不允许root启动,指定centos用户启动

chown centos:centos -R /usr/local/kibana

./kibana -h命令帮助

启动命令:

./kibana 或者 ./kibana serve

后台启动:

nohup /usr/local/kibana-7.6.2/bin/kibana &

然后访问:http://192.168.194.128:5601

远程访问kibana界面被拒绝

将$KIBANA/config/kibaba.yml下的

server.host: "localhost" 更改为server.host: "0.0.0.0" 即可;


你可能感兴趣的:(分布式搜索与分析引擎 ElasticSearch)