• 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格式)

    采菊东篱下,悠闲现南山~
  • 相关阅读:
    [LeetCode] Substring with Concatenation of All Words 解题报告
    [LeetCode] Symmetric Tree 解题报告
    [LeetCode] Unique Paths II 解题报告
    [LeetCode] Triangle 解题报告
    [LeetCode] Trapping Rain Water 解题报告
    [LeetCode] Text Justification 解题报告
    [LeetCode] Valid Sudoku 解题报告
    [LeetCode] Valid Parentheses 解题报告
    C++文件的批处理
    C++中两个类中互相包含对方对象的指针问题
  • 原文地址:https://www.cnblogs.com/ChaosJu/p/5370916.html
Copyright © 2020-2023  润新知