如何在低停机时间内将Artifactory从一个实例迁移到另一个实例?(视频)

萨利赫萨马拉
2021-02-02 19:49

视频转录

大家好,我是Aaron Rhodes。今天,我们将介绍从一个Artifactory实例迁移到另一个实例的过程,迁移之间的停机时间非常短甚至没有。现在通常要做的是导出系统,切断用户,然后在新实例上启用用户之前,在目标实例上导入系统。但是如果要在一个实例和另一个实例之间传输大量数据,那么导入时间可能会很长。这可能需要几天的时间。所以这个过程就是通过一些技巧来减少时间。这里,我们有一个Artifactory实例。这是6。使用这些存储库的X实例,以及我们的目标实例,它是安装了版本7的干净实例。这就是我们要导入的东西。

我们要做的第一步不是导出。我们会让用户在这里做他们的事情,我们会去到这个实例的shell我们会做。我们会在两者之间进行rsync。这应该会复制所有数据。好了,现在我们要同步所有数据。现在它所做的是同步源实例文件存储中的所有文件,并将它们同步到目标实例的文件存储中。这将节省我们的时间,如果有……想象有很多很多tb的数据要传输,我们将做所有这些来减少我们需要传输的时间。现在我们把这些都同步了。

现在,在这个例子中,假设你在现场,也许你在周末或者什么时候做这个,你要做的是,这可能需要很多很多小时甚至几天来传输所有的数据。然后你要做的是在某个时刻你决定要进行切换,然后你会再次进行rsync,这是为了在rsync发生时赶上源实例上发生的任何活动。所以你有一个需要追赶的。再次进行rsync。我们再来一次。当然,不会有什么变化,但是,这将是非常快的。现在我们马上开始导出。现在我们的用户仍然可以继续做他们的事情。我们还不需要切断它们,但我们确实需要出口。

在导出中,我们要先把它放到一个好点的地方。我们把它放到根目录的主文件夹里。我有几个选项要用。一是排除内容。这将确保导出不会将所有二进制文件导出到平面文件中,备份的平面二进制文件。因为我们要同步这些,我们不会在导出的上下文中使用它们。我们还将使用ZIP文件,因为我想使用SCP将一个文件传输到目标实例。这个文件就是ZIP。这将是数据库导出。我们来创建这个。 It has created this file called something timestamp here dot ZIP. And we’ll go back to our shell and we can see that right there.

现在,我们将执行SCP命令将其传输到目标实例。我们想要使用这个文件。这就是我们的文件,为了简单起见,我将目标文件命名为export。zip。好了。好了,现在传输文件。我们在目标实例上有它。此时,我们需要在源实例上做一些工作。现在我们要建立复制。我们将复制到目标实例以赶上它,而不是再次尝试rsync。我们真的不能那样做。 We can’t rsync the database. So we’re going to use the replication of the source instance to do that for us. So let’s go… And we only need to do locals. Virtuals you can’t just replicate, and remotes, we don’t really need remote cache because it can be caught up again on the target instance. That might cause us some bandwidth, but it’s usually not very consequential. So we’re only going to replicate the locals.

现在我们要做的就是把我们放在这里。我将继续设置这些,我会在视频中截取这个因为复制是另一个主题,我相信你们已经知道怎么做了。现在我已经在这里建立了三个副本。这里有一个cron表达式,它是一年一次,因为我需要一个cron表达式,凭证将是目标实例的未来凭证。这里的存储库将是相同的名称。因为我们将在目标实例上导入,所以我为目标使用了相同的名称和与目标相同的凭证。我甚至还没有导入目标实例。如果我测试这个,它会失败因为目标实例上还没有任何东西。没有这个名字的存储库。所以我必须确保名字的拼写是正确的。 That’s how we set it up.

现在我们继续在目标实例上进行导入,现在应该很容易了。我们已经复制了文件。系统,在导入系统上导入,浏览文件。在这儿。你会注意到导入有一个排除内容选项。这与导出中的排除内容不同,我们不想使用它。这将使它甚至不导入存储库。所以我们不需要选择任何选项。我们可以继续导入。现在它会让我在这里登录,因为凭证已经改变了。 So I’m going to use the new credentials. And our repositories now, we now have all this, including some of our files here in the import. And it accepted the import, it didn’t have any errors because we had already rsynced the files from the file source to the target file store.

现在我们都被导入缠住了。现在我们要做的最后一件事,在这一点上,这是我们要用最小的停机时间对用户进行切换的地方。所以在这一点上,切断你的用户。他们会有你做这个手术所需的任何停机时间。你要切断它们。您将为它们切换到使用目标实例而不是源实例做好准备。您将进入本地存储库并启动复制。砰,砰,砰。看起来我做错了什么。啊哈,我们一定要把这样的错误考虑进去。 I believe I know what I did. I did not fill in the repository name.

好了,这应该能解决问题。如果我们现在测试它是成功的。保存。回到本地存储库。好吧,保存。现在我们来发射这个。很好,这是成功的,现在所有事情都将被目标实例捕获,现在我们可以打开用户来使用目标,这有效地将停机时间缩小到我们可能做到的最小值,并让用户恢复业务。非常感谢。