视频

了解更多
在本文的第一部分“为什么将 Dynomite 数据库迁移到 Redis Enterprise 主动-主动数据库?”中,我们比较了 Dynomite 和 Redis Enterprise 的架构和特性。 我们展示了 Redis Enterprise 如何帮助您以功能丰富、易于管理的方式对 Redis Enterprise 进行地理分布,而不必担心并发写入之间的冲突。
第二部分将描述可用于从 Dynomite 迁移到 Redis Enterprise 的迁移选项。
请注意,此后,Redis Enterprise 的自管理产品将被称为“Redis Enterprise Software”,托管产品将被称为“Redis Enterprise Cloud”或“云订阅”。
让我们来实际操作一下,看看如何运行两种类型的迁移
为了便于说明,让我们假设我们有一个跨越两个数据中心的 Dynomite 集群:dc-a 和 dc-b。 每个数据中心都有一个机架,每个机架由两个节点组成,数据集分布在这两个节点之间。
如果我们还记得我们对 Dynomite 架构的描述,我们知道每个 Dynomite 机架都包含完整的数据集。
因此,无论采用导入/导出还是主动-被动方式,我们都可以将迁移范围限制在 Dynomite 设置中的单个机架内。
让我们选择 rack-1-dc-a,并假设其两个节点的 IP 如下
为了清晰起见,以下是我们的 Dynomite 设置的 yaml 配置
#a1
dyn_o_mite:
datacenter: dc-a
dyn_listen: 10.0.0.1:7379
dyn_port: 7379
dyn_seed_provider: simple_provider
dyn_seeds:
- 10.0.0.3:7379:rack1:dc-a:4294967294
- 10.0.0.4:7379:rack1:dc-b:4294967294
- 10.0.0.2:7379:rack1:dc-b:2147483647
listen: 0.0.0.0:8379
rack: rack1
servers:
- 127.0.0.1:6379:1
timeout: 150000
tokens: 2147483647
secure_server_option: datacenter
pem_key_file: /root/dynomite/conf/dynomite.pem
data_store: 0
stats_listen: 127.0.0.1:22222
read_consistency : DC_QUORUM
write_consistency : DC_QUORUM
#a2
dyn_o_mite:
datacenter: dc-a
dyn_listen: 10.0.0.3:7379
dyn_port: 7379
dyn_seed_provider: simple_provider
dyn_seeds:
- 10.0.0.1:7379:rack1:dc-a:2147483647
- 10.0.0.4:7379:rack1:dc-b:4294967294
- 10.0.0.2:7379:rack1:dc-b:2147483647
listen: 0.0.0.0:8379
rack: rack1
servers:
- 127.0.0.1:6379:1
timeout: 150000
tokens: 4294967294
secure_server_option: datacenter
pem_key_file: /root/dynomite/conf/dynomite.pem
data_store: 0
stats_listen: 127.0.0.1:22222
read_consistency : DC_QUORUM
write_consistency : DC_QUORUM
#b1
dyn_o_mite:
datacenter: dc-b
dyn_listen: 10.0.0.2:7379
dyn_port: 7379
dyn_seed_provider: simple_provider
dyn_seeds:
- 10.0.0.4:7379:rack1:dc-b:4294967294
- 10.0.0.1:7379:rack1:dc-a:4294967294
- 10.0.0.3:7379:rack1:dc-a:2147483647
listen: 0.0.0.0:8379
rack: rack1
servers:
- 127.0.0.1:6379:1
timeout: 150000
tokens: 2147483647
secure_server_option: datacenter
pem_key_file: /root/dynomite/conf/dynomite.pem
data_store: 0
stats_listen: 127.0.0.1:22222
read_consistency : DC_QUORUM
write_consistency : DC_QUORUM
#b2
dyn_o_mite:
datacenter: dc-b
dyn_listen: 10.0.0.4:7379
dyn_port: 7379
dyn_seed_provider: simple_provider
dyn_seeds:
- 10.0.0.2:7379:rack1:dc-b:2147483647
- 10.0.0.1:7379:rack1:dc-a:4294967294
- 10.0.0.3:7379:rack1:dc-a:2147483647
listen: 0.0.0.0:8379
rack: rack1
servers:
- 127.0.0.1:6379:1
timeout: 150000
tokens: 4294967294
secure_server_option: datacenter
pem_key_file: /root/dynomite/conf/dynomite.pem
data_store: 0
stats_listen: 127.0.0.1:22222
read_consistency : DC_QUORUM
write_consistency : DC_QUORUM
关于此配置和用于测试本教程的设置的一些观察结果
现在我们了解了我们的设置,并决定了我们将使用哪个机架进行迁移,让我们创建一个 Redis Enterprise 数据库。
由于本文的目的不是解释如何设置集群或创建数据库,请参阅以下文档以启动并运行您的主动-主动数据库
为了测试我们的两种迁移方案,我创建了一个跨越两个 Redis Enterprise Software 集群的主动-主动数据库——一个在欧洲,一个在美国。 每个集群由三个运行 Ubuntu 18.04 的虚拟机组成。 请注意,如果您创建一个没有主动-主动的数据库,迁移步骤将相同,除非本文另有说明。
让我们继续进行我们的第一种类型的迁移。
Redis OSS 提供了一个名为 Redis 数据库备份文件或 RDB 的持久性选项,它会定期或在 SAVE 或 BGSAVE 命令触发时执行数据集的时间点快照。
这些快照保存在 .rdb 文件中,以下简称 RDB 文件。 我们将从我们的 Dynomite 服务器导出它们,并将它们导入到我们的 Redis Enterprise 数据库中。 请注意,使用此解决方案,增量迁移是不可能的,并且导入可能需要一段时间,具体取决于数据的大小。
重要提示:Redis Enterprise 的非地理分布式数据库和主动-主动数据库之间存在很大差异
使用 RDB 文件将数据从 Dynomite 迁移到 Redis Enterprise 的方法如下
让我们更详细地了解上述步骤。
如果您使用“apt-get”安装 Redis OSS,则运行在您的 Dynomite 节点上的 Redis OSS 实例的配置文件默认位于 /etc/redis 中;如果您自己构建了 Redis OSS,则位于您的 Redis 文件夹中。 此文件名为“redis.conf”。
使用您喜欢的文本编辑器打开此文件,并搜索“dbfilename”指令。 更改每个节点上的文件名,例如
这确保了当我们导出我们的 RDB 文件到外部存储时,它们不会具有相同的名称。 如果您愿意,您可以跳过此步骤,并在拍摄快照后更改它们的名称。
可选地,您还可以
请注意,在编辑 Redis OSS 配置文件后,您需要重新启动 Redis OSS 服务器,以便您的更改生效。
现在停止通过端口 8379 进入您的 Dynomite 数据库的流量。 同样,如果您要导入到主动-主动数据库,并且已经仔细规划了您的迁移,以免在导入期间冒任何意外覆盖的风险,您可以将流量切换到您的主动-主动数据库。
启动 redis-cli。 不要使用端口 8379,Dynomite 的侦听端口。 而是使用端口 6379。 这是因为我们需要连接到运行在我们的节点上的 Redis OSS 实例,而不是连接到不支持 SAVE 命令的 Dynomite 集群。 您可以只运行 redis-cli 而不带任何命令行参数。
在每个节点上,运行 DBSIZE 命令。 您将获得存储在每个 Redis OSS 实例上的键的数量。 总数应该是我们的 Dynomite 数据库中的键的数量。
#a1
127.0.0.1:6379> dbsize
(integer) 1323
#a2
127.0.0.1:6379> dbsize
(integer) 1371
运行 SAVE 命令并检查您的 RDB 文件是否已在 /var/lib/redis 中创建——或您指定的任何目录。
我们现在准备好将我们的两个 RDB 文件导出到外部存储。
对于本教程,我将把这些文件导出到 Google Cloud 的 Cloud Storage,但您也可以使用其他外部存储选项,例如 FTP 服务器、另一个云服务提供商的存储解决方案,或从您的 Redis Enterprise 集群访问的外部磁盘。 您可以在下面找到关于这些选项的更多信息
在 Google Cloud 中,我创建了以下内容
现在对于每个节点,我们将运行以下命令
gsutil cp path_to_dump_file gs://your_bucket
我们现在可以在我们的 Google Cloud 存储桶中看到我们的两个 RDB 文件
我们现在准备好将它们导入到我们的主动-主动数据库。
登录到 Redis Enterprise UI 并选择您的主动-主动数据库。 如果像本教程一样,您创建了一个跨越多个集群的 Redis Enterprise 主动-主动数据库,您可以通过您喜欢的任何集群连接到 UI。 在本教程中,我们将使用我们的欧洲 (EU) 集群。
如果您使用的是云主动-主动数据库,只需连接到云 UI 并选择您的数据库。
让我们导航到我们数据库的配置页面,然后单击导入按钮。 选择适当的存储类型。 在我们的例子中,这将是 Google Cloud Storage。
我们现在可以添加我们的两个 RDB 文件的云存储路径,例如
我们还需要添加以下信息
这些信息可以在您为您的 Google Cloud 服务帐户创建密钥时下载的 JSON 密钥文件中找到。
请注意,私钥在 JSON 文件中以奇怪的格式显示;它具有引号和换行符。 为了快速地以 Redis Enterprise UI 可以接受的方式格式化它,只需启动一个 python 解释器并打印它
print(WHOLE_COPIED_KEY)
我们现在有以下导入配置
单击导入并等待导入完成,这将取决于数据库的大小。
使用 redis-cli 连接到您的 Redis Enterprise 数据库的端点。尝试读取一些键,并运行 DBSIZE 命令来检查您是否拥有正确的键的总数。
redis-12000.internal.helene-eu-cluster.demo.redislabs.com:12000> dbsize
(integer) 2694
不要忘记检查 Active-Active 地理复制功能!只需连接到另一个集群的数据库端点,在本例中是美国的集群,并检查您获得的键的数量。
您的迁移现已完成。如果您尚未这样做,您可以将流量切换到您的数据库。
现在让我们运行持续迁移。
Redis Enterprise 的 ‘ReplicaOf’ 功能(在 Redis Cloud UI 中也称为 Active-Passive)允许我们在两个 Redis 数据库之间持续复制数据。主要的优点是在初始同步完成后,它会复制增量,这意味着几乎没有观察到应用程序端的停机时间。
步骤如下:
ReplicaOf 旨在以 Active-Passive 方式使用。这意味着目标被假定为被动的,并且需要容忍,以便目标得到完全重新同步(刷新目标数据库+从源数据库同步)。
在开始迁移之前,让我们讨论一些安全方面的问题。
首先,您需要为 Dynomite 机架所在的网络添加一个自定义 TCP 的入站规则,端口为 6379。
其次,需要更新 Dynomite 节点上的 Redis OSS 配置文件。 默认情况下,Redis 仅侦听 IPv4 和 IPv6(如果可用)环回接口地址。 这意味着 Redis OSS 只能接受来自运行它的同一主机的客户端连接。 我们需要更新 Redis OSS 的 “bind” 指令,以便 Redis OSS 可以侦听来自我们的 Redis Enterprise 集群主机的连接。
有两种方法可以做到这一点:
让我们详细讨论这两种选择。
第一个选择是将您的 Dynomite 机架所在的 VPC 与您的 Redis Enterprise 集群所在的 VPC 进行对等连接。 请注意,如果像我们一样,您创建了一个 Active-Active 数据库,它可以位于任何集群中。 和以前一样,我们将使用我们的欧洲 (EU) 集群进行演示。
建立网络对等连接后,您只需编辑 redis.conf 文件中的 “bind” 指令:在默认环回接口地址后添加 Dynomite 机器的私有 IP。
对机架中的所有节点执行此操作即可! 不要忘记重新启动您的 Redis OSS 实例。
如果您无法或不想对您的网络进行对等连接,那么您需要按以下方式更新每个节点上的 Redis OSS 配置文件:
重要提示: 必须执行最后一步,因为 Dynomite 不支持 Redis 的 OSS AUTH 命令,这阻止我们设置数据库密码。 因此,如果您不使用防火墙来控制谁连接到使用的端口,任何人都可以连接到 Redis OSS 实例并访问/更改/删除其数据。 仅对您的 Redis Enterprise 集群主机开放端口 6379。
如果您真的想使用密码,您可以这样做。 但是这将使运行持续迁移变得不可能,因为您需要执行以下操作:
再考虑一个安全问题,我们就可以开始我们的迁移了!
为防止未经授权的访问您的数据,Redis Enterprise 支持 TLS 协议。
如果您正在使用 Redis Enterprise 软件,您可以专门配置它以进行 ReplicaOf 通信。 如果您正在使用 Redis Enterprise Cloud,您可以启用 TLS。
在 Redis Enterprise UI 中,让我们导航到我们的 Active-Active 数据库配置页面,然后单击 Edit。
我们可以选择启用 Active-Passive/ReplicaOf。 一旦我们这样做了,我们可以添加以下格式的源
redis://:@IP:port
请注意
在我们的例子中,使用 VPC 对等连接,这就是我们的源的样子
现在让我们采取以下步骤:
和以前一样,使用 redis-cli 连接到您的数据库,并检查您的数据是否已迁移。 通过连接到其他集群/其他本地端点来检查 Active-Active 地理复制。
Redis 多年来一直被开发人员评为最受欢迎的数据库。 如果您正在使用 Dynomite,这可能是因为您也喜欢 Redis。 在 Redis(Redis OSS 和 Redis Enterprise 的所在地)中,我们可以帮助您的组织以更易于管理的方式对 Redis 进行地理分布,同时保持冲突解决的最高学术标准。