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" 即可;