“s3”和“cluster-s3”文件存储链之间的区别是什么?
相关版本:Artifactory 5 & 6。
在将Artifactory与云二进制提供程序(如S3)集成时,基于文档有2个可能的链模板可供选择:“s3”和“cluster-s3”链模板。在这里,我们将重点讨论不同之处,以及应该如何选择正确的配置来使用。
*本文主要以S3为例,而所提到的信息也与“S3”之间的差异有关。google storage& "cluster-google-storage,和azure-blob-storage& "cluster-azure-blob-storage”。
运行一个独立的Artifactory服务器?
“集群”链的好处只有在运行Artifactory时才有意义高可用性.
因此,对于与云存储提供商合作的独立设置,您应该使用非集群模板链。
系统需求
“集群”链除了在HA集群(以及Enterprise Artifactory许可证)中运行外,不需要任何其他东西。
在HA设置中使用非集群链时,需要在所有Artifactory节点之间有一个共享挂载(NFS/NAS/SAN)。
“非集群”模板及其工作方式
s3 <链模板= " " / >
“s3”链代表以下配置:<链模板= " s3 " >
< /提供者>
< /提供者>
< /提供者>
< / >链
如上所述,当在HA集群中使用非集群模板时,所有HA节点之间需要共享挂载,以共享Artifactory“data”目录。
共享的“data”目录必须在ARTIFACTORY_HOME / etc /美元ha-node.properties:artifactory.ha.data.dir = / mnt /共享/ artifactory / ha-data
上面的模板配置了4层存储提供商。
- Cache-FS-不应该被共享,以确保对频繁的工件有良好的性能。
- 最终-在已配置的“artifact .ha.data. data”中创建。Dir”,是所有集群节点之间的共享层。最终目录包含3个子目录:“_pre”、“_add”、“_delete”。这些文件夹实际上是应该传输到下一个提供商(云存储提供商)的事件队列。
- 重试-在失败时负责“重试”事件。
- S3—云存储提供商。
当使用非集群模板时,主节点负责将事件从“最终”文件夹分派到S3桶。
因此,他的正常运行时间对于确保“最终”文件夹不会失去控制非常重要。
在下载
- 收到下载请求的节点将首先检查该文件在Cache-FS层是否可用。
- 如果不可用,他将检查文件是否存在于最终文件夹中。
- 否则,他将继续从云提供商下载文件,然后将其提供给客户端。
直接云存储将允许您跳过Artifactory从云存储下载文件并将其提供给客户端的部分。
在上传
- 接收到上传请求的节点将文件传输到最终的“_pre”文件夹。
- 一旦节点完全接收到文件,它将把文件从“_pre”移动到“_add”,然后才关闭上传请求。当文件到达“_add”文件夹时,所有其他HA成员都可以下载它。
- 主节点检查“最终”文件夹中是否有任何要处理的新文件,并最终将文件上传到S3。
最佳实践:
- 一个大的地方Cache-FS分区对于确保尽可能快地提供频繁的工件非常重要。
- 工件上传到S3需要主节点正常运行时间。
- 监视“最终”子文件夹中的文件数量非常重要,因此在出现故障时,管理员可以及时得到通知。
binarystore.xml例子:<配置版本=“v1”>
<链模板= " s3 " >
< /提供者>
< /提供者>
< /提供者>
< / >链
< cacheProviderDir > / var / opt / jfrog artifactory /数据/缓存< / cacheProviderDir >
< maxCacheSize > 100000000000 < / maxCacheSize >
< /提供者>
10 < numberOfThreads > < / numberOfThreads >
<超时> 180000 > < /超时
5000年< dispatcherInterval > < / dispatcherInterval >
< /提供者>
10 < maxTrys > < / maxTrys >
<时间> 1000 > < /间隔
< /提供者>
端点> < http://s3.amazonaws.com > < /端点
[ENTER BUCKET NAME HERE
< /提供者>
< / config >
“集群”模板及其工作方式
<链模板= " cluster-s3 " / >
“cluster-s3”链代表以下配置:<链> < !——模板=“cluster-s3”- - - >
< /提供者>
< / sub-provider >
< /提供者>
< /提供者>
< / >链
“集群”链配置与非集群链配置的主要区别在于,在“集群”中,每个Artifactory节点将为“最终”提供程序使用自己的存储,因此不需要共享挂载。
在这里,每个Artifactory节点将管理自己的队列,并针对云存储分派自己的事件。
该链配置以下提供者层:
- Cache-FS
- Sharding-Cluster-这个提供者允许我们以一种允许Artifactory识别持久化在其他节点中的文件的方式对“最终”进行集群。
- Eventual-Cluster—最终提供程序的集群版本。位于
美元ARTIFACTORY_HOME /数据/最终并有2个子文件夹:“_pre”和“_queue”。 - 重试-在失败时负责“重试”事件。
- S3—云存储提供商。
- 远程—负责与HA其他成员节点的通信。
与存储在本地而不是外部驱动器上的配置二进制文件一样,只有在Artifactory启动并运行时才能访问它们(主机启动是不够的)。
为了确保数据始终可用,熟悉“分片集群”提供程序的以下2个参数是很重要的:
冗余—默认值:2。每个二进制文件应存储的副本数。虽然“最终目录”只是一个可传递目录,但我们通常希望“最终目录”中每个文件至少有两份副本,以确保所有文件始终可用。例如,在重新启动过程中,我们可能会取下在“最终”中有文件的节点。如果相同的文件存在于另一个节点中,则将从那里提供该文件。(假设是滚动重启)
lenientLimit—默认值:1。为使上传成功,需要存储的最小副本数量。如果设置为0,则必须保持已配置的冗余。
在下载
- 收到下载请求的节点将首先检查该文件在Cache-FS层是否可用。
- 如果不可用,他将检查文件是否存在于他的本地最终文件夹中。
- 如果没有,他将使用“Remote”提供程序检查文件是否在其他成员节点中可用。
- 否则,他将继续从云提供商下载文件,然后将其提供给客户端。
直接云存储将允许您跳过Artifactory从云存储下载文件并将其提供给客户端的部分。
在上传
- 接收到上传请求的节点将文件传输到最终的“_pre”文件夹。
- 一旦节点完全接收到文件,它将把文件从“_pre”移动到“_queue”,然后才关闭上传请求。如果“lenientLimit”和“redundancy”设置为大于1,它将首先确保该二进制文件至少存在“n”个HA集群节点的“最终”文件夹。(n为配置的“lenientLimit”)
- 一旦文件位于“_queue”文件夹中,就可以将其下载到所有其他HA成员。
- 节点每1秒(默认,可配置)检查一次“最终”文件夹中是否有任何要处理的新文件,并将它们上传到S3。
最佳实践:
- 一个大的地方Cache-FS分区对于确保尽可能快地提供频繁的工件非常重要。
- 监视“最终”子文件夹中的文件数量非常重要,因此在出现故障时,管理员可以及时得到通知。
- 如果" lenientLimit "被设置为1,在重新启动一个Artifactory节点之前,将其从负载均衡器中取出至少一分钟。这是为了确保保留最近部署的工件的冗余。
binarystore.xml例子:<配置version = " 2 " >
<链> < !——模板=“cluster-s3”- - - >
< /提供者>
< / sub-provider >
< /提供者>
< /提供者>
< / >链
< maxCacheSize > 100000000000 < / maxCacheSize >
< /提供者>
< readBehavior > crossNetworkStrategy < / readBehavior >
< writeBehavior > crossNetworkStrategy < / writeBehavior >
<冗余> 2 > < /冗余
1 < lenientLimit > < / lenientLimit >
< /提供者>
10 < maxWorkers > < / maxWorkers >
1000年< dispatcherInterval > < / dispatcherInterval >
15000年< checkPeriod > < / checkPeriod >
300000年< addStalePeriod > < / addStalePeriod >
当地<区> < /区>
< /提供者>
15000年< checkPeriod > < / checkPeriod >
5000年< connectionTimeout > < / connectionTimeout >
15000年< socketTimeout > < / socketTimeout >
200年< maxConnections > < / maxConnections >
2 < connectionRetry > < / connectionRetry >
<区>远程> < /区
< /提供者>
端点> < http://s3.amazonaws.com > < /端点
[ENTER BUCKET NAME HERE
< /提供者>
< / config >
