使用 AWS InfluxDB 迁移脚本将您的 InfluxDB OSS 2x 数据迁移到 Ama

使用 AWS InfluxDB 迁移脚本将 InfluxDB OSS 2x 数据迁移到 Amazon Timestream

作者 Trevor Bonas 发表于 2024年7月25日 高级知识 (300), Amazon Timestream, 技术指南

永久链接 评论 分享

此帖子由 Improving 和 AWS 共同撰写,并在 Improving 博客 和 AWS 数据库博客 上双重发布。

关键要点

AWS与InfluxData合作推出了Amazon Timestream for InfluxDB,这是流行的开源时间序列数据库引擎 InfluxDB 2x 的托管版本。许多 InfluxDB 客户要求提供一种快速且简单的方式将他们的数据库迁移到这个托管服务。我们构建了 AWS InfluxDB 迁移脚本,以帮助您完成迁移。您可以使用该脚本迁移 InfluxDB 数据,包括桶、仪表板、任务和其他键值数据。

脚本以及更详细的文档可在 Amazon Timestream 工具库 中找到。

在本文中,我们演示了如何使用 AWS InfluxDB 迁移脚本将数据从现有的 InfluxDB OSS 2x 实例迁移到 Timestream for InfluxDB。最后,我们展示了一种执行实时迁移的方法,并配备额外的 AWS 资源。

解决方案概述

以下架构图提供了解决方案的高级视图。

AWS InfluxDB 迁移脚本能够迁移特定桶及其元数据,可以从多个组织中迁移多个桶,或执行完整迁移。

脚本通过创建源数据的本地备份来工作。您还可以选择挂载一个 Amazon Simple Storage Service (Amazon S3) 桶以及其他选项。除非另有说明,数据将存储在名为 influxdbbackuplt timestampgt 的目录中,每次迁移一个。您需要自己设置和管理运行迁移脚本的系统。

该脚本提供多种选项和配置,包括挂载 S3 桶以限制本地存储使用,并选择迁移时要使用的组织。本文中示例中使用的资源会产生费用。请参考 AWS 定价 获取更多信息。

使用 AWS InfluxDB 迁移脚本将您的 InfluxDB OSS 2x 数据迁移到 Ama

前提条件

InfluxDB 迁移脚本使用 InfluxDB CLI 功能和 InfluxDB v2 API 来完成迁移。要运行迁移脚本,您需要满足以下环境要求:

要求说明机器系统运行 Windows、Linux 或 macOS 的机器。操作员令牌将源 InfluxDB OSS 2x 实例的操作员令牌存储在名为 INFLUXSRCTOKEN 的环境变量中。目标令牌将目标 Timestream for InfluxDB 实例的操作员令牌存储在名为 INFLUXDESTTOKEN 的环境变量中。有关连接信息包括令牌,请参阅 连接到 Amazon Timestream for InfluxDB 实例。Python需要 Python 37 或更高版本。SDK安装AWS SDK for Python (Boto3) 和 influxdbclient Python 库。Influx CLI安装并添加 Influx CLI 到 PATH。硬盘空间如果不使用 S3 桶,则需要足够的硬盘空间以存储导出的数据。网络连接与源和目标实例都需要有网络连接。可选在 Linux 上可选使用 Mountpoint for Amazon S3 或在 Windows 和 macOS 上使用 rclone 内容以挂载本地 S3 桶以节省本地存储使用。

在环境满足先决条件后,您可以通过运行以下代码迁移单个桶:

python3 influxmigrationpy srchost http(s)//lt源地址gt8086 srcbucket lt源桶gt desthost http(s)//lt目标地址gt8086

您可以使用帮助选项查看脚本的可用配置选项,如下所示:

python3 influxmigrationpy h

以下是脚本可用配置选项的高层概述:

usage influxmigrationpy [h] [srcbucket SRCBUCKET] [destbucket DESTBUCKET] [srchost SRCHOST] desthost DESTHOST [full] [confirmfull] [srcorg SRCORG] [destorg DESTORG] [csv] [retryrestoredir RETRYRESTOREDIR] [dirname DIRNAME] [loglevel LOGLEVEL] [skipverify] [s3bucket S3BUCKET] [allowunowneds3bucket]

您可以在 AWS InfluxDB 迁移脚本 README 中找到每个可用选项的详细描述。

运行 AWS InfluxDB 迁移脚本

满足所有前提条件后,按照以下步骤运行迁移脚本:

使用您选择的终端应用程序运行 Python 脚本,将数据从源 InfluxDB 实例传输到目标 InfluxDB 实例。提供主机地址和端口作为 CLI 选项,并确保已设置 INFLUXSRCTOKEN 和 INFLUXDESTTOKEN 环境变量,正如在前提条件中所述。InfluxDB 默认使用的端口是 8086。例如:

python3 influxmigrationpy srchost http(s)//lt源地址gt8086 srcbucket lt源桶gt desthost http(s)//lt目标地址gt8086

为确保您的数据已成功从现有实例迁移到新的实例,请执行以下验证步骤:

访问 Timestream for InfluxDB 实例的 InfluxDB UI 并检查桶。通过运行以下 Influx CLI 命令列出桶:

influx bucket list t lt目标令牌gt host http(s)//lt目标地址gt8086 org lt组织名称gt

使用 Influx CLI 运行以下两个 InfluxQL 查询以查看桶的内容并验证已迁移的记录数是否正确。

influx v1 shell t lt目标令牌gt host http(s)//lt目标地址gt8086 org lt组织名称gt

SELECT FROM lt已迁移桶gtlt保留期gtlt测量名称gt LIMIT 100

SELECT COUNT() FROM lt已迁移桶gtlt保留期gtlt测量名称gt

运行以下代码执行 Flux 查询:

influx query t lt目标令牌gt host http(s)//lt目标地址gt8086 org lt组织名称gt from(bucket lt已迁移桶gt) gt range(start lt所需开始时间gt stop lt所需结束时间gt)

在查询中添加 gt count() 也是验证记录数量已正确迁移的一种方法。

示例运行

以下步骤展示了如何设置 InfluxDB 迁移脚本并使用它迁移单个桶:

打开您选择的终端应用程序,并确保所需的前提条件已正确安装。

导航到迁移脚本所在位置。

准备以下信息:

源桶名称待迁移。可选:目标服务器中已迁移桶的新名称。源和目标 Influx 实例的根令牌。源和目标 Influx 实例的主机地址。可选:S3 桶名称和凭证。AWS 命令行接口AWS CLI凭证应设置在操作系统环境变量中。

AWS 凭证

export AWSACCESSKEYID=xxxexport AWSSECRETACCESSKEY=xxx

构建如下命令:

python3 influxmigrationpy srcbucket lt现存源桶名称gt destbucket lt新目标桶名称gt srchost http(s)//lt源地址gt8086 desthost http(s)//lt目标地址gt8086 s3bucket ltS3 桶名称gt(可选) loglevel debug

加速器排行榜运行脚本

当脚本运行结束后,您可以检查新迁移的桶的数据完整性。performancetxt 文件位于脚本运行所在的同一目录中,包含有关每个步骤所花费时长的一些基本信息。

清理

迁移过程完成后,备份数据将保留在您选择的文件夹中。您可能想要删除这些备份目录;默认情况下,它们命名为 influxdbbackuplt timestampgt,并存储在运行脚本的同一目录中。

如果您使用了 s3bucket 选项,这些目录将存储在您指定的 S3 桶中。要删除该 S3 桶,请完成以下步骤:

在 Amazon S3 控制台中,在导航窗格中选择 Buckets。从桶列表中选择用于迁移的那个桶。选择 Delete。如果桶不为空,选择 Empty bucket。在文本输入框中输入永久删除。选择 Empty。成功删除后,选择屏幕顶部横幅中的 delete bucket configuration 或从步骤 1 重新开始。在文本输入框中输入桶的名称,选择 Delete bucket。

实时迁移

将 InfluxDB OSS 2x 数据迁移到 Timestream for InfluxDB 使用 AWS InfluxDB 迁移脚本时在迁移过程中会出现停机,且需要重新配置客户端以使用 Timestream for InfluxDB。如果您当前的生产工作负载需要近乎零停机的迁移数据,您可以选择执行接近零停机的 InfluxDB 工作负载实时迁移到 Timestream for InfluxDB。以下图展示实时迁移的步骤。在启动过程中,所有资源应配置好。

实时迁移的流程如下:

使用一个 AWS Signature Version 4 proxy 来签名 client 请求,这些请求发往 Amazon API Gateway。API Gateway 支持除了 AWS Signature Version 4 之外的验证方法,但建议使用 AWS Signature Version 4。API Gateway 将请求代理到源和目标数据库。客户端访问网关的权限使用 AWS 身份与访问管理(IAM) 授权控制;客户端必须使用 AWS Signature Version 4 签名自己的请求。

API Gateway 将写请求和读请求分别转发到不同的 AWS 资源。写请求转发至 Kinesis 写入者 AWS Lambda 函数,该函数将数据写入到 Amazon Kinesis 数据流中使用 PutRecord 或 PutRecords 将请求转换为流记录,读取请求则转发至查询 Lambda 函数。

为减少过时读取的出现,查询 Lambda 函数的包含是必要的。对于每个读取请求,查询 Lambda 函数使用一个密钥来确定从哪个数据库读取。迁移完成后,Timestream for InfluxDB 实例会与最新的摄入记录同步,查询 Lambda 函数用来发送请求的密钥值应更新为空间地址,从而将读取请求发送至目标 Timestream for InfluxDB 实例。

在客户请求中包含的 InfluxDB 令牌的授权头值保持不变;这意味着目标 Timestream for InfluxDB 实例需要有与源实例相同的令牌和组织。通过为 InfluxDB 迁移脚本使用 full 选项来实现。撰写时,实时迁移架构不支持部分迁移。

如果您还没有使用 API 网关作为源数据库的前端,您需要在设置并测试实时迁移基础架构后,将数据生产者和消费者切换到使用此解决方案的 API Gateway 端点。将您的应用程序配置为使用 API Gateway 端点将导致短暂的停机。在迁移过程结束时,转发读写流量到您的目标 Timestream for InfluxDB 实例的 API 网关将继续保留。如果您希望替换或移除这一额外基础架构,变更将会导致一些停机,时间大约与重新配置应用程序以直接连接到目标数据库所需的时间相当。

请求,保持完整并包含诸如 InfluxDB 令牌等授权头值,存储在通过 Kinesis 数据写入 Lambda 函数记录的数据流中。

以下代码片段展示 Kinesis 写入者 Lambda 函数的一种可能实现:

pythonimport boto3import jsonimport osimport secretsimport string

PARTITIONKEYLENGTH = 30

def lambdahandler(event context) kinesis = boto3client(kinesis) # 随机化分区键以均匀写入分区 randompartitionkey = join(secretschoice(stringasciiletters stringdigits) for i in range(PARTITIONKEYLENGTH)) try # putrecords 不保证记录排序,但 putrecord 保证 response = kinesisputrecord( StreamName=osenviron[STREAMNAME] Data=jsondumps(event)encode(utf8) # 来自 Amazon API Gateway 的请求 PartitionKey=randompartitionkey ) return { statusCode 200 body jsondumps(记录成功插入) } except Exception return { statusCode 500 body jsondumps(调用 PutRecord 时出错) }

默认情况下,数据流将这些记录保存 24 小时。数据流可以分片以提高吞吐量和并行数据处理。Kinesis 写入者 Lambda 函数应使用随机分区键均匀分配进入的数据请求到 Kinesis 数据流的分区,以避免单个分区过载。通过在分区中写入,尽管在读取分区时可能会引入少量最终一致性,因为记录可能以无序方式写入实例中,但是,由于它们是时间序列数据库,InfluxDB 和 Timestream for InfluxDB 仍会根据时间戳对记录进行排序。如果使用 PutRecord,每个分区中记录的处理顺序保持不变;然而,PutRecords

2024年春季PCI DSS与3DS合规包现已推出关键要点AWS新增了三项服务通过PCI DSS和PCI 3DS认证。包含“合规性证明”和“AWS责任总结”两大核心内容。客户可通过AWS Artifa...

在 AWS Local Zones 中维护本地资料副本主要要点这篇文章涵盖了如何使用 AWS Local Zones 进行资料复制策略,以便将资料备份。这些策略包括资料库复制、档案和物件存储复制,以及...