`

集群的工作原理(一)

阅读更多

原文链接: http://blog.csdn.net/dm_vincent/article/details/41205207

 

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

ES就是为高可用和可扩展而生的。扩展可以通过购置性能更强的服务器(垂直扩展或者向上扩展,Vertical Scale/Scaling Up),亦或是通过购置更多的服务器(水平扩展或者向外扩展,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个副本分片目前都处于"未分配"的状态 - 它们不存在于任何节点上。这是因为将相同数据的拷贝存放在同一节点上是没有意义的。如果我们失去了该节点,那么我们会失去所有数据和它们的拷贝。

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

 

分享到:
评论

相关推荐

    10.1.8 是否使用过Redis集群,集群的原理是什么?.md

    10.1.8 是否使用过Redis集群,集群的原理是什么?

    Linux操作系统下的集群工作原理及实战经历

    Linux 操作系统下的集群工作原理及实战经历 在 Linux 操作系统下,集群工作原理主要解决三个问题:高可靠性(HA)、高性能计算(HP)和负载平衡。为了实现负载平衡,Linux 提供了多种集群解决方案,其中 LVS(Linux...

    Map-Reduce原理体系架构和工作机制,eclipse与Hadoop集群连接

    ### Map-Reduce原理体系架构和工作机制 #### 一、Map-Reduce原理概述 Map-Reduce是一种编程模型,用于处理大规模数据集(通常是TB级或更大),该模型可以在大量计算机(称为集群)上进行并行处理。Map-Reduce的...

    RedHat高可用集群原理、构建与排错

    资源名称:Red Hat高可用集群原理、构建与排错内容简介: Red Hat HA工作原理流程:Active/Backup模式;产生并检查统一配置文件:cluster.conf;通过组播或者广播传递Heartbeat或totem;Quorate:Votes>=1/2 total ...

    【精选】ES集群同步原理_es集群原理

    **ES集群同步原理详解** **一、ES集群基础概念** 1. **Cluster(集群)**:ES集群由多个节点组成,其中一个节点担任主节点(Master Node),负责协调集群中的各种操作,如索引分配、节点状态管理和元数据更新。主...

    集群技术及应用专题_一_集群的基本原理

    集群技术及应用专题_一_集群的基本原理。

    数据库集群技术工作原理与实现

    数据库集群技术通过多节点协同工作,提供了高可用性、高性能和数据一致性的解决...本文详细介绍了数据库集群的工作原理、实现方法和性能优化策略,并提供了代码示例,希望能帮助读者更好地理解和应用数据库集群技术。

    服务器集群技术原理图

    对服务器集群的原理及其负载均衡的图形,了解

    网络互连实验 交换机集群的配置及原理

    交换机集群是一种网络管理技术,它允许多个物理交换机协同工作,作为一个逻辑上的单一设备进行管理。这样可以简化网络的运维,减少所需的IP地址数量,同时提高网络的可用性和可靠性。在本实验中,我们将以交换机S...

    redis集群原理-搭建-验证-负载均衡-扩缩容及及应用程序调用.docx

    例如,一个6节点的集群包括3个主节点A、B、C和各自的从节点A1、B1、C1,即使B节点失败,集群仍能正常工作。 **Redis集群的搭建**: - 至少需要3个节点来保证容错,且每个主节点应有至少一个从节点。 - 使用`redis-...

    J2EE集群原理,负载均衡

    **J2EE集群原理** J2EE集群的基本思想是将单个服务器实例扩展到多个服务器实例,这些实例被称为节点。这些节点协同工作,提供服务,并且在系统出现故障时可以互相备份。集群的主要目标是实现负载均衡、高可用性和可...

    集群移动通信机和对讲机原理

    它们的工作原理、特点以及使用与维护是理解这一技术的关键。 集群移动通信,全称为“多信道共用系统”,是一种高效的无线电通信方式。它通过集中控制和动态分配信道资源,使得多个用户可以在同一时间共享有限的频谱...

    redis工作原理及单机主从集群版安装使用说明书

    Redis工作原理及单机主从集群版安装使用说明书 Redis是一个高性能的键值存储系统,由Salvatore Sanfilippo开发,使用ANSI C语言编写,遵循BSD协议,支持网络,能够基于内存运行并持久化到磁盘。Redis提供丰富的数据...

    OpenStack高可用集群(下册):原理与架构

    以面向生产系统的OpenStack高可用集群建设为主线,对部署OpenStack高可用集群所依赖的各个基础技术栈和OpenStack核心组件进行了详细的原理讲解,并以实战部署的形式演示了OpenStack高可用集群部署的过程。...

    主要讲J2EE集群原理 ,很不错。

    J2EE集群原理详解 J2EE集群是一种技术,旨在提高应用程序的可用性和可伸缩性,通过将工作负载分散到多个服务器上实现负载均衡,并确保在单个服务器出现故障时,服务仍能正常运行,这称为失败接管。集群的核心概念...

Global site tag (gtag.js) - Google Analytics