分布式ElasticSearch简单介绍

这里我们解释一些通用的术语,比如集群(cluster)、节点(node)和分片(shard)。Elasticsearch的扩展机制,以及它怎样处理硬件故障。在此将探索怎样创建你的集群(cluster)、节点(node)和分片(shards),使其依照你的需求进行扩展。并保证在硬件故障时数据依然安全。

一个节点(node)就是一个Elasticsearch实例,而一个集群(cluster)由一个或多个节点组成,它们具有同样的cluster.name。它们协同工作,分享数据和负载。

当增加新的节点或者删除一个节点时,集群就会感知到并平衡数据。

集群中一个节点会被选举为主节点(master),它将暂时管理集群级别的一些变更,比如新建或删除索引、添加或移除节点等。主节点不參与文档级别的变更或搜索,这意味着在流量增长的时候。该主节点不会成为集群的瓶颈。不论什么节点都能够成为主节点。我们样例中的集群仅仅有一个节点,所以它会充当主节点的角色。

做为用户。我们可以与集群中的不论什么节点通信。包含主节点。每个节点都知道文档存在于哪个节点上,它们可以转发请求到对应的节点上。我们訪问的节点负责收集各节点返回的数据。最后一起返回给client。

这一切都由Elasticsearch处理。

集群健康

在Elasticsearch集群中能够监控统计非常多信息。可是仅仅有一个是最重要的:集群健康(cluster health)。集群健康有三种状态:greenyellowred

GET /_cluster/health

在我这里能够看到:

{

"cluster_name": "elasticsearch",

"status": "yellow",

"timed_out": false,

"number_of_nodes": 1,

"number_of_data_nodes": 1,

"active_primary_shards": 10,

"active_shards": 10,

"relocating_shards": 0,

"initializing_shards": 0,

"unassigned_shards": 10,

"number_of_pending_tasks": 0,

"number_of_in_flight_fetch": 0

}

status字段提供一个综合的指标来表示集群的的服务状况。

三种颜色各自的含义:

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

在接下来将说明什么是主要分片(primary shard)和复制分片(replica shard),并说明这些颜色(状态)在实际环境中的意义。

为了将数据加入到Elasticsearch。我们须要索引(index)——一个存储关联数据的地方。

实际上。索引仅仅是一个用来指向一个或多个分片(shards)的“逻辑命名空间(logical
namespace)”.

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

在接下来的《深入分片》一章。我们将具体说明分片的工作原理,可是如今我们仅仅要知道分片就是一个Lucene实例,而且它本身就是一个完整的搜索引擎。

我们的文档存储在分片中。而且在分片中被索引,可是我们的应用程序不会直接与它们通信,取而代之的是,直接与索引通信。

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

分片能够是主分片(primary shard)或者是复制分片(replica shard)。你索引中的每一个文档属于一个单独的主分片,所以主分片的数量决定了索引最多能存储多少数据。

理论上主分片能存储的数据大小是没有限制的,限制取决于你实际的使用情况。分片的最大容量全然取决于你的使用状况:硬件存储的大小、文档的大小和复杂度、怎样索引和查询你的文档,以及你期望的响应时间。

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

当索引创建完毕的时候。主分片的数量就固定了,可是复制分片的数量能够随时调整。

集群的健康状态yellow表示全部的主分片(primary shards)启动而且正常执行了——集群已经能够正常处理不论什么请求——可是复制分片(replica shards)还没有全部可用。

其实全部的三个复制分片如今都是unassigned状态——它们还未被分配给节点。在同一个节点上保存同样的数据副本是没有必要的,假设这个节点故障了,那全部的数据副本也会丢失。

如今我们的集群已经功能完备,可是依然存在因硬件故障而导致数据丢失的风险。

在单一节点上执行意味着有单点故障的风险——没有数据备份。

幸运的是,要防止单点故障。我们唯一须要做的就是启动还有一个节点。文档的索引将首先被存储在主分片中,然后并发拷贝到相应的复制节点上。

这能够确保我们的数据在主节点和复制节点上都能够被检索。

这样以来我们的集群不仅是功能完备的,并且是高可用的。

随着应用需求的增长,我们该怎样扩展?假设我们启动第三个节点,我们的集群会又一次组织自己。

分片本身就是一个完整的搜索引擎。它能够使用单一节点的全部资源。

假设我们拥有6个分片(3个主分片和三个复制分片),最多能够扩展到6个节点,每一个节点上有一个分片,每一个分片能够100%使用这个节点的资源。

时间: 2024-10-31 21:15:39

分布式ElasticSearch简单介绍的相关文章

Elasticsearch系统学习(一)-elasticsearch简单介绍和核心概念

一.ES简单介绍 1.1.es功能 (1)分布式的搜索引擎和数据分析引擎 搜索:百度,网站的站内搜索,IT系统的检索 数据分析:电商网站,最近7天牙膏这种商品销量排名前10的商家有哪些:新闻网站,最近1个月访问量排名前3的新闻版块是哪些 分布式,搜索,数据分析 (2)全文检索,结构化检索,数据分析 全文检索:我想搜索商品名称包含牙膏的商品,select * from products where product_name like "%牙膏%" 结构化检索:我想搜索商品分类为日化用品的

Elasticsearch简单介绍

如何对站内的数据进行检索? ElasticSearch是比较著名的一个分布式检索解决方案.传统的数据库例如mysql,oracle等,对一个关键词进行检索通常都是采用like的匹配,对性能或者数据量的限制很大.面对上亿,上百亿的数据进行检索时,传统数据库显得力不从心,因此ElasticSearch变成一个不错的选择. ES工作原理 当ElasticSearch的节点启动后,它会利用多播(multicast)(或者单播,如果用户更改了配置)寻找集群中的其它节点,并与之建立连接.这个过程如下图所示:

Elasticsearch - 简单介绍

Elasticsearch 简介 1. 什么是 Elasticsearch ElasticSearch 是一个基于 Lucene 的搜索服务器. 它了一个分布式多 用户能力的全文搜索引擎,能够达到实时.稳定.可靠.快速搜索. 也可以看做 是布式的实时文件存储,每个字段都能被索引并可被搜索. 目前大多数公司把 elasticsearch 作为 elk 日志系统中日志数据储存和实时 搜索工具. 这一部分用户,他们注重的是数据的实时写入,在大量日志数据产生 时,不堆积. 另一部分公司,把 elasti

ElasticSearch 入门介绍

tags: 第三方 lucene [toc] 1. what Elastic Search(ES)是什么 全文检索和lucene 全文检索 优点:高效,准确,分词全文检索允许用户输入一些关键字,从数据层中查找到所需要的信息 全文检索和数据库"LIKE"语句相比,远比数据库的开销小,因为检索过程全部从通过检索文件完成,因此效率非常高. 在全文检索领域,用户输入的搜索信息叫做关键字,而全文检索系统把海量信息按照这些关 键字进行结构化处理,把文章打散成段落.文字,最后,按关键字对文章的数据进

Python常用的库简单介绍一下

Python常用的库简单介绍一下fuzzywuzzy ,字符串模糊匹配. esmre ,正则表达式的加速器. colorama 主要用来给文本添加各种颜色,并且非常简单易用. Prettytable 主要用于在终端或浏览器端构建格式化的输出. difflib ,[Python]标准库,计算文本差异 . Levenshtein ,快速计算字符串相似度. Chardet 字符编码探测器,可以自动检测文本.网页.xml的编码. shortuuid ,一组简洁URL/UUID函数库. ftfy ,Uni

Zookeeper简单介绍

转自:ZooKeeper学习第一期---Zookeeper简单介绍 一.分布式协调技术 在给大家介绍ZooKeeper之前先来给大家介绍一种技术--分布式协调技术.那么什么是分布式协调技术?那么我来告诉大家,其实分布式协调技术 主要用来解决分布式环境当中多个进程之间的同步控制,让他们有序的去访问某种临界资源,防止造成"脏数据"的后果.这时,有人可能会说这个简单,写一个调 度算法就轻松解决了.说这句话的人,可能对分布式系统不是很了解,所以才会出现这种误解.如果这些进程全部是跑在一台机上的

EQueue - 一个纯C#写的分布式消息队列介绍2

一年前,当我第一次开发完EQueue后,写过一篇文章介绍了其整体架构,做这个框架的背景,以及架构中的所有基本概念.通过那篇文章,大家可以对EQueue有一个基本的了解.经过了1年多的完善,EQueue无论是功能上还是成熟性上都完善了不少.所以,希望再写一篇文章,介绍一下EQueue的整体架构和关键特性. EQueue架构 EQueue是一个分布式的.轻量级.高性能.具有一定可靠性,纯C#编写的消息队列,支持消费者集群消费模式. 主要包括三个部分:producer, broker, consume

MPI编程简单介绍

第三章MPI编程 3.1 MPI简单介绍 多线程是一种便捷的模型,当中每一个线程都能够訪问其他线程的存储空间.因此,这样的模型仅仅能在共享存储系统之间移植.一般来讲,并行机不一定在各处理器之间共享存储,当面向非共享存储系统开发并行程序时,程序的各部分之间通过来回传递消息的方式通信.要使得消息传递方式可移植,就须要採用标准的消息传递库.这就促成的消息传递接口(Message Passing Interface, MPI)的面世,MPI是一种被广泛採用的消息传递标准[1]. 与OpenMP并行程序不

漫游Kafka入门篇之简单介绍

原文地址:http://blog.csdn.net/honglei915/article/details/37564521 介绍 Kafka是一个分布式的.可分区的.可复制的消息系统.它提供了普通消息系统的功能,但具有自己独特的设计.这个独特的设计是什么样的呢? 首先让我们看几个基本的消息系统术语: Kafka将消息以topic为单位进行归纳. 将向Kafka topic发布消息的程序成为producers. 将预订topics并消费消息的程序成为consumer. Kafka以集群的方式运行,