[Elasticsearch] 集群的工作原理 - 第一部分

本文翻译自Elasticsearch官方指南的life
inside a cluster
一章。

ES就是为高可用和可扩展而生的。

扩展能够通过购置性能更强的server(垂直扩展或者向上扩展,Vertical Scale/Scaling Up),亦或是通过购置很多其它的server(水平扩展或者向外扩展,Horizontal Scale/Scaling Out)来完毕。

虽然ES可以利用更强劲的硬件。垂直扩展毕竟还是有它的极限。真正的可扩展性来自于水平扩展 - 通过向集群中加入很多其它的节点来分布负载,添加可靠性。

在大多数数据库中,水平扩展通常都须要你相应用进行一次大的重构来利用很多其它的节点。相反。ES天生就是分布式的:它知道怎样管理多个节点来完毕扩展和实现高可用性。

这也意味着你的应用不须要在乎这一点。

在本章中,我们会介绍怎样建立集群(Cluster),节点(Node)和分片(Shard)来依据你的需求完毕扩展,同一时候也可以保证即使发生硬件故障你的数据也会安然无恙。

一个空的集群

假设我们启动了一个没有不论什么数据和索引的节点(Node),我们的集群(Cluster)看起来就像以下这样:

一个节点会执行一个ES的实例。而一个集群则会包括拥有同样cluster.name的一个或者多个节点。这些节点共同工作来完毕数据共享和负载分担。

随着节点被加入到集群,或者从集群中被删除,集群会通过自身调节来将数据均匀分布。

集群中的一个节点会被选为主节点(Master Node)。它负责管理整个集群的变化。如创建或者删除一个索引(Index)。向集群中加入或者删除节点。主节点并不须要參与到文档级别的变化或者搜索中,这意味着尽管仅仅有一个主节点,但它并不会随着流量的添加而成为瓶颈。

不论什么节点都能够成为主节点。

在我们的样例中仅仅有一个节点,所以它就承担了主节点的功能。

对于用户,可以和集群中的随意节点进行通信,包含主节点。每一个节点都知道每份文档的存放位置,而且可以将请求转发到持有所需数据的节点。

用户通信的节点会负责将须要的数据从各个节点收集起来,然后返回给用户。以上整个过程都会由ES透明地进行管理。

集群健康指标(Cluster Health)

在一个ES集群中。有非常多能够被监測的统计数据,可是当中最重要的是集群健康指标。它会以green,yellow和red来报告集群的健康状态。

# Retrieve the cluster health
GET /_cluster/health

当集群中没有不论什么索引时。它会返回例如以下信息:

{
   "cluster_name": "elasticsearch",
   "status": "green",
   "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
}

status字段提供的值反应了集群总体的健康程度。

它的值的意义例如以下:

  • green:全部的主分片(Primary Shard)和副本分片(Replica Shard)都处于活动状态
  • yellow:全部的主分片都处于活动状态,可是并非全部的副本分片都处于活跃状态
  • red:不是全部的主分片都处于活动状态

在本章剩下的部分中,我们会解释什么是主分片和副本分片,以及以上的几种颜色状态信息所带来的实际影响。

加入索引

为了向ES中加入数据,我们须要一个索引(Index) - 它是一个用来存储相关数据的地方。

实际上,一个索引实际上仅仅是一个"逻辑命名空间(Logical Namespace)",用来指向一个或者多个物理分片(Physical Shard)。

一个分片就是底层的"工作单元(Worker Unit)"。它拥有索引中全部数据的一部分。在分片一章中,会对分片的工作方式进行具体说明,可是就如今而言,我们仅仅须要知道一个分片就是一个Lucene的实例,一个分片本身就是一个完整的搜索引擎。

我们的文档会被存储和索引在分片中,可是应用是不会直接和分片进行交互的。相反地,应用和索引进行交互。

ES通过分片将数据分布在集群中。可以将分片想象成数据的容器。文档会被存储在分片中。而分片则会被分配到集群中的节点中。随着集群的扩大和虽小,ES会自己主动地将分片在节点之间进行迁移。以保证集群可以保持一种平衡。

一个分片可以是主分片(Primary Shard)或者副本分片(Replica Shard)。索引中的每份文档都属于一个主分片,所以主分片的数量就决定了你的索引可以存储的最大数据量。

虽然在理论上,一个主分片可以容纳的最大数据量并没有限制,可是在实际生产中这个限制是存在的。

分片的最大空间全然取决于你的用例:硬件条件,文档的大小和复杂度,怎样索引和查询文档。以及期望的响应时间。

一个副本分片则仅仅是一个主分片的拷贝。副本用来提供数据冗余,用来保护数据在发生硬件故障是不会丢失,同一时候也可以处理像搜索和获取文档这种读请求。

主分片的数量在索引建立之初就会被确定下来,而副本分片的数量则能够在不论什么时候被更改。

让我们在当前仅仅有一个节点的集群中创建一个新的blogs索引。默认情况下。索引会拥有5个主分片。可是为了演示,我们会让索引有3个主分片和1个副本分片(每一个主分片都有1个副本分片):

PUT /blogs
{
   "settings" : {
      "number_of_shards" : 3,
      "number_of_replicas" : 1
   }
}

此时我们的集群就变成这样了:

这个时候我们假设检查集群的健康状态,会得到例如以下的结果:

{
   "cluster_name":          "elasticsearch",
   "status":                "yellow",
   "timed_out":             false,
   "number_of_nodes":       1,
   "number_of_data_nodes":  1,
   "active_primary_shards": 3,
   "active_shards":         3,
   "relocating_shards":     0,
   "initializing_shards":   0,
   "unassigned_shards":     3
}

集群的健康状态变成了黄色,同一时候响应中还说明了有3个未被分配的分片。

黄色说明了全部的主分片都正在正常执行,处于活动状态 - 集群如今可以成功处理来自外部的请求 - 可是并非全部的副本分片都处于活动状态。实际上,全部的3个副本分片眼下都处于"未分配"的状态 - 它们不存在于不论什么节点上。这是由于将同样数据的拷贝存放在同一节点上是没有意义的。

假设我们失去了该节点。那么我们会失去全部数据和它们的拷贝。

因此当前我们的集群可以正常工作,仅仅只是抵御不了硬件故障带来的风险。

时间: 2024-08-22 01:52:32

[Elasticsearch] 集群的工作原理 - 第一部分的相关文章

[Elasticsearch] 集群的工作原理 - 第二部分

本文翻译自Elasticsearch官方指南的life inside a cluster一章. 增加故障转移(Failover)功能 只运行一个节点意味着可能存在着单点失败(Single point of failure)的问题 - 因为没有冗余.幸运的是,解决这个问题我们只需要启动另一个节点. 启动第二个节点 为了试验当你添加第二节点时会发生什么,你需要像启动第一个节点那样启动第二个节点(参见运行ES),可以在同一个目录下 - 多个节点能够共享相同的目录. 只要第二个节点也拥有和第一个节点相同

LVS集群之工作原理

  首先我们要了解LVS的工作机制: LVS里Director本身不响应请求,只是接受转发请求到后方,Realservers才是后台真正响应请求. LVS 工作原理基本类似DNAT,又不完全相像,它是一种四层交换,默认情况下通过用户请求的地址和端口来判断用户的请求,从而转发到后台真正提供服务的主机,而判断这种请求的是通过套接字来实现,所以四层就可以实现. 而且这个转发的过程对用户而言是透明的(简单的讲,就是用户访问DR的IP,而DR转发给RSS,而用户不知道这个过程) LVS的工作模式: 1.D

剖析Elasticsearch集群系列第一篇 Elasticsearch的存储模型和读写操作

剖析Elasticsearch集群系列涵盖了当今最流行的分布式搜索引擎Elasticsearch的底层架构和原型实例. 本文是这个系列的第一篇,在本文中,我们将讨论的Elasticsearch的底层存储模型及CRUD(创建.读取.更新和删除)操作的工作原理. Elasticsearch是当今最流行的分布式搜索引擎,GitHub. SalesforceIQ.Netflix等公司将其用于全文检索和分析应用.在Insight,我们用到了Elasticsearch的诸多不同功能,比如: 全文检索 比如找

hbase 学习(十二)集群间备份原理

集群建备份,它是master/slaves结构式的备份,由master推送,这样更容易跟踪现在备份到哪里了,况且region server是都有自己的WAL 和HLog日志,它就像mysql的主从备份结构一样,只有一个日志来跟踪.一个master集群可以向多个slave集群推送,收到推送的集群会覆盖它本地的edits日志. 这个备份操作是异步的,这意味着,有时候他们的连接可能是断开的,master的变化不会马上反应到slave当中.备份个格式在设计上是和mysql的statement-based

elasticsearch集群介绍及优化【转】

elasticsearch用于构建高可用和可扩展的系统.扩展的方式可以是购买更好的服务器(纵向扩展)或者购买更多的服务器(横向扩展),Elasticsearch能从更强大的硬件中获得更好的性能,但是纵向扩展也有一定的局限性.真正的扩展应该是横向的,它通过增加节点来传播负载和增加可靠性.对于大多数数据库而言,横向扩展意味着你的程序将做非常大的改动来利用这些新添加的设备.对比来说,Elasticsearch天生是分布式的:它知道如何管理节点来提供高扩展和高可用.这意味着你的程序不需要关心这些.对于大

手把手教你搭建一个Elasticsearch集群

一.为何要搭建 Elasticsearch 集群 凡事都要讲究个为什么.在搭建集群之前,我们首先先问一句,为什么我们需要搭建集群?它有什么优势呢? (1)高可用性 Elasticsearch 作为一个搜索引擎,我们对它的基本要求就是存储海量数据并且可以在非常短的时间内查询到我们想要的信息.所以第一步我们需要保证的就是 Elasticsearch 的高可用性,什么是高可用性呢?它通常是指,通过设计减少系统不能提供服务的时间.假设系统一直能够提供服务,我们说系统的可用性是 100%.如果系统在某个时

Elasticsearch 集群分配多少分片合理

https://www.jianshu.com/p/297e13045605 Elasticsearch 是一个非常通用的平台,支持各种用户实例,并为组织数据和复制策略提供了极大的灵活性.但是,这种灵活性有时会使我们很难在早期确定如何很好地将数据组织成索引和分片,尤其是不熟悉 Elastic Stack.虽然不一定会在首次启动时引起问题,但随着数据量的增长,它们可能会导致性能问题.群集拥有的数据越多,纠正问题也越困难,因为有时可能需要重新索引大量数据.      因此,当我们遇到性能问题时,往往

手把手教你搭建一个 Elasticsearch 集群

为何要搭建 Elasticsearch 集群 凡事都要讲究个为什么.在搭建集群之前,我们首先先问一句,为什么我们需要搭建集群?它有什么优势呢? 高可用性 Elasticsearch 作为一个搜索引擎,我们对它的基本要求就是存储海量数据并且可以在非常短的时间内查询到我们想要的信息.所以第一步我们需要保证的就是 Elasticsearch 的高可用性,什么是高可用性呢?它通常是指,通过设计减少系统不能提供服务的时间.假设系统一直能够提供服务,我们说系统的可用性是 100%.如果系统在某个时刻宕掉了,

ElasticSearch实战系列一: ElasticSearch集群+Kinaba安装教程

前言 本文主要介绍的是ElasticSearch集群和kinaba的安装教程. ElasticSearch介绍 ElasticSearch是一个基于Lucene的搜索服务器,其实就是对Lucene进行封装,提供了 REST API 的操作接口. ElasticSearch作为一个高度可拓展的开源全文搜索和分析引擎,可用于快速地对大数据进行存储,搜索和分析. ElasticSearch主要特点:分布式.高可用.异步写入.多API.面向文档 . ElasticSearch核心概念:近实时,集群,节点