简介:本文的首席执行官Note将介绍有关大数据设置设置多少碎片的相关内容。我希望这对每个人都会有所帮助。让我们来看看。
我应该在Elasticsearch集群中设置多少个碎片?
Elasticsearch集群量表和能力规划逻辑的基础计划
这些东西的Elasticsearch片段副本
数字和大小原理的索引,碎片和副本
增加Elasticsearch中的碎片数量,聚合会更快吗?
增加Elasticsearch中的碎片数量,聚合会更快吗?
Elasticsearch Guide [6.5]?索引模块
弹性如何动态扩展主碎片?
如果目前存在该指数,则如何增加碎片数?
传统上,我们检索文章是一个相应的关键字一一遍历的地方。
倒置的索引是通过单词拆分策略形成单词和文章的映射关系表。该字典+映射表是倒置索引。
倒置索引的基本实现基于:FST(有限状态传感器)数据结构。
Lucene [Lussen] 4+版本后,大量使用的数据结构有两个优点:
使用ES准备前分布。
不,因为碎片的数量是文档路由算法中的重要元素:
shard =有(路由)%number_of_primary_shards
碎片的动态修改将意味着几乎重新索引文档数据,这是一个从一个节点到另一个节点的重量级操作,而不是一个节点。
一块在一个节点上存在,一个节点可以包含多个碎片。
Elasticsearch自然具有分布式特征,该特性在水平扩展时通过碎片预先分配。创建索引时,选择适当的碎片数。
随着数据量的增加,可以动态增加节点的数量,Elasticsearch将自动将碎片分配给新节点。重新分配完成后,每件作品几乎是先前操作的两倍,至少是先前操作的两倍。
Elasticsearch中新添加的索引默认情况下指定了5个主要碎片。这意味着我们可以将该索引分散到5个节点,每个节点都带有一个碎片。
不,一件不成本效益。
ES的适当前分布很好,但是成千上万的碎片有点糟糕。
Elasticsearch推荐的最大JVM堆空间为30?32G,因此碎片的最大容量限制为30GB,然后对碎片数进行合理的估计。例如,您认为您的数据可以达到200GB,建议您分配多达7by 8件。
一开始,一个好的解决方案是根据1.5?3次的原理根据节点的数量来创建碎片。例如,如果您有3个节点,则建议您创建的碎片数不超过9(3x3)不景气。性能降低后,节点会增加,ES将平衡片段。
根据基于日期的索引需求,很少有搜索方案用于索引数据。也许这些索引将达到数十万个,但是每个索引的数据量仅为1GB甚至更小。对于此类似的场景,建议仅需要仅需要索引1 shard。在每个索引中很小。
该副本的副本可以很高。
写入索引时,该副本的副本与主要电影相同。首先将新文档引入主要胶片,然后同步到所有其他副本。插入副本碎片不会增加索引容量。
该副本的副本可以服务于阅读请求。如果该索引偏向查询,则可以通过增加副本数量来提高查询性能。但是,为此增加了其他硬件资源。
使用上述配置时,每件的切片数为1。
一个带有两个主碎片和一个副本的索引可以在四个节点中水平扩展
Elasticsearch:权威指南?数据建模?扩展设计?扩展单位
访调员:Elasticsearch设计指数如何?
有多少个碎片适合Elasticsearch?
新年的手,24级基本弹性搜索访谈问题(建议收集!)
大多数Elasticsearch用户在创建索引时会问的一个重要问题是:我需要创建多少个碎片?
在本文中,我将介绍分布期间的一些权衡以及不同设置带来的性能效果。如果您想找出碎片策略以及如何优化它,请继续阅读。
滚动分布是一个非常重要的概念。许多用户对如何分片有疑问。当然,这是为了使发行更合理。在生产环境中,随着数据集的增长,不合理的分配策略可能会使系统进入系统。扩展带来了严重的问题。
同时,该领域很少有文件。许多用户只想做出明确的答案,而不仅仅是一个数字范围,甚至不关心可能带来的问题。
当然,我也有一些答案。但是首先要查看其定义和描述,然后通过几个普遍案例提出我们的建议。
如果您只是与Elasticsearch接触,则有必要找到其术语和核心概念的几个术语和核心概念。
(如果您已经有ES的相关经验,可以跳过此部分)
假设Elasticsearch集群的部署结构如下:
通过该图,请记住以下定义:
群集(群集):由一个或多个节点组成,并区分群集名称和其他簇
节点(节点):单个elasticsearch实例。通常,节点在隔离容器或虚拟机中运行
索引:在ES中,索引是一组文档
Faber(shard):由于ES是分布式搜索引擎,因此该索引通常分解为不同的部分,并且这些分布的数据不同节点是碎片。零件数据分为平衡的分布,因此用户基本上不这样做必须担心碎片的处理细节。
副本:ES默认为5个主碎片的索引创建,并为其创建副本的副本。也就是说,每个索引的成本高5个主碎片,每个主碎片都相应地与相应的片段相对应。
对于分布式搜索引擎,碎片和副本的分布将是高可用性和快速搜索响应的设计核心。主电影和复制都可以处理查询请求。它们之间的唯一区别是,只有主碎片可以处理请求请求请求请求请求,然后
在上面的示例中,我们的Elasticsearch集群具有两个节点,并且使用默认的碎片配置。ES会自动将这5个主碎片分布到2个节点,它们的相应副本完全不同。是的,这是一个分布式概念。
请记住,索引的number_of_shards参数仅对当前索引有效,而不是整个集群的有效性。对于每个索引,此参数定义了当前索引的主要膜数量(不是集群中的主要膜数量)),然后,然后
在本文中,您不会详细解释Elasticsearch的副本。如果您想单独理解它,请参阅本文。
该副本对于搜索性能非常重要。同时,用户可以随时添加或删除副本。如另一篇文章所述,其他副本可以为您带来更大的容量,更高的呕吐能力和更强的故障可恢复性。
当您在Elasticsearch群集中配置索引时,您必须了解,在集群操作过程中不能调整碎片设置。将来,您会发现您需要调整零件的数量。Rendex(尽管Rendex会更加耗时,但它至少可以保证您不会停止)。
主膜的配置与硬盘分区非常相似。当在空的硬盘空间中对分区进行分区时,将要求用户首先备份数据,然后配置新分区。最后,数据写在新分区上。
分配碎片时,主要考虑数据集的增长趋势。
我们也经常看到一些不必要的 - 表场景。从ES社区用户共享此流行主题(碎片配置)的共享数据,用户可能会认为分配过多是绝对的安全策略(此处提到的过度分配,此处的分布过多是指超过当前数据量的碎片数(每个索引的文档数))针对特定数据集)。
弹性在早期确实提倡这种方法,然后许多用户像分配1,000张碎片一样做更多的极端类似。实际上,弹性目前的态度更加谨慎。
您知道,您分配的每一块都有额外的费用:
我们的客户通常认为,随着业务的增加,他们的数据量将相应地增加,因此有必要为此进行长期计划。许多用户认为,他们会遇到新贵的增长(尽管大多数人甚至没有遇到遇到峰值),当然,我也想避免重新分发并减少可能的停止时间。
如果您真的担心数据的快速增长,我们建议您更多地关心此限制:Elasticsearch推荐的最大JVM堆空间为30?32G,因此将最大容量限制为30GB,然后对数字进行操作。碎片。可选的估计。例如,您认为您的数据可以达到200GB,我们建议您最多分配7到8件。
简而言之,现在三年后不要为您分配太多10TB数据。如果那天,您还会感到绩效变化很早。
尽管本节没有详细讨论副本的副本,但我们建议您在任何时候保持适量的副本并增加相应的增加。如果您正在部署新的环境,也许您可以参考我们的群集设计副本。该集群由三个节点组成,并且每个碎片仅分配一个副本。但是,随着需求的变化,您可以轻松调整副本数量。
对于大数据集,我们非常鼓励我们为索引课程分配更多的碎片,我们还必须在合理的范围内。上面提到的每一部分的原理最好使用。
但是,您最好仍然可以描述每个节点上只有一个索引碎片的必要性。一开始,一个好的解决方案是根据1.5?3次的原理创建碎片。例如,如果您有3个节点,建议您最多创建9(3x3)。
随着数据数量的增加,如果您通过群集状态API找到问题,或者遇到性能降级,则只需要添加其他节点即可。ES将自动帮助您完成不同节点上碎片的分配余额。
另一个强调,尽管我们没有参与此处的复制节点的引入,但仍使用上述指南原则:是否有必要在每个节点上只分配一个索引碎片。您需要的节点的数量将加倍。如果您需要为每件分配2个副本,则需要节点数量的3倍。有关更多详细信息,请参阅集群的副本。
我不知道您是否有基于日期的索引需求,而且索引数据的搜索方案很少。也许这些索引将达到数十万个,但是每个索引的数据量仅为1GB甚至更小。对于这个类似的场景,我建议您只需要为索引分配1个。
如果您使用ES(5件)的默认配置并使用LogStash日期生成索引,则6个月将达到890件。无论多少,您的群集都很难工作,除非您提供更多(例如15个或更多)节点。
考虑一下,大多数LogStash用户都不会经常搜索,甚至每分钟都有查询。因此,建议将这种场景用于更经济的使用环境。在这种情况下,搜索性能不是第一个元素,因此不需要很多副本。维护单个副本以进行数据冗余就足够了。但是,连续加载到内存的数据比例也将变得更高。
如果您的索引只需要一块,则可以在3个节点的群集中维持使用LogStash的配置6个月。当然,您需要使用至少4GB的内存,但是建议使用8GB,因为它用于多AT -DATA云平台中。8GB内存将具有明显的网络速度和较少的资源共享。
再次,数据碎片还必须具有相应的资源消耗,并且需要持续投资。
当索引有更多的碎片时,为了组装查询结果,ES必须分别查询每个碎片(当然是并行)并合并结果。有很大的帮助。但是,您仍然需要更多地关注数据本身的大小,更新频率和未来状态。碎片的分布没有绝对的答案。我只是希望您可以从本文的讨论中受益。
添加碎片:
修改副本:
本文的原始文本是
Elasticsearch是一个非常普遍的平台,支持各种用户实例并为组织数据和复制策略提供了极大的灵活性。但是,这种灵活性有时使我们难以确定如何在早期组织索引和碎片,尤其是不熟悉Elastic的索引和碎片堆栈。尽管它可能在第一次开始时不会引起问题,但随着数据的增加,它们可能导致性能问题。集群所拥有的数据越多,更难纠正问题,因为有时可能需要它索引大量数据。
因此,当我们遇到性能问题时,我们通常可以回到索引方法和集群中的片段数。
如果我们的群集的结构如下所示:
节点(节点):单个elasticsearch实例。通常,节点在隔离容器或虚拟机中运行
索引:在ES中,索引是一组文档
Faber(Shard):由于ES是分布式搜索引擎,因此该索引通常分解为不同的部分,并且这些分布的数据不同节点是碎片。零件数据分为平衡分布,因此用户基本上不需要担心处理处理的细节。
副本:ES默认为5个主碎片的索引创建,并为其创建副本的副本。也就是说,每个索引的昂贵5个主碎片都很昂贵,每个主碎片相应地与相应的片段相对应。和快速搜索响应。主电影和复制都可以处理查询请求。它们之间的唯一区别是,只有主碎片才能处理索引请求的索引请求,以索引请求该副本对于搜索性能非常重要。同时,用户可以随时添加或删除副本。附加副本可以带来更大的容量,更高的呕吐能力和更强的故障恢复能力。
如上图所示,群集有两个节点,并且使用了默认的碎片配置。ES会自动将这5个主碎片分配到2个节点,它们的相应副本在完全不同的节点上。它们在它们中,Node1具有第1、2、3部分,索引的碎片的副本,该节点2具有碎片。索引4、5和副本1、2和3的副本。
当数据写入碎片中时,定期将其发布给无法在磁盘中使用的无法查询。随着段数量的增加,这些段将定期合并到较大的段中。此过程称为合并。细分市场是不变的,这意味着使用的磁盘空间通常在索引期间波动,因为它需要在删除替换段之前创建一个新的合并段。合并可能非常消耗,尤其是在磁盘I / O中。
Saber是分布Elasticsearch的数据分布数据的单元。ELASTICSERACH可以在重新连接数据时移动碎片的速度。例如,失败后,这将取决于碎片,网络和磁盘性能的大小和数量。
注意1:避免使用非常大的碎片,因为这会对从集群中恢复的能力产生负面影响。没有固定的限制对碎片的尺寸,但通常许多场景在50GB的范围内受到限制。
注2:当您在Elasticsearch群集中配置索引时,您必须了解群集操作期间不能调整碎片设置。将来,您会发现需要调整碎片数。您只能创建它,并为Datarendex创建和执行数据(尽管ReIndex会更加耗时,但它至少可以保证您不会停止)。
主膜的配置与硬盘分区非常相似。当将分区分区在空的硬盘空间中分区时,将需要用户首先备份数据,然后配置新分区。最后,数据写在新分区上。
注3:使用基于时间的索引来管理数据保留期。根据保留期限将数据汇入索引。基于时间的索引也可以轻松地更改主碎片和副本的数量,因为要生成的下一个索引可以可以改变。
对于每个Elasticsearch索引,有关映射和状态的信息存储在群集状态中。它存储在存储器中以进行快速访问。因此,大量索引可能导致群集中的较大群集状态,尤其是当映射很大时。这可能会变得非常慢,因为所有更新都需要通过单个线程完成,以便在群集分布之前可以保证一致性。
每个碎片都有需要存储在内存中并使用堆空间的数据。这包括在段级别保存信息的数据结构,但还包括段的数据结构以定义数据的位置保留在磁盘上。这些大小。数据结构不是固定的,并且根据使用方案会有所不同。但是,段相关支出的重要特征是,它与细分市场的大小不符。这意味着与较小的段,较小的片段相比每个数据量的每个数据量的开销很小。差异可能很大。为了能够为每个节点存储尽可能多的数据,使用管理和减少支出尽可能多地很重要。桩空间具有越多的数据和可以处理的碎片。
因此,索引和碎片在集群的角度并不闲置,因为每个索引和碎片都有一定程度的资源开销。
每个分配的碎片都有额外的费用:
注意1:小碎片将导致小细分市场,这将增加支出。我们的目的是控制几个GB和数十个GB之间的平均碎片尺寸。对于基于时间的数据使用方案,碎片的大小通常在20GB之间控制和40GB。
注2:由于每个作品的开销取决于细分市场的数量和大小,因此小段通过forcemerge合并为较大的细分市场,这可以减少开销并改善查询性能。请注意,索引应该完成。这是一个相对昂贵的性能和费用操作,因此应在非峰值时间内执行。
注3:我们可以在节点上保留的碎片数与可用的堆栈内存成正比,但是Elasticsearch没有强制性固定限制。一个好的规则是确保每个节点的碎片数低于GB桩内存构型为20至25件。因此,具有30GB内存的节点应具有高达600-750件的片段,但低于此限制可以保持更好。这通常有助于保持群集健康。
注4:如果您担心数据的快速增长,建议使用此限制:Elasticsearch推荐的最大JVM堆空间为30?32G,因此最大容量限制为30GB,然后合理地估算了数量例如,如果数据可以达到200GB,则最多分配了7至8件。
注5:如果是基于日期的索引需求,并且索引数据的搜索方案很少。也许这些索引将达到数十万个,但是每个索引的数据量仅为1GB甚至更小。对于此类似的场景,建议您只需要为索引分配1件。如果您使用ES(5件)的默认配置,并使用LogStash在白天之前生成索引,那么6个月将达到890。无论有多少个Proprovide,更多(例如15个或更多)节点。考虑到它,大多数logstash用户都不经常搜索,甚至每分钟都有查询。因此,建议将这种场景用于更经济的使用环境。在这种情况下,搜索性能不是第一个元素,因此不需要许多副本。它足以维护单个副本以进行数据冗余。该索引只是一块,可以在3个节点的群集中维持LogStash的配置6个月。当然,您至少需要使用4GB的内存,但是建议使用8GB,因为8GB内存,在Multi -Data上,云平台将具有明显的网络速度和更少的资源共享。
在Elasticsearch中,每个查询都是在每个零件的单个线程中执行的。但是,可以并行处理多个碎片,并且还可以在同一纸上执行多个查询和聚合。
这意味着,如果不涉及缓存,最小查询延迟将取决于数据,查询类型和切片。缩短大量的小块将使每件零件的处理速度更快,但是需要对其进行排列并处理。更多任务。它不一定要比查询少量较大的碎片更快。如果有多个并发查询,它也会减少查询吞吐量。
从查询性能的角度来确定最大碎片大小的最佳方法是使用实际数据并查询基准测试。总是使用节点的内容的内容来查询并在生产中加载索引,因为优化了一个单个查询可能会产生误导性结果。
当使用基于时间的索引时,每个索引通常与固定时间段相关联。每日索引非常普遍,通常用于保存每天短或每天大量的数据。合适的粒径,可以轻松调整每日基本数量。有长期预留期的数据,尤其是如果不能保证每日使用每日指数,并且使用每日或每月的索引来确保碎片的尺寸这减少了随着时间的推移需要存储在群集中的索引和碎片的数量。
注意:如果使用了基于时间的索引,则此时间是固定的时间段,那么您需要根据数据的预留时间和预期数据数量调整每个索引的时间段,以实现目标的大小shard。换句话说,如果我们想确定最终碎片的大小,我们需要根据数据周期和估计的数据量来调整索引。
当数据量可以合理预测并缓慢变化时,基于固定时间间隔的索引有效。如果索引迅速变化,很难保持统一的目标碎片大小。为了更好地处理这种类型的方案。,引入了翻转和收缩API()。这些都提高了其对索引和碎片的管理方法的灵活性,尤其是对于时间的索引。
翻转和收缩API可以指定应包含和/或应写入最长期限的文档和索引数量。一旦超过标准之一,Elasticsearch可以触发新索引的创建,您可以完成写作的创建。不停止。它可以切换到特定大小的新索引,而不是允许每个索引涵盖特定时间段,这使所有索引更容易实现统一的尺寸。如果您需要更新数据此API,事件的时间戳与其所在的索引之间不再存在明显的链接,这可能会大大降低更新效率,因为每个更新都需要在搜索之前执行。
注意:如果我们有基于时间的无用数据,则数据的量可能会随着时间的推移发生重大变化,因此我们可以考虑通过动态更改每个索引所涵盖的时间段来实现最佳目标碎片大小。灵活性,可以帮助避免在不可预测的数据量时太大或太小的碎片。
Shrink API使我们可以将现有索引缩小为较少的主要碎片索引,如果有必要在索引期间均匀扩展跨节点的碎片,但这将导致碎片太小。一旦索引不再索引,该API便可以用于减少主膜的数量。这将产生较大的碎片,这更适合长期存储数据。
如果需要每个索引涵盖特定时间段并希望在大量节点上扩展索引,请考虑使用收缩API减少索引中未包含索引时的主膜数量。最初是配置的,此API也可用于减少碎片数。
关于索引和碎片之间的最佳分发数据,这将取决于所使用的方案的细节,有时很难确定如何应用最佳建议。
数据碎片还需要消耗相应的资源,并且需要连续投资。当索引有更多的碎片,以组装查询结果时,ES必须查询每个碎片(当然是并行的)并合并结果。,高性能IO设备(SSD)和多核处理器无疑将有很大的帮助来降低性能。不过,我们仍然需要更加注意数据本身的大小,更新频率和未来状态。回答碎片的分布。
参考:
官方建议:最小值(32GB,机器内存尺寸/2)。
磁盘需求的最佳比率= 1:50 256G = 12800G = 13T
8G内存对应于8*50 = 400G磁盘
总体内存大小没有特定的要求,但内容越大,搜索性能越好。
除JVM外,保留的内存必须足够,否则通常是OOM。
簇数:= 3,建议:所有节点的主:true,数据:true。既是主节点和路由节点。
群集节点的数量:3,根据业务方案需求,建议:逐渐独立的主节点和协调/路由节点。
ES群集中的数据节点负责添加,删除,修改,检查和汇总操作,因此它消耗了大量CPU,内存和I/O。
构建ES群集时,我们应该分割和隔离ES群集中的节点。
候选杰作:node.master = true节点。数据= false
数据节点:node.master = false节点。数据= true
网络异常可能会导致群集中的节点划分多个区域。当该区域发现没有主节点时,将选出其自身区域中的乳腺节点R。同时,我们称这种现象称为大脑破裂。
为了防止大脑破裂,我们需要将以下参数添加到主节点的配置文件:
discovery.zen.minimum_master_nodes =(master_eligible_nodes /2)+1 //默认值为1
其中,主簇中的节点数量可以避免大脑裂纹的发生,并最大程度地提高了集群的高可用性。
只要它不少于发现。zen.minimum_master_node,选举工作就可以顺利进行,也就是说,维持至少一半的节点以生存。
建议根据数据量进行测量。经验:建议不要超过每件的30GB。
单个索引号=数据数量÷30g
每个节点<3推荐的单个索引数:因为碎片分布在同一服务器上。当请求开始与相同的硬件资源竞争时,性能将逐渐降低。
如果索引的数量太大,则可以考虑是否需要将业务需要分为索引。每周,天堂,月亮桌等。
注意:除非Rendex运行,否则无法修改碎片的数量。
在Elasticsearch中,每个查询都在每个零件的单个线程中执行。但是,可以并行处理多个碎片,并且可以在同一片段上执行多个查询和聚合。
[小碎片的战斗和缺点]这意味着,当它不涉及高速速率时,最小查询延迟将取决于数据,查询类型和碎片。快来有大量的小碎片将使每个碎片的处理速度使每个碎片的处理速度更快,但是由于需要按顺序排列和处理更多的任务,因此不必比查询少数小型人更快。如果有多个并发查询,许多小片段也会减少查询吞吐量。
除非您对系统的鲁棒性(例如银行系统)的鲁棒性有异常高的要求。您可以考虑2份或更多副本。否则,1副本就足够了。
注意:可以随时通过配置修改副本数量。
根据业务需求选择正确的类型,这有利于节省空间和改进。获取方法仅返回要查询的字段。验证每组数据集以避免使用默认映射的字段类型以提高写作速度并节省空间。
尽量避免使用嵌套或父母/孩子,您不需要它;嵌套查询很慢,父/子查询速度较慢,比嵌套查询慢数百倍;因此,您可以在映射设计阶段(大宽度表设计或使用更智能的结构)中获得它字段字段不能太多,ES的当前默认限制为50。
index.mapping.netted_fields.limit:50
ES配置描述
配置文件:elasticsearch.yaml。
ES有许多配置信息,大多数配置都可以通过elasticsearch.yaml和接口执行。
在这里,我们列出了一些更重要的配置信息:
结论:以上是首席CTO的全部内容,指出了多少个碎片为每个人设置了大数据设置。感谢您阅读本网站的内容。我希望这对您有帮助。更多关于大数据设置的评分,不要忘记在此站点上找到它。