微网站建设公司首选公司,淮安 做网站 app,弄个直播平台大概要多少钱,做追星网站效果图什么是分片
集群由多个节点组成#xff0c;每个节点上有多个索引 Elasticsearch 索引实际上只是一个或多个物理分片的逻辑分组#xff0c;其中每个分片实际上是一个独立的索引。分片上的段文件是实际存储的数据。分为主、副#xff0c;索引中主分片的数量在创建索引时是固定…什么是分片
集群由多个节点组成每个节点上有多个索引 Elasticsearch 索引实际上只是一个或多个物理分片的逻辑分组其中每个分片实际上是一个独立的索引。分片上的段文件是实际存储的数据。分为主、副索引中主分片的数量在创建索引时是固定的但副本分片的数量可以随时更改而不会中断索引或查询操作。一般通过滚动索引的方式加分片例如ILM 分片的作用是什么 提供集群横向扩展能力。通过将索引中的文档分布在多个分片上并将这些分片分布在多个节点上当数据量增大时增加分片数量再增加节点数量从而提供集群横向扩展能力。 提供高可用。Elasticsearch 可以确保冗余这既可以防止硬件故障又可以在将节点添加到集群时增加查询容量,因为主和副都可以被查询分摊查询流量。 提升查询容量。当数据量上涨时可以通过增加分片数和机器数解决
分片分配的目标
集群所有节点负载一致。
每个分片都占用高 CPU、RAM、磁盘和网络使用率等资源分片的分配也就决定了每个节点的负载目标是集群所有节点负载一致
Elasticsearch 如何在节点上分配分片影响每一个节点的负载也就影响集群的性能。如果所有流量都流向一两个节点因为它们包含集群中的活动索引那么这些节点将显示高 CPU、RAM、磁盘和网络使用率。而集群中其他数十或数百个节点处于空闲状态。分片接收读写流量并消耗磁盘、内存、JVM 堆和网络等资源。数据节点上的总体资源消耗工作负载取决于它拥有的分片和它们接收的流量。分片的平衡分布对应于均匀的工作负载和高效的节点利用率。在 Elasticsearch 中这个职责属于 ShardsAllocator 组件。
什么时候会分配分片
集群元数据更改且可能影响分片放置时触发分片分配
创建索引节点加入或离开集群分片分配相关配置修改时索引副本数增加或减少等等…
控制分片分配的组件
ShardsAllocator
分片分配的入口点。对于分片分配和迁移做出决策。ShardsAllocator 是 Elasticsearch 中的一个接口其实现负责分片放置。当分片因任何原因未分配时ShardsAllocator 决定在集群中的哪些节点上放置它们。
作用
allocateUnassigned
根据权重算法和decider决定将未分配的分片分片分配到哪个节点将分配信息更新到集群状态由master广播下去。
流程
当新索引创建时其shard均处于未分配状态该流程会遍历所有分片根据是否为primaryshardid小的优先索引优先级进行排序这可确保 Elasticsearch 为尽可能多的索引分配所有主索引而不是创建多个部分分配的索引。一旦 Elasticsearch 分配了所有主索引它就会移动到每个索引的第一个副本。索引优先级看索引的priority配置创建时间和名字。.security7配置了最高的优先级1000确保优先可用。遍历过程中会对每个分片进行分配决策决策中遍历每个node先根据权重函数计算权重再遍历所有decider进行判断can allocate,例如disk 90% , 已有same shardtotal shard per node配置达到阈值选择权重最小decider均通过的节点进行分配分片更改集群元数据
moveShards
对分片根据decider来判断是否需要迁移若需要也根据上述的方法选择节点
流程 遍历所有已分配分片 使用所有decider的canRemain判断是否需要迁移 若需要迁移使用allocateUnassigned中的方法找到目标节点 迁移分片到该节点
balance
应对集群扩缩容等情况根据权重算法平衡集群的节点平衡过程就是将权重大节点上的分片迁移到权重小的节点决策也会经过decider。随着集群的增长或缩小Elasticsearch 会自动迁移分片以重新平衡集群。当您达到工作负载限制时您可能会决定添加更多节点来扩展集群。 Elasticsearch 应该自动检测这些节点并重新定位分片以实现更好的分布。使用权重函数进行打分。与具有较低权重值的节点相比具有高权重值的节点不太适合放置分片。计算每个节点上每个索引的权重以及索引的最小和最大可能权重之间的差异。优先对权重差最大的索引进行rebalance。避免中间状态影响过大导致进一步的rebalance。对最大和最小节点上的shard进行relocate直到差值小于阈值会使用decider的can rebalance进行判断直到遍历完所有索引。使得集群更加平衡但分片迁移消耗资源在这两点之间进行平衡的参数就是threhold参数。
流程 根据权重函数计算每个索引在每个节点上的权重 根据索引节点间的权重差排序索引 遍历所有索引优先对权重差大的索引rebalance 对该索引权重最大和最小的两个节点进行迁移分片直到权重差小于阈值或者尝试迁移遍历完所有节点组 直到遍历完所有索引
Decider
决定分片是否可以在某个节点放置。Decider有多个所有decider都通过才可以分配。例如ConcurrentRebalanceAllocationDeciderEnableAllocationDecider。可以很方便的实现根据配置和人工干预调整分片分配策略。
作用
canAllocate 给定分片是否可以分配到节点disk 85%excludeshard数量限制sameshardcanRemain 给定分片是否可以保留在所在节点excludedisk 90canRebalance 给定分片是否可以rebalance 并发配置
权重函数
该函数确保所有节点拥有相同数量的分片并且每个索引的分片分布在节点之间。如果一个节点持有太多分片它与每节点平均分片的偏差很大这会增加分片权重因子。如果一个索引的太多分片落在同一个节点上它与每节点平均分片对索引的偏差就会增加从而增加索引权重因子。这两者都增加了节点上分片的整体权重分片将会被移动到权重较小的节点。对于大多数用例来说这是一个合理的信号。与具有较少分片的节点相比具有更多分片的节点获得更多流量并且具有更多的磁盘、CPU 和内存消耗。分片计数是一个统一的信号。 JVM 堆、CPU 或内存消耗等指标波动非常频繁.
mean-shards-per-node
num-of-shards-in-cluster / num-nodes-in-cluster
mean-shards-per-node-for-index
num-shards-for-index / num-nodes-in-cluster
total-shard-weight
theta0 * (num-shards-on-node – mean-shards-per-node)
index-shard-weight
theta1 * (num-index-shards-on-node – mean-shards-per-node-for-index)
Weight (index, node) total-shard-weight index-shard-weight
# theta0和theta1是用户自定义的参数默认0.45和0.55
# theta0 theta1 1