【分布式搜索引擎】Elasticsearch分布式架构原理

时间:2022-09-03 20:38:40

一、相关概念介绍

1)集群(cluster)

  一个集群(cluster)由一个或多个节点组成。

  这些节点具有相同的cluster.name,它们协同工作,分享数据和负载。当加入新的节点或者删除一个节点时,集群就会感知到并平衡数据。

2)节点(node)

  一个节点(node)就是一个Elasticsearch实例。

  集群中一个节点会被选举为主节点(master),它将临时管理集群级别的一些变更,例如新建或删除索引、增加或移除节点等。主节点不参与文档级别的变更或搜索,这意味着在流量增长的时候,该主节点不会成为集群的瓶颈。任何节点都可以成为主节点。我们例子中的集群只有一个节点,所以它会充当主节点的角色。

  做为用户,我们能够与集群中的任何节点通信,包括主节点。每一个节点都知道文档存在于哪个节点上,它们可以转发请求到相应的节点上。我们访问的节点负责收集各节点返回的数据,最后一起返回给客户端。这一切都由Elasticsearch处理。

3)分片(shards)

  一个分片(shard)是一个最小级别“工作单元(worker unit)”,它只是保存了索引中所有数据的一部分。

  分片就是一个Lucene实例,并且它本身就是一个完整的搜索引擎。我们的文档存储在分片中,并且在分片中被索引,但是我们的应用程序不会直接与它们通信,取而代之的是,直接与索引通信。

  分片是Elasticsearch在集群中分发数据的关键。把分片想象成数据的容器。文档存储在分片中,然后分片分配到你集群中的节点上。当你的集群扩容或缩小,Elasticsearch将会自动在你的节点间迁移分片,以使集群保持平衡。

  分片可以是主分片(primary shard)或者是复制分片(replica shard)。当索引创建完成的时候,主分片的数量就固定了,但是复制分片的数量可以随时调整。

1.主要分片(primary shard):

  你索引中的每个文档属于一个单独的主分片,所以主分片的数量决定了索引最多能存储多少数据。

2.复制分片(replica shard):

  复制分片只是主分片的一个副本,它可以防止硬件故障导致的数据丢失,同时可以提供读请求,比如搜索或者从别的shard取回文档。

4)集群健康(cluster health)

  在Elasticsearch集群中可以监控统计很多信息,但是只有一个是最重要的:集群健康(cluster health)。集群健康有三种状态:green、yellow或red。

在一个没有索引的空集群中运行如下查询:

GET /_cluster/health

将返回这些信息:  

{
"cluster_name": "elasticsearch",
"status": "green", <1>
"timed_out": false,
"number_of_nodes": 1,
"number_of_data_nodes": 1,
"active_primary_shards": 0,
"active_shards": 0,
"relocating_shards": 0,
"initializing_shards": 0,
"unassigned_shards": 0
}
  • <1> status 是我们最感兴趣的字段

status字段提供一个综合的指标来表示集群的的服务状况。三种颜色各自的含义:

颜色 意义
green 所有主要分片和复制分片都可用
yellow 所有主要分片可用,但不是所有复制分片都可用
red 不是所有的主要分片都可用

二、Elasticsearch分布式架构原理

  Elasticsearch设计的理念就是分布式搜索引擎,底层其实还是基于lucene的。

  核心思想就是在多台机器上启动多个es进程实例,组成了一个es集群。

es中存储数据的基本单位是Types.

Relational DB -> Databases -> Tables -> Rows -> Columns
Elasticsearch -> Indices -> Types -> Documents -> Fields

  好比说,有一个Types,是订单Types,里面专门是放订单数据的。就好比说你在mysql中建表,有些订单是实物商品的订单,就好比说一件衣服,一双鞋子;有些订单是虚拟商品的订单,就好比说游戏点卡,话费充值。就两种订单大部分字段是一样的,但是少部分字段可能有略微的一些差别。

  所以就会在index里,建两个type,一个是实物商品订单type,一个是虚拟商品订单type,这两个type大部分字段是一样的,少部分字段是不一样的。

  具体的每个type代表了具体的一个mysql中的表,每个type有一个mapping,mapping就是这个type的表结构定义,你在mysql中创建一个表,肯定是要定义表结构的,里面有哪些字段,每个字段是什么类型。。。

  mapping就代表了这个type的表结构的定义,定义了这个type中每个字段名称,字段是什么类型的,然后还有这个字段的各种配置

  实际上你往index里的一个type里面写的一条数据,叫做一条document,一条document就代表了mysql中某个表里的一行,每个document有多个field,每个field就代表了这个document中的一个字段的值

  接着你搞一个索引,这个索引可以拆分成多个shard,每个shard存储部分数据。

  接着就是这个shard的数据实际是有多个备份,就是说每个shard都有一个primary shard,负责写入数据,但是还有几个replica shard。primary shard写入数据之后,会将数据同步到其他几个replica shard上去。

  通过这个replica的方案,每个shard的数据都有多个备份,如果某个机器宕机了,没关系啊,还有别的数据副本在别的机器上呢。高可用了吧。

  es集群多个节点,会自动选举一个节点为master节点,这个master节点其实就是干一些管理的工作的,比如维护索引元数据拉,负责切换primary shard和replica shard身份拉,之类的。

  要是master节点宕机了,那么会重新选举一个节点为master节点。

  如果是非master节点宕机了,那么会由master节点,让那个宕机节点上的primary shard的身份转移到其他机器上的replica shard。急着你要是修复了那个宕机机器,重启了之后,master节点会控制将缺失的replica shard分配过去,同步后续修改的数据之类的,让集群恢复正常。

其实上述就是elasticsearch作为一个分布式搜索引擎最基本的一个架构设计.

  

aaarticlea/png;base64,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VzNmzJAkJSYmavbs2Zo+fbq++uore2eOkuwjL+zYsaPcEy/Tp0/XgQMHtHLlSn322WfKyMjQ3Llzy9Xrhx9+0Pr16/Xoo49WW/c1a9ZowYIF+vLLLxUQEKBp06bZl7300kvatm2bXn31VX333XeaOXOm1q5dq3feece+zpQpU5SVlaVPP/1U77//fqXHv2tTz7L27dunbt26Vbt8zpw56t27t3r37q3rrrtOMTEx9umKP3PmzLF3XrZlyxZJ0ooVK5STk1Pt/i/Uf/7zH3l6euovf/mLlixZIrPZfM5tTCaTVq1apVWrVsnNzU2S5OXlJWdnZ50+fVoFBQVKTExUWFiYJOm5556Tp6dnuXfft2/frm+//bbSz+rVq2ssOzw8XPv27buIIwYaH9pqx7XV48aN06pVq7R+/XpFRkbqp59+0qeffqpVq1ZJkr1D4ptvvlm33367FixYUO2+nn32Wf3www/atm2bfV5V/WeURRvXsBDCmwhnZ+caeyTv27dvjR2dAUBduueee2QymXTzzTfr9OnTGjVqlEwmk2666SYdP37c/tf8fv36KSwsTIcOHZKXl5eSkpLsf803GAw6efKkTCaTwsPDaywvIyNDn3/+uSZMmCB/f3/5+PhoxIgR+uqrr8qtN3LkSHl6elZ7J0M609+En5+fvL29de+99+r3339XaWmpMjMz9dlnn+nZZ59Vp06d5OzsrMjISD366KP2p3lOnz6tb775Rk899ZT8/Pzk5+enhx566LzrWVZqaqpat25d7XJbyNy+fbtuueUWTZ48ucoQavvx8vJSUVGRdu7cKW9vb5WUlGjkyJHKzMys098TJpNJDz/8sJYvX66CggINHz7cfrFZHdud8Lvvvtt+J1w68yilLVxfe+219leaXF1d9eSTT2ry5Mn2dQcNGqT+/ftX+rnvvvtqLLt169ZKT0+/iCMGGh/aase11WV988035aatVqvWrVundevWKS8vT+vWrSt3h9zWjtn6ujAajRo2bJhmzJihlJQUSWfuhNcUwmnjGhYeR29CBgwYoE8//bTaZQDgKLZOaWw9ufr5+UmS/e5mSUmJnJyc9Prrr+vTTz9VZGSkfVlpaan8/f01bdo0zZ8/Xx988IEmTpyoqKioass7efKkrFarhg8fXmlZUVGR/XNQUNA5696yZUv752bNmslqtaq4uFjJycmy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mIQTERERERER+QmTcCIiIiIiIiI/YRJORERERERE5CdMwomIiIiIiIj8hEk4ERERERERkZ8wCSciIiIiIiLyEybhRERERERERH7CJJyIiIiIiIjIT5iEExEREREREfkJk3AiIiIiIiIiP2ESTkREREREROQnTMKJiIiIiIiI/IRJOBEREREREZGfMAknIiIiIiIi8hMm4URERERERER+wiSciIiIiIiIyE+YhBMRERERERH5CZNwIiIiIiIiIj9hEk5ERERERETkJ0zCiYiIiIiIiPyESTgRERERERGRnzAJJyIiIiIiIvITJuFEREREREREfsIknIiIiIiIiMhPmIQTERERERER+QmTcCIiIiIiIiI/YRJORERERERE5CdMwomIiIiIiIj8hEk4ERERERERkZ8wCSciIiIiIiLyEybhRERERERERH7CJJyIiIiIiIjIT5iEExEREREREfkJk3AiIiIiIiIiP2ESTkREREREROQnTMKJiIiIiIiI/IRJOBEREREREZGfMAknmoYiIiKWABACgEql+rFSqbxu2CKixMTER32VzcjIeBfDYoNGo3l7+DQiIiIiIjp/oYGuABGNLDExcY1arf7l+ZQ5fPiwJLc0uSAAABfOSURBVDMzc2tJSUk4ALPL5TKkpaVtLi0tnQ2ge3AxUXx8/COnT59+dHj5qKioH9TW1i71njaY1N82zt0YM6lUOm/WrFn7S0pKwqVSaaRGo/msrKwsB4BzMtaflZX1v2azeU9ra+sz46hb8mTXh4iIiIhmHibhRFPY6dOnV50+fXrVKItF6nS6zpKSEoGvmZ2dnTujo6N/kZKS8ofGxsafj7IuocvlcgBweU0TCAQCIfyceFqt1qaysrLsyVqfWCzOVigUl1VXVy+bCvUhIiIiopmJ3UuJZoDm5uZVYrE4F0DY4CSxy+Wy+1hU4nK5eodNk2IgKfeZ5AcLtVr9nx0dHW8C6Ax0XYiIiIho5mISThQECgoKDPn5+U3uR0FBgeF8ylut1oPV1dVXAugDAIlEonA4HGYfiyqcTqfVe4JMJosEECKRSDK8p0ul0nk6nc6lUql+XFBQYEhOTn5ucJYkJSVlY0FBQfvcuXPNg/8nj/Auo1Qqr509e3Z5YWFhb1ZW1kcAYoZXxL0sAMXgpJD4+Phfa7XaU4WFhfb8/PxGmUxWBAByufzKWbNm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" alt="" />

【分布式搜索引擎】Elasticsearch分布式架构原理的更多相关文章

  1. 分布式搜索引擎Elasticsearch在CentOS7中的安装

    1. 概述 随着企业业务量的不断增大,业务数据随之增加,传统的基于关系型数据库的搜索已经不能满足需要. 在关系型数据库中搜索,只能支持简单的关键字搜索,做不到分词和统计的功能,而且当单表数据量到达上百 ...

  2. 分布式搜索引擎Elasticsearch的简单使用

    官方网址:https://www.elastic.co/products/elasticsearch/ 一.特性 1.支持中文分词 2.支持多种数据源的全文检索引擎 3.分布式 4.基于lucene的 ...

  3. ElasticSearch logo 分布式搜索引擎 ElasticSearch

    原文来自:http://www.oschina.net/p/elasticsearch Elastic Search 是一个基于Lucene构建的开源,分布式,RESTful搜索引擎.设计用于云计算中 ...

  4. 快速掌握分布式搜索引擎ElasticSearch(一)

    前言 由于最近在项目中接触使用到了ElasticSearch,从本篇博客开始将给大家分享这款风靡全球的产品.将涉及到ElasticSearch的安装.基础概念.基本用法.高级查询.中文分词器.与Spr ...

  5. 分布式搜索引擎Elasticsearch的查询与过滤

    一.写入 先来一个简单的官方例子,插入的参数为-XPUT,插入一条记录. curl -XPUT 'http://localhost:9200/test/users/1' -d '{ "use ...

  6. 002&lowbar;分布式搜索引擎Elasticsearch的查询与过滤

    一.写入 先来一个简单的官方例子,插入的参数为-XPUT,插入一条记录. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 curl -XPUT 'http:/ ...

  7. 分布式搜索引擎Elasticsearch性能优化与配置

    1.内存优化 在bin/elasticsearch.in.sh中进行配置 修改配置项为尽量大的内存: ES_MIN_MEM=8g ES_MAX_MEM=8g 两者最好改成一样的,否则容易引发长时间GC ...

  8. 分布式搜索引擎ElasticSearch&plus;Kibana &lpar;Marvel插件安装详解&rpar;

    在安装插件的过程中,尤其是安装Marvel插件遇到了很多问题,要下载license.Marvel-agent,又要下载安装Kibana 版本需求 Java 7 or later Elasticsear ...

  9. 分布式搜索引擎Elasticsearch PHP类封装 使用原生api

    //官方的 php  api写的鸡肋了,下面这个类可以使用 es api 操作. <?php class ElasticSearch { public $index; function __co ...

  10. Elasticsearch的架构原理剖析

    Elasticsearch 是最近两年异军突起的一个兼有搜索引擎和NoSQL数据库功能的开源系统,基于Java/Lucene构建.Elasticsearch 看名字就能大概了解下它是一个弹性的搜索引擎 ...

随机推荐

  1. 突击战UVa11729Commando War

    https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=117&page= ...

  2. Redis 常用链接

    安装部署 http://www.linuxidc.com/Linux/2014-05/101979.htm 更改访问权限配置(如密码,可访问地址):http://www.jb51.net/articl ...

  3. 迷信AgainAndAgain

    又重新在VBox中安装Debian其它镜像两次,依然在安装桌面软件包时挂掉...

  4. Ubuntu could not write bytes broken pipe

    一.环境变量问题 1 到登录界面的时候,进入命令行模式: alt+ctrl+F1 2 登录 3 修改环境变量(当我输入ls的时候  竟然没有找到命令,然后果断的知道是环境变量的事情,于是改之!) 4 ...

  5. Lotto

    Lotto Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submiss ...

  6. 535种使用JavaScript重新加载页面的方法

    除了location = location之外还有534中方法重新加载页面 location = location location = location.href location = window ...

  7. 解剖 CPU

    http://www.ruanyifeng.com/blog/2010/11/cpu_autopsy.html 有一个瑞典 Lund 大学物理学博士生,就真的这么干了,还把照片放到网上.我们知道,CP ...

  8. MySQL测试工具之-tpcc

    首先安装tpcc 官网地址:https://github.com/Percona-Lab/tpcc-mysql [root@test3 src]# unzip tpcc-mysql-master.zi ...

  9. Solaris10 如何设置空闲ssh连接超时断开

    在ssh的配置文件中有2个参数可以控制空闲连接超时断开.这2个参数是ClientAliveCountMax和ClientAliveInterval. Solaris10上设置空闲ssh连接超时断开的方 ...

  10. &period;net函数

    Math.Ceiling() Math.Floor() == 向上取整,向下取整 Regex.Split(productListControl.Text, "\n", RegexO ...