Elasticsearch及ELK使用(一):分析搜索引擎入门

1 引言

1.1 什么是elasticsearch?

ElasticSearch是一个分布式,高性能、高可用、可伸缩的搜索和分析系统 。

ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

1.2 什么是Elastic Stack套件?

单纯的elasticsearch提供了数据搜索分析,但是:

  • 它仅提供了RESTful API,没有提供界面,不太方便,所以通常安装kibana组件提供Web界面,包括操作和监控等。
  • elasticsearch不具备数据采集功能,通常通过在源端系统部署filebeat采集数据(包括从文件和数据库中采集等),filebeat采集得到的数据可以直接传给elasticsearch。还可以filebeat采集的数据先通过logstash,在logstash里完成加工、过滤、转换等预处理再传给elasticsearch。

所以在实际使用中,经常以套件组合形式使用。

Elastic Stack,前身缩写是ELK,就是ElasticSearch + LogStash + Kibana。 现在的Elastic Stack除了下图右侧的ELK,还包括左侧的主键。
在这里插入图片描述

1.3 ES的使用场景

  • 网上商场,搜索商品.
  • ES配合logstash,kibana,日志分析.
    假设用数据库做搜索,当用户在搜索框输入“四川火锅”时,数据库通常只能把这四个字去进行全部匹配。可是在文本中,可能会出现“推荐四川好吃的火锅” 或者“火锅在四川的特色”,这时候就没有结果了。

而且:
1.海量数据组合条件查询
2.毫秒级或者秒级返回数据

2 elasticsearch基本概念

2.1 近实时(NRT)

ES是一个近实时的搜索引擎(平台),代表着从添加数据到能被搜索到只有很少的延迟。(大约是1s)这里的延迟是搜索search的延迟,直接查询query是无延迟的。

2.2 文档document

Elasticsearch是面向文档的,文档是所有可搜索数据的最小单元。可以把文档简单理解为关系型数据库中的一条记录。每个文档有唯一的ID,文档会被序列化成json格式,保存在Elasticsearch中。同样json对象由字段组成,给个字段都有自己的类型(字符串,数值,布尔,二进制,日期范围类型)。当我们创建文档时,如果不指定类型,Elasticsearch会帮我们自动匹配类型。每个文档都一个ID,你可以自己指定,也可以让Elasticsearch自动生成。json格式,支持数组/嵌套,在一个index/type里面,你可以存储任意多的文档。注意,尽管一个文档,物理上存在于一个索引之中,文档必须被索引/赋予一个索引的type。

2.3 索引index

索引是具有某种相似特性的文档集合。例如,您可以拥有客户数据的索引、产品目录的另一个索引以及订单数据的另一个索引。索引由一个名称(必须全部是小写)标识。在单个集群中,您可以定义任意多个索引。Index体现了逻辑空间的概念,每个索引都有自己的mapping定义,用于定义包含文档的字段名和字段类型。Index体现了物理空间的概念,索引中的数据分散在shard上。可以将其暂时理解为 MySql中的 database。

索引的mapping和setting

  1. mapping:定义文档字段的类型
  2. setting:定义不同数据的分布

2.4 类型type(Deprecated)

一个索引可以有多个类型。例如一个索引下可以有文章类型,也可以有用户类型,也可以有评论类型。在一个索引中不能再创建多个类型,在以后的版本中将删除类型的整个概念。

从6.0开始,type已经被逐渐废弃。在6.0中默认类型(_doc)。(虽然在6.0中,一个index还可以创建多个types,但不推荐这么做)

从7.0开始,一个索引下默认有且只有一个类型(_doc),不能自行创建类型。

2.5 节点node

节点是一个Elasticsearch实例,本质上就是一个java进程,节点也有一个名称(默认是随机分配的),当然也可以通过配置文件配置,或者在启动的时候,-E node.name=node1指定。此名称对于管理目的很重要,因为您希望确定网络中的哪些服务器对应于ElasticSearch集群中的哪些节点。

在Elasticsearch中,节点的类型主要分为如下几种:

  • master eligible节点:

    每个节点启动后,默认就是master eligible节点,可以通过node.master: false 禁止

    master eligible可以参加选主流程,成为master节点

    当第一个节点启动后,它会将自己选为master节点

    每个节点都保存了集群的状态,只有master节点才能修改集群的状态信息

  • data节点

    可以保存数据的节点。负责保存分片数据,在数据扩展上起到了至关重要的作用

  • Coordinating 节点

    负责接收客户端请求,将请求发送到合适的节点,最终把结果汇集到一起

    每个节点默认都起到了Coordinating node的职责

开发环境中一个节点可以承担多个角色,生产环境中,建议设置单一的角色,可以提高性能等

2.6 分片shards

索引可能存储大量数据,这些数据可能会超出单个节点的硬件限制。例如,占用1TB磁盘空间的10亿个文档的单个索引可能不适合单个节点的磁盘,或者速度太慢,无法单独满足单个节点的搜索请求。

为了解决这个问题,ElasticSearch提供了将索引细分为多个片段(称为碎片)的能力。创建索引时,只需定义所需的碎片数量。每个分片(shard)本身就是一个完全功能性和独立的“索引”,可以托管在集群中的任何节点上。

为什么要分片?

  • 它允许您水平拆分/缩放内容量
  • 它允许您跨碎片(可能在多个节点上)分布和并行操作,从而提高性能/吞吐量

如何分配分片以及如何将其文档聚合回搜索请求的机制完全由ElasticSearch管理,并且对作为用户的您是透明的。主分片数在索引创建时指定,后续不允许修改,除非Reindex

2.7 分片的副本replicas of shard

在随时可能发生故障的网络/云环境中,非常有用,强烈建议在碎片/节点以某种方式脱机或因任何原因消失时使用故障转移机制。为此,ElasticSearch允许您将索引分片的一个或多个副本复制成所谓的副本分片,简称为副本分片。

为什么要有副本?

  • 当分片/节点发生故障时提供高可用性。因此,需要注意的是,副本分片永远不会分配到复制它的原始/主分片所在的节点上。
  • 允许您扩展搜索量/吞吐量,因为可以在所有副本上并行执行搜索。

总而言之,每个索引可以分割成多个分片。索引也可以零次(意味着没有副本)或多次复制。复制后,每个索引将具有主分片(从中复制的原始分片)和副本分片(主分片的副本)。

可以在创建索引时为每个索引定义分片和副本的数量。创建索引后,您还可以随时动态更改副本的数量。您可以使用收缩和拆分API更改现有索引的分片数量,建议在创建索引时就考虑好分片和副本的数量。

默认情况下,ElasticSearch中的每个索引都分配一个主分片和一个副本,这意味着如果集群中至少有两个节点,则索引将有一个主分片和另一个副本分片(一个完整副本),每个索引总共有两个分片。

3 linux ELK的安装

高版本还是低版本elasticssearch,都不要使用root用户安装和启动,使用root用户启动是极不好的习惯。

注意从elasticssearch7.0开始,它会自动检测,若roott用户启动会提示失败。

3.1 规划

  1. elasticsearch的版本几个月就升一个大版本号,版本号变得太快。 实际上高版本大同小异。这里以6.8.3为例。ELK三件套的版本号和filebeat的版本号应该完全一致,避免兼容性问题。
  2. 确保Linux已经安装了JDK(含JVM),推荐使64bit的的 1.8.0_131或更高的版本JVM。
  3. 由于ELK三件套通常安装在一起(同一台机器上),因此我们先建立一个elk文件夹,在elk文件夹下分别有三个子目录放不同的软件,结构如下:

elk
∟ elasticsearch-6.8.3

∟ kibana-6.8.3-linux-x86_64

∟ logstash-6.8.3

3.2 操作系统调整

elasticsearch对操作系统配置有要求,不然启动时会报错。

  • 操作系统默认的max_map_count[65530]太低,至少增加到[262144]。使用root用户vim /etc/sysctl.conf 文件中增加以下配置
vm.max_map_count=262145

然后root用户执行:sysctl -p 使配置生效

  • 最大文件描述符[4096]对于elasticsearch进程可能太低,至少增加到[65535] 使用root用户vim /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
* soft nproc 4096
* hard nproc 4096

修改后,重新登录通常即可生效,可是使用ulimit -a 查看当前值

  • 注意防火墙。需要配置防火墙端口,或者关闭防火墙。

3.2 elasticsearch安装

  1. (非root用户)登录linux,下载最新的elasticsearch包 下载地址https://www.elastic.co/cn/downloads/elasticsearch 。然后解压即可

    cd /home/zyplanke/elk
    curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.8.3.tar.gz
    tar -xvf elasticsearch-6.8.3.tar.gz
    
  2. 配置elasticsearch的配置。编辑vim config/elasticsearch.yml

    cluster.name: mycluster     # 集群名,所有节点node都应配置相同的集群名
    node.name: node1   # 本节点名,同一集群下不同的node名字不能重复
    network.host: 0.0.0.0  # 本节点监听本地IP,全零为本地所有网卡
    http.port: 9200  # http 协议的端口
    transport.tcp.port: 9301   # 集群内节点之间的通信端口。
    path.data: /elasticsearch/data  # 数据存放的路径(目录需要提前创建好,确保有权限)
    path.logs: /elasticsearch/logs  # 日志存放的路径(目录需要提前创建好,确保有权限)
    
  3. 调整elasticsearch使用的jvm内存大小(可不调整,可选步骤) vim config/jvm.options

    -Xms1g
    -Xmx1g
    
  4. elasticsearch使用了log4j2作为日志配置,如需要可调整日志配置(可选步骤)vim config/log4j2.properties

  5. 进入解压后的 elasticsearch文件夹的bin目录下 执行./elasticsearch 启动

  6. 启动后,可以通过浏览器访问http://192.168.43.201:9200/,正常结果如下,表明elasticsearch启动成功。

在这里插入图片描述

3.3 浏览器插件elasticsearch-head(可选)

这时一款chrome浏览器的插件,可以图形化监视和管理elasticsearch。需要在google应用商店下载插件安装(需翻墙):
在这里插入图片描述

3.4 kibana安装

  1. (非root用户)登录linux,下载最新的kibana包 下载地址

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值