人工备份和灾难恢复的最佳实践

安杰洛·马乔著

介绍

就在DevOps管道, JFrog Artifactory是您所有二进制需求的中心枢纽。在生产中,每一分钟都是宝贵的。无论是部署最新的包,还是缓存公开可用的包,始终保持所有二进制文件可用是至关重要的。挑战在于,不存在坚不可摧的电脑或完美无缺的软件,这就是为什么我们必须确保有一个备份计划。

本白皮书描述了解决这些问题的几种方法,希望其中一种最适合您的组织。

Artifactory如何存储二进制文件,它有什么特别之处?

保护二进制文件的经典方法是使用文件的循环备份,并在出现任何故障时使用它们。Artifactory提供了备份二进制文件的特定方法,以便您可以将它们导入到新实例中并保留所有引用。正如下面一节所描述的,Artifactory存储二进制文件的方式与通常的存储方式略有不同,因此在执行这些任务时必须考虑到这一点。

Artifactory存储二进制文件及其元数据。元数据存储在Derby数据库中(默认情况下),包括校验和、存储库、路径、创建时间等信息。然而,实际的二进制文件是单独存储的。这取决于你配置您的文件存储时,文件将存储在一个或多个位置,使用它们的SHA1校验和值作为文件名,SHA1值的前两个字符作为文件夹名。例如,在默认的Artifactory安装中,您将在ArtifactoryHome /数据/ filestore美元

Artifactory文件结构

Artifactory提供了重复数据删除功能,可以为您节省无数gb甚至tb的空间基于校验和的存储

这就是为什么备份您的文件存储以及这些文件的数据库或元数据是很重要的。根据实例的大小有不同的方法。

重复数据删除
通过校验和引用二进制文件,就像Git或Dropbox那样,并且不依赖于文件系统路径,相同内容的文件永远不会存储超过一次。这是优化二进制文件存储的少数几种方法之一。
Checksum-based存储
Artifactory是为二进制文件的优化管理而构建的,能够支持软件开发领域中出现的任何包格式。支持这些特性的关键特性之一是基于校验和的存储。了解更多>>

下面的部分将描述不同的备份方法以及保证二进制文件安全的方法。

1.备份小型Artifactory实例

系统备份是一种简单的、内置的直接备份Artifactory实例的方法在Artifactory UI中进行配置.用户管理员可以设置每日、每周甚至手动定期备份使用cron表达式

一旦创建了系统备份,它将位于美元ArtifactoryHome /备份/ < backup_key >目录,带有时间戳。的Artifactory系统导入然后,如果发生故障,可以完全用于重新创建实例。

Artifactory每日备份

其他高级备份选项包括:

  • 增量备份-只备份上次备份遗漏的内容,节省时间
  • 包括/排除特定的存储库
  • 停留时间-如果不是增量备份,则保留备份的时间周期
  • 验证磁盘空间—备份前,请确认有足够的备份空间
  • 排除构建和和新的存储库从备份

这种类型的Artifactory备份将创建一组新的存储库文件夹,其中包含与元数据一起存储的每个工件。如果您正在备份大型实例,那么这种完整的数据副本可能会对您的存储造成损失。您可以通过单独备份文件存储并执行数据库的框架导出(系统导出通过REST API使用Exclude Content = true选项)。

最后,如果实例的存储容量达到500GB-1TB,或者实例中的Artifacts超过100万个,建议切换到不同的备份方法。

2.备份大型Artifactory实例

对于具有大量数据集的实例,建议采用替代路由。这是因为大型备份可能需要大量的时间才能完成,这甚至可能会重叠您的cron持续时间,并导致错过备份间隔。备份的目的是使数据即使在硬件故障时也可用,或者为迁移到不同的版本或实例做好准备。在备份上花费太多时间会适得其反,特别是当您确实需要备份时!

Filestore备份

具有快照/复制功能的第三方IT备份解决方案可以提供更好的控制和性能。它应该指向你的ARTIFACTORY_HOME美元文件系统中的位置。

Amazon S3版本控制服务

S3等服务非常适合企业级,因为它们位于云中,并根据需要提供自动伸缩,这为管理员省去了数小时的手工工作。它们还拥有接近零数据丢失的良好历史。使用S3进行二进制存储可以使用该选项Amazon的S3版本控制服务在S3上备份和恢复二进制文件。

S3版本控制服务还可以使用S3提供的相同安全性和身份验证机制安全备份和恢复二进制文件。此外,二进制日志(Binlog)将跟踪之前部署的二进制文件及其路径,并与S3桶中基于校验和的文件存储相关联。

提示:文件存储的任何副本(快照)都可以。还建议定期对专用于此快照的NFS挂载进行rsync。

数据库定时快照

备份您的文件存储和数据库是很重要的。定期对外部数据库进行快照将完成您的覆盖。如果没有数据库备份,文件存储本身只是一个文件夹,其中的文件是以校验和命名的,这使得无法及时识别它们(另外,您必须重新命名它们)。恢复时,需要使用最新的可用快照。复制文件存储和对外部数据库进行定时快照应该同时进行,以避免引用不存在的二进制文件或其他空值。但是,在复制文件存储之前,应该先获取外部数据库的快照。

在排除内容的情况下完成完整的系统导出也是备份数据的好方法。这相当于一个DB转储,其中导出了代表二进制文件和存储库位置的xml文件集合。它类似于系统备份,但没有二进制文件。

保证二进制文件安全的其他方法

还有其他方法可以帮助您避免丢失数据,以及实例恢复之前的任何停机时间。这些包括,冗余(在不同位置存储多个副本)和灾难恢复(必要时恢复实例)。

Filestore分片

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

对文件存储进行分片提供了合理的可伸缩性,但是要谨慎,不要创建太多的分片,因为额外的分片确实会导致性能影响(我们通常不建议此时超过10个分片,尽管这在未来可能会改变)。不同之处在于,该过程最初更加手动,这意味着当底层存储接近耗尽时,将需要添加一个额外的挂载。然后,系统将调用平衡机制,根据配置参数重新生成文件存储冗余。

容灾恢复

DR为您提供了解决方案从任何事件中轻松恢复这可能会导致不可逆转的损坏和数据丢失,以及一个优雅的解决方案,允许由于任何其他原因(如服务器机器上的硬件维护)关闭Artifactory。

手动设置容灾

可以手动设置灾难恢复,但这既耗时又复杂。在幕后,这将包括:

  • 匹配本地存储库在主实例上使用目标实例上对应的存储库。
  • 建立所有复制关系将关键数据从主数据移到数据。

跟踪数以百万计的工件并确保正确复制它们的元数据将花费相当多的时间。这里不能有任何错误,因为在需要启动灾难恢复的情况下,不能在“空”工件上浪费时间。

DR和JFrog任务控制

灾难恢复的目的是在整个Artifactory安装宕机(例如,HA安装中的所有服务器由于站点中的电气故障而宕机)时继续尽可能快地提供服务。在这种情况下,可以将请求重新路由到Target实例,虽然这不是自动的,但只需单击Mission Control中的一个按钮就可以实现。

不要将在高可用性配置中设置Artifactory与设置灾难恢复相混淆。高可用性配置使用两个或多个冗余的Artifactory服务器,以确保在一个或多个Artifactory服务器宕机(无论是由于硬件故障、维护还是任何其他原因)时,只要至少有一个服务器处于运行状态,用户就可以继续获得服务。HA设置完成后,服务将自动继续,无需管理员干预。

以不会阻塞网络的方式移动数据

同步网络是资源密集型的。出于这个原因,任务控制中心不会一次性移动所有数据,而是按时间间隔逐个移动数据。

配置容灾

JFrog任务控制让你配置完整的系统复制之间的主实例和相应的目标实例.在本例中,Master实例是您的生产实例,而Target实例将作为DR的复制目标。

在“容灾配置”的“管理”模块中显示配置的“主备”和“目标”pair。

下面演示了任务控制中的全网格拓扑配置。

JFrog任务控制全网格拓扑配置

>>了解关于复制的更多信息以及使用Artifactory跨多站点拓扑管理二进制文件。

为了避免长时间和资源密集型的同步,在初始化DR流程之前,组织中的相关部门可能会在任务控制和Artifactory之外的主实例和目标实例之间手动同步。这被称为外部同步。

初始化博士

在我们称为Init步骤的过程中,任务控制在主实例上的所有本地存储库与目标实例上的相应存储库之间建立复制关系,并将安全设置和各种配置文件从主实例备份到任务控制。这些稍后会被推到Target实例,尽管在此步骤中没有发生数据传输,但它将在Synchronize步骤中发生。

同步存储库

在同步步骤期间,Mission Control开始调用从主实例到目标实例的复制,以便目标实例上的每个本地存储库与主实例上相应的存储库同步。

现在你被保护了!

Target实例上的所有存储库都与Master实例同步后,系统就受到了容灾保护。这意味着您可以立即从Master实例调用故障转移到Target实例,这样您的用户就可以透明地继续从Artifactory获得服务。

带停机时间的简单迁移

在某些情况下,您可能只想建立实例的副本,这可以通过备份来完成。此方法还可以帮助您保留一个“手动”DR实例,定期将其克隆到活动集群或从活动集群复制到该实例。

执行迁移的好处是,它是最简单的升级或实例克隆类型之一,因为它只需要设置一个新实例来将数据迁移到其中,并且不需要新实例中的数据。

在迁移过程中,有两种方法几乎没有停机时间。第一种方法停机时间短,需要以下步骤:

  1. 禁用管理->先进的->维护->垃圾收集在两台服务器上
  2. 旧服务器:复制ARTIFACTORY_HOME /数据/ filestore美元文件夹转移到新服务器的文件存储文件夹
  3. 旧服务器:将服务器从网络中移除以阻止新请求
  4. 旧服务器:使用“排除的内容选择“选项”(没有选择其他选项)
  5. 旧服务器:关闭< >停机步骤
  6. 旧服务器:rsync fromARTIFACTORY_HOME /数据/ filestore美元最后一次将文件夹转移到新服务器的文件存储文件夹中
  7. 新服务器:执行完全系统导入(Do选择排除内容选项)。
  8. 新服务器:打开网络流量/将DNS切换到新服务器。
  9. 新服务器:再次启用垃圾收集

第二种方法比第一种方法更复杂,但几乎没有停机时间。它需要以下步骤:

  1. 禁用管理->先进的->维护->垃圾收集在两台服务器上
  2. 旧服务器:复制ARTIFACTORY_HOME /数据/ filestore美元文件夹转移到新服务器的文件存储文件夹
  3. 旧服务器:选择“排除内容”选项执行完整的系统导出(没有选择其他选项)
  4. 新服务器:执行完全系统导入(不选择排除内容选项)。
  5. 旧服务器:设置所有本地存储库复制到新服务器上的存储库,同时关闭“同步删除”选项。
  6. 新服务器:打开网络流量/将DNS切换到新服务器。
  7. 旧服务器:执行所有复制任务
  8. 旧服务器:关闭
  9. 新服务器:再次启用垃圾收集

最终,您选择的迁移方法将取决于您的偏好、对停机时间的容忍度甚至行业。例如,出于安全目的,金融行业倾向于使用文件存储分片。这两种方法的主要区别在于复制部分,它允许您移动在导出/导入过程中部署的任何工件。

结论

正如白皮书中所描述的,有多种方法来保护您的二进制文件。根据您的设置、行业需求、存储库大小和备份频率(小型增量恢复或灾难恢复),您可以选择适合您的组织的备份。

所描述的所有方法都有一个共同的目标:在可能影响开发和发布时间的意外事件发生时,尽量减少停机时间。以及最大限度地提高开发人员的生产力。

要么快速释放,要么死亡