人工备份和灾难恢复的最佳实践
介绍
就在…的中心DevOps管道, JFrog Artifactory是所有二进制需求的中心集线器。在生产中,每一分钟都是宝贵的。无论是部署最新的包还是缓存公开可用的包,始终保持所有二进制文件可用都是至关重要的。挑战在于,不存在坚不可摧的电脑或完美无瑕的软件,这就是为什么我们必须确保有一个备份计划。
本白皮书描述了处理这些问题的几种方法,希望其中一种方法最适合您的组织。
Artifactory是如何存储二进制文件的,它有什么特别之处?
保护二进制文件的经典方法是对文件进行定期备份,并让它们在出现问题时可用。Artifactory有特定的方法来备份二进制文件,以便您可以将它们导入到新实例中并保留所有引用。如下一节所述,Artifactory存储二进制文件的方式与通常的存储方式略有不同,因此在执行这些任务时必须考虑到这一点。
Artifactory存储二进制文件及其元数据。元数据存储在Derby数据库中(默认情况下),包括校验和、存储库、路径、创建时间等信息。但是,实际的二进制文件是单独存储的。这取决于你配置文件存储库,文件将存储在一个或多个位置,使用它们的SHA1校验和值为文件名,SHA1值的前两个字符为文件夹名。例如,对于默认的Artifactory安装,您将在ArtifactoryHome /数据/ filestore美元.

Artifactory提供的重复数据删除功能可以为您节省无数gb甚至tb的空间基于校验和的存储.
这就是备份文件存储库以及这些文件的数据库或元数据非常重要的原因。根据实例的大小有不同的方法。
重复数据删除
通过通过校验和引用二进制文件,就像Git或Dropbox一样,并且不依赖于文件系统路径,相同的内容文件永远不会存储超过一次。这是可以优化二进制文件存储的少数几种方法之一。
Checksum-based存储
Artifactory从头开始构建,以优化二进制文件的管理,并具有支持软件开发领域中出现的任何包格式的能力。支持这些特性的关键特性之一是基于校验和的存储。了解更多>>
下面的部分将描述不同的备份方法以及保证二进制文件安全的方法。
1.备份小的人工实例
系统备份是直接备份Artifactory实例的一种简单的内置方式从Artifactory UI内配置.用户管理员可以设置每日、每周、甚至手动定时备份使用cron表达式.
创建系统备份后,它将位于美元ArtifactoryHome /备份/ < backup_key >目录,带有时间戳。的人工系统导入可以用于在出现故障时完全重新创建实例。

其他高级备份选项包括:
- 增量备份-只备份之前备份错过的内容,节省时间
- 包括/排除特定的存储库
- 停留时间-如果不是增量备份,则保留备份的时间段
- 验证磁盘空间—备份前请检查是否有足够的空间
- 排除构建和新的存储库从备份
这种类型的工件备份将创建一组新的存储库文件夹,其中包含与其元数据一起存储的每个工件。如果备份的是大型实例,那么数据的完整副本可能会占用存储空间。您可以通过单独备份文件存储库并执行数据库的框架导出来降低此存储成本(通过REST API导出系统使用Exclude Content = true选项)。
最后,如果您的实例达到500GB-1TB的存储空间,或者您的实例中有超过100万个工件,建议您切换到不同的备份方法。
2.备份大型人工实例
对于具有大量数据集的实例,建议使用替代路由。这是因为大型备份可能需要花费大量的时间来完成,这甚至可能会重叠您的cron持续时间,并导致错过备份间隔。备份的目的是使数据即使在硬件故障的情况下也可用,或者为迁移到不同的版本或实例做好准备。花太多时间在备份上只会适得其反,尤其是当你真的需要备份的时候!
Filestore备份
具有快照/复制功能的第三方IT备份解决方案可以提供更好的控制和性能。它应该指向你的ARTIFACTORY_HOME美元文件系统中的位置。
Amazon S3版本控制服务
S3之类的服务非常适合企业级,因为它们位于云中,并根据需要提供自动扩展,从而消除了管理员数小时的手工工作。他们也有近乎零数据丢失的良好历史。使用S3进行二进制存储可以使用该选项Amazon的S3版本控制服务备份和恢复S3上的二进制文件。
S3版本控制服务还可用于使用S3提供的相同安全性和身份验证机制安全地备份和恢复二进制文件。此外,二进制日志(Binlog)将跟踪以前部署的二进制文件及其路径,并与驻留在S3 bucket上的基于校验和的文件存储库相关联。
提示:文件存储库的任何副本(快照)都可以。建议对该快照的NFS挂载进行定时rsync。
数据库定时快照
备份您的文件存储和数据库非常重要。定期对外部数据库进行快照将完成覆盖。如果没有数据库备份,文件存储本身就是一个文件夹,其中的文件以其校验和命名,这使得无法及时识别它们(另外,您必须重新命名它们)。当需要恢复时,您需要使用最新的可用快照。应该同时复制文件存储库和对外部数据库进行定期快照,以避免引用不存在的二进制文件或其他空值。但是,在复制文件存储库之前,应该先对外部数据库进行快照。
完成不包含内容的完整系统导出也是备份数据的好方法。这相当于DB转储,其中导出了表示二进制文件和存储库位置的xml文件集合。它类似于系统备份,但没有二进制文件。
保证二进制文件安全的其他方法
还有其他方法可以帮助您避免丢失数据,以及在恢复实例之前避免任何停机时间。这些包括,冗余(在不同的位置存储多个副本)和灾难恢复(必要时恢复实例)。
Filestore分片
Artifactory提供分片二进制提供商这使您可以在分片文件存储中管理二进制文件。分片文件存储是在许多物理挂载(M)上实现的存储,它们存储具有冗余(R)的二进制对象,其中R <= M。这个二进制提供程序不是独立的,并且总是用作更复杂的提供程序模板链的一部分。
对文件存储进行分片提供了合理的可伸缩性,但是要小心不要创建太多的分片,因为额外的分片会导致性能影响(我们通常不建议此时超过10个分片,尽管将来可能会改变)。不同之处在于,该过程最初更多的是手动的,这意味着当底层存储接近耗尽时,将需要添加一个额外的挂载。然后,系统将调用平衡机制,根据配置参数重新生成文件存储冗余。
容灾恢复
容灾为您提供解决方案从任何事件中轻松恢复这可能会导致不可逆转的损坏和数据丢失,以及一种优雅的解决方案,可以出于任何其他原因(如服务器机器上的硬件维护)关闭Artifactory。
手动创建容灾
灾难恢复可以手动设置,但是这既耗时又复杂。在引擎盖下,这将包括:
- 匹配本地存储库在主实例上使用目标实例上的相应存储库。
- 设置所有复制关系将关键数据从主服务器移到数据服务器。
跟踪数以百万计的工件并确保正确复制它们的元数据将占用相当多的时间。这里不能有任何错误,因为在灾难恢复需要启动的情况下,不能把时间浪费在“空”工件上。
JFrog任务控制中心的DR
灾难恢复的目的是在整个Artifactory安装宕机的情况下尽可能快地继续提供服务(例如,HA安装中的所有服务器由于站点中的电气故障而宕机)。在这种情况下,请求可以被重路由到Target实例,虽然这不是自动的,但只需在Mission Control中单击一个按钮即可实现。
不要混淆在高可用性配置中设置Artifactory和设置灾难恢复。高可用性配置使用两个或更多冗余Artifactory服务器,以确保如果一个或多个Artifactory服务器宕机(无论是由于某些硬件故障、维护或任何其他原因),只要至少有一个服务器是可操作的,用户就能继续获得服务。设置HA后,服务将自动继续,不需要管理员进行干预。
以一种不会阻塞网络的方式移动数据
同步网络占用大量资源。因此,任务控制中心不会一次性移动所有数据,而是按时间间隔单独移动数据。
配置容灾
JFrog任务控制让您配置完整的系统复制之间的主实例和相应的目标实例.在本例中,Master实例是您的生产实例,Target实例将作为容灾的复制目标。
在“容灾配置”的“管理”模块中显示配置的“主目标”对。
下面演示了任务控制中的全网格拓扑配置。

>>了解有关复制的更多信息并使用Artifactory管理跨多站点拓扑的二进制文件。
为避免冗长且资源密集的同步,在初始化DR流程之前,您组织中的相关部门可能会在任务控制中心和人工工厂之外的主实例和目标实例之间手动同步。这被称为外部同步。
初始化博士
在我们称之为Init的步骤中,任务控制在主实例上的所有本地存储库和目标实例上相应的存储库之间建立复制关系,并将安全设置和各种配置文件从主实例备份到任务控制。这些稍后将被推送到Target实例,尽管在此步骤中不发生数据传输,但它将在Synchronize步骤中发生。
同步存储库
在同步步骤期间,Mission Control开始调用从主实例到目标实例的复制,以便目标实例上的每个本地存储库与主实例上相应的存储库同步。
现在你被保护了!
一旦目标实例上的所有存储库与主实例同步,系统就受到了DR保护。这意味着您可以立即调用从主实例到目标实例的故障转移,以便您的用户可以透明地继续从Artifactory获得服务。
带停机时间的简单迁移
在某些情况下,您只需要设置实例的副本,这可以使用备份来完成。此方法还可以帮助您保留一个“手动”的DR实例,您可以定期从活动集群克隆或复制到该实例。
执行迁移的好处是,它是最简单的升级或实例克隆类型之一,因为它只需要设置一个新实例来将数据迁移到其中,而不需要新实例中的数据。
在此迁移过程中,有两种方法几乎不提供停机时间。第一种方法停机时间短,需要以下步骤:
- 禁用管理->先进的->维护->垃圾收集在两个服务器上
- 旧服务器:复制ARTIFACTORY_HOME /数据/ filestore美元文件夹到新服务器的文件存储文件夹
- 旧服务器:将服务器从网络中移除以阻止新的请求
- 旧服务器:使用"排除的内容"选项已选中(未选择其他选项)
- 旧服务器:关闭< >停机步骤
- 旧服务器:rsync fromARTIFACTORY_HOME /数据/ filestore美元文件夹最后一次移到新服务器的filestore文件夹
- 新建服务器:执行完整的系统导入(Do不选择“排除内容”选项)。
- 新服务器:打开网络流量/将DNS切换到新服务器。
- 新服务器:再次启用垃圾收集
第二种方法比第一种方法更复杂,但几乎没有停机时间。它需要以下步骤:
- 禁用管理->先进的->维护->垃圾收集在两个服务器上
- 旧服务器:复制ARTIFACTORY_HOME /数据/ filestore美元文件夹到新服务器的文件存储文件夹
- 旧服务器:在选择“排除内容”选项的情况下执行完整的系统导出(未选择其他选项)
- 新服务器:执行完整系统导入(不选择排除内容选项)。
- 旧服务器:设置所有本地存储库以复制到新服务器上的存储库,并关闭“同步删除”选项。
- 新服务器:打开网络流量/将DNS切换到新服务器。
- 旧服务器:执行所有复制作业
- 旧服务器:关闭
- 新服务器:再次启用垃圾收集
最终,您选择的迁移方法将取决于您的偏好、对停机时间的容忍度甚至行业。例如,出于安全目的,金融行业倾向于使用文件存储分片。这两种方法的主要区别在于复制部分,复制部分允许您移动导出/导入过程中部署的任何工件。
结论
正如本白皮书所述,有多种方法可以保护二进制文件。根据您的设置、行业需求、存储库大小和备份频率(小增量或灾难恢复),您可以选择适合您组织的备份。
所描述的所有方法都有一个共同的目标:在可能影响开发和发布时间的意外事件的情况下最小化停机时间。以及最大化开发人员的生产力。
