视频

了解更多
在这篇文章的第一部分,“为什么要将 Dynomite 数据库迁移到 Redis Enterprise Active-Active 数据库?”中,我们比较了 Dynomite 和 Redis Enterprise 的架构和特性。我们展示了 Redis Enterprise 如何帮助您以功能丰富、易于管理的方式地理分布 Redis Enterprise,并避免担心并发写入之间的冲突。
第二部分将描述可用于从 Dynomite 迁移到 Redis Enterprise 的迁移选项。
请注意,此后 Redis Enterprise 的自托管产品将被称为“Redis Enterprise 软件”,而托管产品将被称为“Redis Enterprise Cloud”或“云订阅”。
让我们实际操作,看看如何运行两种类型的迁移
为了说明,假设我们有一个跨越两个数据中心的 Dynomite 集群:dc-a 和 dc-b。每个数据中心都有一个机架,每个机架由两个节点组成,数据集在这些节点之间分布。
如果我们记得 Dynomite 架构的描述,我们知道每个 Dynomite 机架都包含完整的数据集。
因此,我们可以将迁移范围限制在我们 Dynomite 设置中的单个机架内,无论是导入/导出还是 Active-Passive。
让我们选择 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 数据库。
由于本文的目的是解释如何设置您的集群或创建您的数据库,请参阅以下文档以启动和运行您的 Active-Active 数据库
为了测试我们的两种迁移场景,我创建了一个跨越两个 Redis Enterprise 软件集群的 Active-Active 数据库 - 一个在欧洲,另一个在美国。每个集群由三台运行 Ubuntu 18.04 的 VM 组成。请注意,如果您创建的数据库没有 Active-Active,则迁移步骤将相同,除非本文另有说明。
让我们继续进行第一种迁移类型。
Redis OSS 提供了一个称为 Redis 数据库备份文件或 RDB 的持久性选项,该选项在指定的时间间隔或由 SAVE 或 BGSAVE 命令触发时执行数据集的某个时间点的快照。
这些快照保存在 .rdb 文件中,此后称为 RDB 文件。我们将从 Dynomite 服务器导出它们,并将其导入到我们的 Redis Enterprise 数据库中。请注意,此解决方案不支持增量迁移,并且导入可能需要一段时间,具体取决于数据的大小。
重要事项:Redis Enterprise 的非地理分布式数据库和 Active-Active 数据库之间存在很大差异
使用 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 数据库的流量。同样,如果您正在导入 Active-Active 数据库,并且已仔细规划迁移以避免在导入过程中意外覆盖任何数据,则可以将流量切换到 Active-Active 数据库。
启动 redis-cli。不要使用端口 8379(Dynomite 的侦听端口)。而是使用端口 6379。这是因为我们需要连接到节点上运行的 Redis OSS 实例,而不是连接到 Dynomite 集群,因为 Dynomite 集群不支持 SAVE 命令。您只需运行 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 文件
我们现在可以将它们导入到 Active-Active 数据库中。
登录 Redis Enterprise UI 并选择您的 Active-Active 数据库。如果像本教程一样,您创建了一个跨越多个集群的 Redis Enterprise Active-Active 数据库,则可以通过您喜欢的任何集群连接到 UI。在本教程中,我们将使用我们的欧洲 (EU) 集群。
如果您使用的是云 Active-Active 数据库,只需连接到云 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 Geo-Duplication!只需连接到另一个集群的数据库端点,在本例中为美国端点,并检查您获得的键数量。
您的迁移现已完成。如果您尚未执行此操作,则可以将流量切换到您的数据库。
现在让我们运行一个持续迁移。
Redis Enterprise 功能“ReplicaOf”(在 Redis Cloud UI 中也称为 Active-Passive)允许我们在两个 Redis 数据库之间持续复制数据。主要优点是它在完成初始同步后复制增量,这意味着几乎没有观察到应用程序端的停机时间。
步骤如下
ReplicaOf 旨在以 Active-Passive 方式使用。这意味着目标被假定为被动,并且需要容忍它,以便目标完全重新同步(刷新目标数据库 + 从源数据库同步)。
在开始迁移之前,让我们讨论一些安全方面。
首先,您需要为 Dynomite 机架所在的网络添加一个带有 6379 端口的自定义 TCP 入站规则。
其次,需要更新两个 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 实例并访问/更改/删除其数据。仅将 6379 端口打开到您的 Redis Enterprise 集群主机。
如果您确实想使用密码,您可以。但这会使您无法运行持续迁移,因为您需要执行以下操作
再考虑一个安全问题,我们就可以开始迁移了!
为了防止未经授权访问您的数据,Redis Enterprise 支持 TLS 协议。
如果您使用的是 Redis Enterprise 软件,您可以专门为其配置 ReplicaOf 通信。如果您使用的是 Redis Enterprise Cloud,您可以 在一般情况下启用 TLS。
在 Redis Enterprise UI 中,让我们导航到我们的 Active-Active 数据库配置页面并单击编辑。
我们有选择启用 Active-Passive/ReplicaOf 的选项。完成后,我们可以添加以下格式的源
redis://:@IP:port
请注意
在本例中,使用 VPC 对等,我们的源如下所示
现在让我们执行以下步骤
与之前一样,使用 redis-cli 连接到您的数据库并检查您的数据是否已迁移。通过连接到其他集群/其他本地端点来检查 Active-Active Geo-Duplication。
多年来,Redis 被开发人员评为 最受欢迎的数据库。如果您使用的是 Dynomite,那很可能是因为您也喜欢 Redis。在 Redis(Redis OSS 和 Redis Enterprise 的家园),我们可以帮助您的组织以更易于管理的方式进行 Redis 地理分布,同时保持冲突解决的最高学术标准。