云客户?
免费开始>
在MyJFrog >中升级
云有什么新>







文件存储分片概述

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提供了一个分片二进制提供程序,允许您在一个分片文件存储中管理二进制文件。分片文件存储是在许多物理挂载(M)上实现的文件存储,这些物理挂载存储具有冗余性(R)的二进制对象,其中R <= M。
这个二进制提供程序不是独立的,总是作为更复杂的提供程序模板链的一部分使用。

类型
分片
lenientLimit

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

为使上载成功,必须维护的成功写入的最小数目。下一个平衡周期(由GC机制触发)将最终将二进制文件传输到足够多的节点,以保留冗余承诺。
换句话说,当冗余承诺暂时没有被履行时,宽大性规定了允许的最小冗余。

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

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

readBehavior

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

可能取值为:

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

writeBehavior

此参数指定将二进制文件写入组成分片文件存储的挂载的策略。可能取值为:

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

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

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

冗余
默认值:r = 1

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

concurrentStreamWaitTimeout

默认值:30,000 ms

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

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

concurrentStreamBufferKb

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

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

maxBalancingRunTime

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

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

默认值:3,600,000 ms(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   1   

冗余碎片二进制提供程序

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

冗余碎片模板配置

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

   .

模板中有什么?

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

    2   1   

状态感知二进制提供程序

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


类型
结合
checkPeriod

默认值:15000毫秒

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

writeEnabled



默认值:真正的

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

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

自定义文件存储目录。

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


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

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

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

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

类型
sharding-cluster

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

lenientLimit

默认值:1

最低成功写这个的数量必须维护什么才能成功上传.下一个平衡周期(由GC机制触发)将最终将二进制文件传输到足够多的节点,以保留冗余承诺。
换句话说,当冗余承诺暂时没有被履行时,宽大性规定了允许的最小冗余。

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

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

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

分片集群二进制提供程序示例

      <属性名="zones" value="remote"/>      crossNetworkStrategy crossNetworkStrategy 21   filestore1     15000 5000 15000 200 2   

配置分片二进制提供程序

分片二进制提供程序是中所描述的二进制提供程序配置文件存储

Sharding基本配置

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

sharding基本配置有以下参数:

readBehavior

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

可能取值为:

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

writeBehavior

此参数指定将二进制文件写入组成分片文件存储的挂载的策略。可能取值为:

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

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

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

冗余
默认值:r = 1

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

lenientLimit

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

最低成功写这个的数量必须维护什么才能成功上传.下一个平衡周期(由GC机制触发)将最终将二进制文件传输到足够多的节点,以保留冗余承诺。
换句话说,当冗余承诺暂时没有被履行时,宽大性规定了允许的最小冗余。

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

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

concurrentStreamWaitTimeout

默认值:30,000 ms

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

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

concurrentStreamBufferKb

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

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

maxBalancingRunTime

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

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

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

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

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

默认值:2

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

uploaderCleanupIdleTime

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

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

基本分片示例

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

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

基本分片例2

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

   分片-fs-1   分片-fs-2  

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

   1     

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

   2     

跨分区分片配置

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

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

readBehavior

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

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

writeBehavior

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

可能取值为:

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

zoneFreeSpace:B二进制数被写入可用空闲空间绝对容量最大的区域中的挂载。

添加到Artifactory System YAML文件中

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

shared.node.id

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

独特性

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

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

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


方法向现有分片集群动态添加节点Artifactory系统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”。
    • 4个HA节点,每个分区2个。
    • 4个坐骑(碎片),每个区域2个坐骑。
    • 提供程序的写策略为zonePercentageFreeSpace

    例如:in的跨区域分片配置Artifactory系统YAML

    crossZoneOrder:“us-east-1,us-east-2”

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

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

配置HA集群分片

对于高可用性集群,Artifactory提供了支持sharding-cluster文件系统,S3和谷歌存储。

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

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

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

配置集群文件系统模板


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


   .

模板中有什么?

当你不需要配置任何其他在你的binarystore.xml,这就是集群文件系统模板的真面目。
有关cache-fs提供程序可以在缓存文件系统二进制提供程序部分。
有关sharding-cluster可以在分片-集群二进制提供程序部分。
有关结合子提供者可以在状态感知二进制提供程序部分。

     <子provider id="state-aware" type="state-aware"/>      local    remote   crossNetworkStrategy crossNetworkStrategy 2   


集群文件系统的例子

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

            /opt/jfrog/artifactory/var/data/artifactory/cache 500000000 local /opt/jfrog/artifactory/var/data/artifactory/ fileStoreDir>    remote   crossNetworkStrategy crossNetworkStrategy 2 1   

S3分片

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


使用平衡从挂载失败中恢复

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


恢复不平衡的冗余存储单元平衡

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


优化系统存储

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

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



版权所有©2023 JFrog Ltd。