云客户?
免费开始>
在MyJFrog中升级>
云的新功能>





文件存储分片概述

Sharding Binary Provider,让你在一个Sharding文件存储中管理你的二进制文件。分片文件存储是在多个物理挂载(M)上实现的存储,它存储具有冗余(R)的二进制对象,其中R <= M。

例如,下图表示一个M=3, R=2的分片文件存储。换句话说,文件存储库由3个物理挂载组成,它们将每个二进制文件存储在两个副本中。

Artifactory的分片二进制提供程序提供了几个好处。

无与伦比的稳定性和可靠性

由于二进制文件的冗余存储,只要M >= R,系统就可以承受任何挂载故障。

无限的可扩展性

如果底层可用存储接近耗尽,您只需要添加另一个挂载;这个过程需要不停机文件存储的。一旦挂载启动并运行,系统就会根据您控制的配置参数重新生成文件存储库冗余。

对于独立的Artifactory设置
需要重新启动才能将更改应用到您的binarystore.xml设置

用于高可用性设置
重新启动每个集群以将更改应用到您的binarystore.xml设置将不会导致停机时间。

文件存储性能优化

Sharding Binary Provider提供了几个配置参数,允许您根据特定系统的需求优化从文件存储读取或写入二进制文件的方式。

S3分片

Artifactory允许您对多个S3桶进行分片。有关更多信息,请参见S3分片

Filestore基本面

此页为您提供有关特定二进制提供程序的信息。有关文件存储库和可以使用的各种文件存储库的详细信息,请参见配置文件存储

JFrog订阅级别

自托管
企业
企业+
页面内容




分片二进制提供商

Artifactory提供了一个Sharding Binary Provider,可以让您在一个Sharding文件存储库中管理二进制文件。分片文件存储是在多个物理挂载(M)上实现的存储,它存储具有冗余(R)的二进制对象,其中R <= M。
这个二进制提供程序不是独立的,并且总是作为更复杂的提供程序模板链的一部分使用。

类型
分片
lenientLimit

默认值:1(从5.4版开始)。请注意,对于配置了自定义链且未使用内置模板的文件存储库lenientLimit参数为0以保持与以前版本的一致性。)

成功上传必须维护的成功写操作的最小数量。下一个平衡周期(由GC机制触发)将最终将二进制文件传输到足够的节点,从而保留冗余承诺。
换句话说,在没有临时保留冗余承诺的情况下,宽大管理允许的最小冗余。

例如,如果lenientLimit设置为3,我的设置包括4个文件存储库,其中1个发生故障,写入将继续。如果第二个文件存储发生故障,则写入将停止。

当前活动节点的数量必须大于或等于配置的lenientLimit。如果设置为0,则必须保持冗余值。

readBehavior

该参数规定了从组成分片文件存储的挂载中读取二进制文件的策略。

可能的值有:

设置轮流捡取(默认):使用轮询策略从每个挂载读取二进制文件。

writeBehavior

该参数规定了将二进制文件写入组成分片文件存储的挂载的策略。可能的值有:

设置轮流捡取(默认):使用轮询策略将二进制文件写入每个挂载。

空闲空间:将二进制文件写入具有最大可用自由空间绝对容量的挂载。

percentageFreeSpace:二进制文件写入挂载时使用可用的空闲空间百分比。

冗余
默认值:r = 1

应该在文件存储库中为每个二进制文件存储的副本数量。注意,冗余必须小于或等于系统中的挂载数量,Artifactory才能使用此配置。

concurrentStreamWaitTimeout

默认值:30,000毫秒

为了支持指定的冗余,在缓冲区中累积写流,并使用“r”线程(根据指定的冗余)对正在写入的二进制文件的每个冗余副本进行写入。只有当所有冗余线程完成了它们的写操作后,二进制文件才能被认为是已写的。由于所有线程都在争夺写流缓冲区,因此每个线程将在不同的时间完成写操作。该参数指定任何线程等待所有其他线程完成写操作所需的时间(毫秒)。

如果写操作失败,可以尝试增加该参数的值。

concurrentStreamBufferKb

默认值:32 Kb
在复制写入二进制文件的“r”个冗余副本之前,用于累积写流的写缓冲区的大小。

如果写操作失败,可以尝试增加该参数的值。

maxBalancingRunTime

默认值:3,600,000毫秒(1小时)
一旦恢复了失败的挂载,此参数指定每个平衡会话在失效之前可以运行多长时间,直到下一次垃圾收集完成。有关平衡的详细信息,请参见使用平衡恢复挂载失败

为了在挂载失败后更快地将系统恢复到完全冗余,可以增加此参数的值。如果您发现这会导致整体系统性能的不可接受的下降,您可以考虑降低此参数的值,但这意味着Artifactory恢复完全冗余所花费的总时间将更长。
freeSpaceSampleInterval

默认值:3,600,000毫秒(1小时)

为了实现它的写行为,Artifactory需要定期查询碎片文件存储中的挂载,以检查是否有空闲空间。由于此检查可能是资源密集型操作,因此可以使用此参数来控制空闲空间检查之间的时间间隔。

如果您预计会有一段时间需要密集地上传大量二进制文件,那么您可以考虑降低这个参数的值,以减少系统中挂载之间的短暂不平衡。
minSpareUploaderExecutor

默认值:2

Artifactory维护一个线程池,用于执行对每个冗余存储单元的写操作。根据写活动的强度,最终,一些线程可能会变得空闲,然后成为被终止的候选线程。然而,Artifactory确实需要在写活动再次开始时维护一些线程。该参数指定应该保持活动以提供冗余存储单元的最小线程数。

uploaderCleanupIdleTime

默认值:120,000 ms(2分钟)

线程在成为被杀死的候选对象之前可能保持空闲的最大时间。


双碎片二进制提供程序

double-shards模板用于纯分片配置,该配置使用2个物理挂载和1个副本(这意味着每个工件只保存一次)。

双分片模板配置

如果您选择使用双碎片模板,您的binarystore.xml配置文件应该是这样的:

  

模板里有什么?

而您不需要在binarystore.xml,这是什么double-shards模板看起来像在引擎盖下。
欲知有关cache-fs提供者,看到缓存文件系统二进制提供程序
欲知有关分片提供者,看到分片二进制提供商
欲知有关结合sub-provider,看状态感知二进制提供程序

    1< sub-provider id="shard-fs-1" type="state-aware"/>  1   

冗余碎片二进制提供程序

redundant-shards模板用于纯分片配置,该配置使用2个物理挂载和2个副本(这意味着每个分片存储每个工件的副本)。要了解有关不同分片功能的更多信息,请参考Filestore分片

冗余分片模板配置

如果您选择使用redundant-shards模板,你binarystore.xml配置文件应该是这样的:

  

模板里有什么?

而您不需要在binarystore.xml,这是什么redundant-shards模板看起来像在引擎盖下。
有关cache-fs提供程序可以在缓存文件系统二进制提供程序部分。
有关分片提供程序可以在分片二进制提供商部分。
有关结合子提供商可以在状态感知二进制提供程序部分。

    2< sub-provider id="shard-state-aware-1" type="state-aware"/>  1   

状态感知二进制提供程序

此二进制提供程序不是独立的,并且将始终在分片sharding-cluster提供者。提供程序知道其底层磁盘是否正常工作。它和碱性是一样的文件系统但是,它也可以从错误中恢复(父提供程序负责恢复)checkPeriod字段。


类型
结合
checkPeriod

默认值:15000毫秒

如果在任何时候出现致命错误,尝试重新激活提供程序之间的最小等待时间。

writeEnabled



默认值:真正的

从Artifactory 6.18及更高版本开始,启用/禁用二进制提供程序的写操作。如果设置为false,状态感知提供程序将继续提供读请求,因此Artifactory可以继续从该提供程序读取二进制文件。此外,垃圾收集可以继续从提供程序中清除已删除的二进制文件。(仅适用于分片提供商。)

提供程序所在的分片区域的名称(仅适用于分片提供程序)。
filestoredir

自定义文件存储目录。

您可以为文件存储提供一个自定义目录,以便将工件存储在您选择的目录中。


分片-集群二进制提供程序

分片集群二进制提供程序可以与其他二进制提供程序一起用于本地或云本地存储。

它添加了一个crossNetworkStrategy参数,用作验证冗余值和平衡机制的读写行为。它必须包含远程二进制提供程序在其动态提供程序设置中,允许跨集群同步提供程序。

Sharding-Cluster提供程序监听集群拓扑事件,并根据集群中节点的当前状态创建或删除动态提供程序。

类型
sharding-cluster

在分片机制中定义的区域。读/写策略采用基于区域的提供者。

lenientLimit

默认值:1

最低写入成功的次数必须维护才能成功上传。下一个平衡周期(由GC机制触发)将最终将二进制文件传输到足够的节点,从而保留冗余承诺。
换句话说,在没有临时保留冗余承诺的情况下,宽大管理允许的最小冗余。

例如,如果将lenientLimit设置为3,则我的设置包括4个文件存储库,其中1个文件存储库关闭,则写入将继续。如果第二个文件存储发生故障,则写入将停止。

当前活动节点的数量必须大于或等于配置的lenientLimit。如果设置为0,则必须保持冗余值。

dynamic-provider
可以根据集群拓扑变化动态添加和删除的提供者类型。目前只有远程二进制提供程序作为动态提供程序支持。

Sharding-Cluster二进制提供程序示例

         crossNetworkStrategy crossNetworkStrategy  21   filestore1   15000 5000 15000 200 2 remote  
                   

配置分片二进制提供程序

分片二进制提供程序是一个二进制提供程序,如配置文件存储

Sharding基本配置

基本分片配置用于为Artifactory实例配置分片二进制提供程序。

以下参数可用于基本分片配置:

readBehavior

该参数规定了从组成分片文件存储的挂载中读取二进制文件的策略。

可能的值有:

设置轮流捡取(默认):使用轮询策略从每个挂载读取二进制文件。

writeBehavior

该参数规定了将二进制文件写入组成分片文件存储的挂载的策略。可能的值有:

设置轮流捡取(默认):使用轮询策略将二进制文件写入每个挂载。

空闲空间:将二进制文件写入具有最大可用自由空间绝对容量的挂载。

percentageFreeSpace:二进制文件写入挂载时使用可用的空闲空间百分比。

冗余
默认值:r = 1

应该在文件存储库中为每个二进制文件存储的副本数量。注意,冗余必须小于或等于系统中的挂载数量,Artifactory才能使用此配置。

lenientLimit

默认值:1(从5.4版开始)。请注意,对于配置了自定义链且未使用内置模板的文件存储库lenientLimit参数为0以保持与以前版本的一致性。)

最低写入成功的次数必须维护才能成功上传。下一个平衡周期(由GC机制触发)将最终将二进制文件传输到足够的节点,从而保留冗余承诺。
换句话说,在没有临时保留冗余承诺的情况下,宽大管理允许的最小冗余。

例如,如果lenientLimit设置为3,我的设置包括4个文件存储库,其中1个发生故障,写入将继续。如果第二个文件存储发生故障,则写入将停止。

当前活动节点的数量必须大于或等于配置的lenientLimit。如果设置为0,则必须保持冗余值。

concurrentStreamWaitTimeout

默认值:30,000毫秒

为了支持指定的冗余,在缓冲区中累积写流,并使用“r”线程(根据指定的冗余)对正在写入的二进制文件的每个冗余副本进行写入。只有当所有冗余线程完成了它们的写操作后,二进制文件才能被认为是已写的。由于所有线程都在争夺写流缓冲区,因此每个线程将在不同的时间完成写操作。该参数指定任何线程等待所有其他线程完成写操作所需的时间(毫秒)。

如果写操作失败,可以尝试增加该参数的值。

concurrentStreamBufferKb

默认值:32 Kb
在复制写入二进制文件的“r”个冗余副本之前,用于累积写流的写缓冲区的大小。

如果写操作失败,可以尝试增加该参数的值。

maxBalancingRunTime

默认值:3,600,000毫秒(1小时)
一旦恢复了失败的挂载,此参数指定每个平衡会话在失效之前可以运行多长时间,直到下一次垃圾收集完成。更多关于平衡的细节,请参考使用平衡恢复挂载失败

为了在挂载失败后更快地将系统恢复到完全冗余,可以增加此参数的值。如果您发现这会导致整体系统性能的不可接受的下降,您可以考虑降低此参数的值,但这意味着Artifactory恢复完全冗余所花费的总时间将更长。
freeSpaceSampleInterval

默认值:3,600,000毫秒(1小时)

为了实现它的写行为,Artifactory需要定期查询碎片文件存储中的挂载,以检查是否有空闲空间。由于此检查可能是资源密集型操作,因此可以使用此参数来控制空闲空间检查之间的时间间隔。

如果您预计会有一段时间需要密集地上传大量二进制文件,那么您可以考虑降低这个参数的值,以减少系统中挂载之间的短暂不平衡。
minSpareUploaderExecutor

默认值:2

Artifactory维护一个线程池,用于执行对每个冗余存储单元的写操作。根据写活动的强度,最终,一些线程可能会变得空闲,然后成为被终止的候选线程。然而,Artifactory确实需要在写活动再次开始时维护一些线程。该参数指定应该保持活动以提供冗余存储单元的最小线程数。

uploaderCleanupIdleTime

默认值:120,000 ms(2分钟)

线程在成为被杀死的候选对象之前可能保持空闲的最大时间。

基本分片示例

下面的代码片段是以下设置的示例配置:

  • 一个缓存的分片二进制提供程序,具有3个挂载和2个冗余
  • 每个挂载“X”都写入一个名为/的目录filestoreX。
  • 提供程序的读取策略为设置轮流捡取
  • 提供程序的写入策略为percentageFreeSpace
            //指定分片二进制provider的读写策略和冗余度 roundRobin percentageFreeSpace 2  //对于每个子provider(挂载),指定文件存储位置 filestore1   filestore2   filestore3  

基本分片示例2

下面的代码片段显示了“double-shards”模板,它可以用于二进制存储配置。

   shard-fs-1  shard-fs-2  

双碎片模板使用一个缓存提供程序,有两个挂载和冗余1,即每个工件只存储一个副本。

        

要修改模板的参数,可以修改模板定义中元素的值。例如,要将配置的冗余度增加到2,只需要修改> <冗余标记,如下所示。

        

跨区域分片配置

在HA Artifactory集群中跨多个区域进行分片允许您创建分片数据的区域或区域,以便在某个区域不可用的情况下提供额外的冗余。您可以确定在分区之间写入数据的顺序,也可以设置在写入相邻分区中的挂载时建立空闲空间的方法。

中的跨区域分片配置可使用以下参数binarystore.xml文件

readBehavior

该参数规定了从组成跨区域分片文件存储的挂载中读取二进制文件的策略。
可能的值为:

区:根据区域设置从每个挂载中读取二进制文件。

writeBehavior

该参数指定将二进制文件写入跨区域分片挂载的策略:

可能的值有:

zonePercentageFreeSpace:二进制文件被写入具有最高可用空闲空间百分比的相关区域中的挂载。

zoneFreeSpace:B日志被写入具有最大可用自由空间绝对容量的区域中的挂载。

添加到Artifactory System YAML文件中

中的跨区域分片配置可使用以下参数人工系统YAML文件

shared.node.id

此服务器的唯一描述性名称。

独特性

确保每个节点都有一个在整个网络中唯一的id。

shared.node.crossZoneOrder
设置将数据写入挂载的区域顺序。在下面的例子中,

crossZoneOrder:“us-east1us-east2”,分片将写入US-EAST-1区域,然后写入US-EAST-2区域。


控件动态地将节点添加到现有的分片集群中人工系统YAML文件。为此,需要您的集群已经配置了分片,并添加crossZoneOrder: us-east-1us-east-2财产,新节点可以写入现有集群节点,而无需更改binarstore .xml文件。

例子:

本示例展示了一个跨区域分片场景,其中Artifactory集群配置为2冗余,包括以下步骤:

  1. 开发人员首先将包部署到最近的Artifactory节点。
  2. 然后将包自动部署到“US-EAST-1”区域,到“S1”碎片中可用空间百分比最高的碎片(有51%的可用空间)。
  3. 使用相同的方法将包部署到“S3”分片,该分片在“US-EAST-2”区域中也具有最高百分比的空闲空间。

    下面的代码片段是跨区域设置的一个示例配置:

    • 1个人工集群横跨2个区域:“us-east-1”和“us-east-2”。
    • HA节点4个,每个分区2个。
    • 4个坐骑(碎片),每个区域2个坐骑。
    • 提供程序的写入策略为zonePercentageFreeSpace

    示例:中的跨区域分片配置人工系统YAML

    crossZoneOrder: "us-east-1,us-east-2"

    示例:binarstore .xml文件中的跨区域分片配置

               zone zonePercentageFreeSpace   mount1 us-east-1 mount2 us-east-1   mount3 us-east-2   mount4   mount4 us-east-2     

配置HA集群分片

对于高可用性集群,Artifactory提供了支持以下功能的模板sharding-cluster用于文件系统、S3和谷歌存储。

在HA集群上配置文件存储时,需要放置binarystore.xml$ JFROG_HOME / artifactory / var / etc / artifactory在主节点中,它将同步到集群中的其他成员。

文件系统集群二进制提供程序

在使用集群文件系统模板每个节点都有自己的本地文件存储库(就像在文件系统二进制提供程序),并通过动态分配的节点连接到所有其他集群节点远程二进制提供程序使用分片-集群二进制提供程序

集群文件系统模板配置


如果您选择使用集群文件系统模板,你binarystore.xml配置文件应该是这样的:


  

模板里有什么?

而您不需要在binarystore.xml,这就是集群文件系统模板的实际情况。
有关cache-fs提供程序可以在缓存文件系统二进制提供程序部分。
有关sharding-cluster可以在分片-集群二进制提供程序部分。
有关结合子提供商可以在状态感知二进制提供程序部分。

          local      remote   crossNetworkStrategy crossNetworkStrategy 2   


集群文件系统的例子

下面的示例显示了具有自定义文件存储目录的文件系统集群二进制配置。

          /opt/jfrog/artifactory/var/data/artifactory/cache 500000000      type="state-aware">local /opt/jfrog/artifactory/var/data/artifactory/filestore    remote   crossNetworkStrategy crossNetworkStrategy 2 1   

S3分片

Artifactory允许您对多个S3桶进行分片。有关更多信息,请参见


使用平衡恢复挂载失败

在挂载失败的情况下,系统中的实际冗余将相应减少。与此同时,二进制文件将继续写入剩余的活动挂载。一旦故障挂载被恢复,系统需要重新平衡写入剩余活动挂载的二进制文件,以完全恢复(即平衡)系统中配置的冗余。根据失败挂载处于非活动状态的时间长短,这可能涉及大量二进制文件,现在需要将它们写入恢复的挂载,这可能需要花费大量时间。由于恢复完全冗余是一项资源密集型操作,因此平衡操作在一系列不同的会话中运行,直到完成。类之后会自动调用它们垃圾收集系统中存在运行的进程。


恢复非平衡冗余存储单元的均衡

在导致系统冗余不平衡的自愿操作的情况下,例如在执行文件存储迁移时,您可以使用优化系统存储REST API端点。应用此端点会引发Artifactory在下一次垃圾收集之后运行再平衡的标志。注意,为了加快再平衡,您可以从Artifactory UI手动调用垃圾收集。


优化系统存储

部署后,预计会出现大于冗余的重复文件,垃圾收集器将在优化运行后删除它们。在每个部署操作一个分片时,Artifactory检查校验和是否存在不止一次。如果校验和存在不止一次,并且这种重复的次数大于冗余的数量,Artifactory将触发优化标志。当下一次完整的垃圾收集运行时,重复项将被删除。默认情况下,完整的垃圾收集在20次迭代后运行,每次迭代在4小时后运行,从而每天进行6次迭代。有关垃圾收集的详细信息,请参见垃圾收集

Artifactory REST API提供了一个端点,允许您提出一个标志,指示Artifactory应该在下一次垃圾收集之后调用分片文件存储的冗余存储单元之间的平衡。因此,您可以手动将标志设置为优化标志。有关API的信息,请参见优化系统存储



版权所有©2022 JFrog Ltd.