elasticsearch概述

一、简介

  Elasticsearch是一个分布式的、可伸缩的、实时搜索分析引擎,简称ES。Elasticsearch、Logstash、Kibana构成ELK stack,从数据采集到数据分析处理以及最后的数据可视化,为很多数据场景提供了稳定的解决方案。

图1:es是什么?

  现今有很多公司采用elasticseach,并且ES在很多方便的表现优于solar。

    • Github:“GitHub使用ElasticSearch搜索20TB的数据,包括13亿文件和1300亿行代码”。

    • SoundCloud:“SoundCloud使用ElasticSearch为1.8亿用户提供即时而精准的音乐搜索服务”。

    • 百 度:百度目前广泛使用ElasticSearch作为文本数据分析,采集百度所有服务器上的各类指标数据及用户自定义数据,通过对各种数据进行多维分析展 示,辅助定位分析实例异常或业务层面异常。目前覆盖百度内部20多个业务线(包括casio、云分析、网盟、预测、文库、直达号、钱包、风控等),单集群 最大100台机器,200个ES节点,每天导入30TB+数据。

    • sina:新浪的广告业务日志,标签数据,以及集群metrics数据存储在es中,提供检索及分析服务
面向搜索(for full text search) 面向分析 (for analytics)
Wikipedia Goldman Sachs 
Github Ubnt
Quora Foursquare (LBS)
Facebook Linkedin
Baidu Netflix
Sina Baidu

二、概念 

Cluster和Node

  ES可以以单点或者集群方式运行,以一个整体对外提供search服务的所有节点组成cluster,组成这个cluster的各个节点叫做node。

  集群就是一个或多个节点存储数据,并提供跨节点的联合索引和搜索的功能。集群有一个唯一性标示的名字,默认是elasticsearch,集群名字很重要,每个节点是基于集群名字加入到其集群中的。因此,确保在不同环境中使用不同的集群名字。

  一个集群可以只有一个节点。强烈建议在配置elasticsearch时,配置成集群模式。

  节点就是一台单一的服务器,是集群的一部分,存储数据并参与集群的索引和搜索功能。像集群一样,节点也是通过名字来标识,默认是在节点启动时随机分配的字符名。当然啦,你可以自己定义。该名字也蛮重要的,在集群中用于识别服务器对应的节点。

  节点可以通过指定集群名字来加入到集群中。默认情况下,每个节点被设置成加入到elasticsearch集群。如果启动了多个节点,假设能自动发现对方,他们将会自动组建一个名为elasticsearch的集群。

Index

  索引是有几分相似属性的一系列文档的集合。如nginx日志索引、syslog索引等等。索引是由名字标识,名字必须全部小写。这个名字用来进行索引、搜索、更新和删除文档的操作。

  索引相对于关系型数据库的库。

Type

  在一个索引中,可以定义一个或多个类型。类型是一个逻辑类别还是分区完全取决于你。通常情况下,一个类型被定于成具有一组共同字段的文档。如ttlsa运维生成时间所有的数据存入在一个单一的名为logstash-ttlsa的索引中,同时,定义了用户数据类型,帖子数据类型和评论类型。

  类型相对于关系型数据库的表。

Documents

  文档是信息的基本单元,可以被索引的。文档是以JSON格式表现的。在类型中,可以根据需求存储多个文档。

  虽然一个文档在物理上位于一个索引,实际上一个文档必须在一个索引内被索引和分配一个类型。

  文档相对于关系型数据库的列。

Shards

   索引分片,这是ES提供分布式搜索的基础,其含义为将一个完整的index分成若干部分存储在相同或不同的节点上,这些组成index的部分就叫做shard。

   在实际情况下,索引存储的数据可能超过单个节点的硬件限制。如一个十亿文档需1TB空间可能不适合存储在单个节点的磁盘上,或者从单个节点搜索请求太慢了。为了解决这个问题,elasticsearch提供将索引分成多个分片的功能。当在创建索引时,可以定义想要分片的数量。每一个分片就是一个全功能的独立的索引,可以位于集群中任何节点上。

分片的两个最主要原因:

  1. 水平分割扩展,增大存储量
  2. 分布式并行跨分片操作,提高性能和吞吐量

Replicas

  索引副本,ES可以设置多个索引的副本,副本的作用一是提高系统的容错性,当个某个节点某个分片损坏或丢失时可以从副本中恢复。二是提高ES的查询效率,ES会自动对搜索请求进行负载均衡。

  在实际情况下,索引存储的数据可能超过单个节点的硬件限制。如一个十亿文档需1TB空间可能不适合存储在单个节点的磁盘上,或者从单个节点搜索请求太慢了。为了解决这个问题,elasticsearch提供将索引分成多个分片的功能。当在创建索引时,可以定义想要分片的数量。每一个分片就是一个全功能的独立的索引,可以位于集群中任何节点上。

  分片的两个最主要原因:

  1. 水平分割扩展,增大存储量
  2. 分布式并行跨分片操作,提高性能和吞吐量

Recovery

     代表数据恢复或叫数据重新分布,ES在有节点加入或退出时会根据机器的负载对索引分片进行重新分配,挂掉的节点重新启动时也会进行数据恢复。

Gateway

    ES索引快照的存储方式,ES默认是先把索引存放到内存中,当内存满了时再持久化到本地硬盘。gateway对索引快照进行存储,当这个ES集群关闭再重新启动时就会从gateway中读取索引备份数据。

Discovery.zen

     代表ES的自动发现节点机制,ES是一个基于p2p的系统,它先通过广播寻找存在的节点,再通过多播协议来进行节点之间的通信,同时也支持点对点的交互。

Transport

    代表ES内部节点或集群与客户端的交互方式,默认内部是使用tcp协议进行交互,同时它支持http协议(json格式)

posted @ 2016-04-09 10:20  败八  阅读(1127)  评论(0编辑  收藏  举报