首页 > 其他 > 详细

ELK之分布式搜索与分析引擎Elasticsearch

时间:2020-05-11 19:42:43      阅读:72      评论:0      收藏:0      [点我收藏+]

What is Elasticsearch?

  Open Source,Distributed.RESTful Search Engine  开源的,分布式,RESTful搜索引擎;

Elasticsearch的诞生故事

  2004年,一个叫Shay Banon的宠妻狂魔.因为妻子要去伦敦学习厨师,为妻子开发一个搜索食谱的搜索引擎,基于Lucene开发发布了第一个开源项目.叫做"Compass"

  2010年,由于Shay Banon工作需要高性能的,实时的,分布式的搜索,基于Compass重写成为了独立的服务Elasticsearch.

  2010年2月,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、滴滴打车地图搜索

  ......

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

Github: https://github.com/elastic

基于关系型数据库无法满足日益增加的搜索需求,有诸多不足和局限,搜索引擎框架解决了基于数据库搜索的不足,实现了分布式,高可用,高性能搜索

Elasticsearch VS Solr

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

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

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

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

在了解Elasticsearch之前,有必要介绍两个基本概念

倒排索引和分词器(ik分词器) 

 假设我们数据库存储了三条数据

  key:1      value:我是程序猿            分词->  我  是   程序  程序猿

  key:2       value:我爱编程              分词->  我   爱  编程

  key:3  value:我会用Java写增删改查程序代码      分词->  我  会用  java  写 增删改查  程序 代码

 

那么全文检索底层是如何做的呢?

  首先进行分词,然后把我们分的词当做索引

  我 :        1,2,3

  程序:        1,3

  代码:     3

这样当我们去全文检索   程序,此刻就可以查出  key(或者称作id) 1,3,搜索引擎的思想大致就是这样去实现的

Elasticsearch 7.6.2 Linux环境搭建

下载:  https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.6.2-linux-x86_64.tar.gz

解压缩  tar -zxvf elasticsearch-7.6.2-linux-x86_64.tar.gz

下图为解压后的目录结构

 技术分享图片

下面需要做一系列配置,否则在启动时候日志报错,需要我们注意

修改JDK配置

 目录里面包含有JDK,7.6.2版本JDK是13,运行最低需要JDK11的版本,所以我们的配置里面如果配置的是JDK8版本,需要配置一下JDK,

cd elasticsearch-7.6.2/bin/     

vim elasticsearch-env

技术分享图片

 这样就配置使用es自带的JDK,而不会使用我们配置的全局环境变量

修改文件所有者

  若无非root用户,按下面步骤创建

    1.useradd es 创建用户
    2.passwd es 给已创建的用户testuser设置密码(密码设置不能少于8个字符,最好不要连续数字或者字符),确认时重输一次密码即可

chown es:es -R /usr/local/elasticsearch

修改JVM配置

  config目录下jvm.options修改  -Xms512m  -Xmx512m

  1. -Xms 为jvm启动时分配的内存,比如-Xms512m,表示分配512M
  2. -Xmx 为jvm运行过程中分配的最大内存,比如-Xms512m,表示jvm进程最多只能够占用512M内存

修改数据和日志目录:

  vim elasticsearch.yml

  修改数据和日志目录:此处需要给予用户足够权限  chmod -R 777 /home/es

  path.data: /home/es/elasticsearch/data # 数据目录位置

  path.logs: /home/es/elasticsearch/logs # 日志目录位置

修改绑定的IP

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

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

修改开启文件数量限制

 vim /etc/security/limits.conf 

  添加到文件最后,若想生效,需重启linux

  * soft nofile 65536

  * hard nofile 131072

  * soft nproc 2048

  * hard nproc 4096

修改内存权限限制

 vim /etc/sysctl.conf

 添加vm.max_map_count=655360,永久修改
 
 执行 sysctl -p

配置节点

技术分享图片

discovery.seed_hosts 注释打开,写上当前主节点的IP;(cluster.name && node.name && cluster.initial_master_nodes后续使用客户端也需要打开)

启动与关闭

  在bin目录下启动,启动需要切换非root用户启动

 ./elasticsearch 前台运行

 ./elasticsearch -d 后台运行

  出现started时启动完成

  关闭 kill pid

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

  9200是http协议的RESTful接口

浏览器访问成功界面

技术分享图片

Elasticsearch的客户端工具

  ealsticsearch只是后端提供各种resulful api,看数据并不直观,所以建议安装客户端插件,elasticsearch-head安装

  下载地址:https://github.com/mobz/elasticsearch-head   

  zip包下载:  https://codeload.github.com/mobz/elasticsearch-head/zip/master

CentOS安装npm

npm: Nodejs下的包管理器

推荐从此处下载:https://npm.taobao.org/mirrors/  (也可下载12版本,运行过程中本人发现部分版本npm 不支持13版本,改为12也可以 )
直接下载: https://cdn.npm.taobao.org/dist/node/latest-v13.x/node-v13.0.0-linux-x64.tar.gz 

解压:tar -zxvf node-v13.0.0-linux-x64.tar.gz
mv node
-v13.0.0-linux-x64 node-v13.13.0
配置nodejs环境变量
vim
/etc/profile 在path中加入 /usr/local/node-v13.0.0/bin即可; export PATH=/usr/local/node-v13.0.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/

此处需要注意 elasticsearch.yml注释需要放开

cluster.name

node.name

cluster.initial_master_nodes

 如果一切配置没有问题,我们访问9100端口,客户端的功能就不一一介绍了,多点击点击就能够明白大概

技术分享图片

Elasticsearch测试工具之Kinaba

Kibana的版本要和elasticsearch版本一致;测试工具其实可以用很多种:postman、curl、head、浏览器插件、kibana;

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

下载:https://www.elastic.co/downloads/kibana 下载下来是一个压缩包,解压即可;

启动,进入bin目录 ./kibana

汉化:./config/kibana.yml 里面修改i18n.defaultLocale: "zh-CN"
  kibana也不允许root启动,指定centos用户启动   chown es:es
-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基操

PUT /test
PUT /test/_doc/1
{
  "name" : "doc1",
  "desc" : "this is  doc1"
}
PUT /test/_doc/2
{
  "name" : "doc2",
 "desc" : "this is  doc2"
}
查询
GET /test/_doc/doc1
GET /test/_doc/doc2

 关于Elasticsearch的深入讲解, 未完待续...在此感到自身博客界面排版太难,有比较好方式的欢迎推荐

ELK之分布式搜索与分析引擎Elasticsearch

原文:https://www.cnblogs.com/zhaoletian/p/12868159.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!