从 InfluxDB OSS 复制数据
使用 InfluxDB 复制流(InfluxDB 边缘数据复制)将选择的桶的输入数据复制到一个或多个远程 InfluxDB OSS、InfluxDB Cloud 或 InfluxDB Enterprise 实例上的桶中。
将数据从 InfluxDB OSS 复制到 InfluxDB Cloud、InfluxDB OSS 或 InfluxDB Enterprise。
配置复制流
使用influx CLI 或 InfluxDB Cloud API 来配置复制流。
要将数据复制到 InfluxDB OSS 或 InfluxDB Enterprise,请相应地调整远程连接值。
在您的 InfluxDB OSS 实例中,使用
influx remote create命令创建一个远程连接以复制数据。提供以下内容:
- 远程连接名称
- InfluxDB Cloud 区域 URL
- InfluxDB Cloud API 令牌 (API 令牌必须对目标存储桶具有写入权限)
- InfluxDB Cloud 组织 ID
influx remote create \ --name example-remote-name \ --remote-url https://cloud2.influxdata.com \ --remote-api-token mYsuP3r5Ecr37t0k3n \ --remote-org-id 00xoXXoxXX00如果您已经配置了远程 InfluxDB 连接,您可以使用现有连接。要查看现有连接,请运行
influx remote list。在您的 InfluxDB OSS 实例中,使用
influx replication create命令来创建一个复制流。提供以下内容:
- 复制流名称
- 远程连接 ID
- 要复制写入的 InfluxDB OSS 存储桶 ID
- 用于复制写入的 InfluxDB Cloud 桶 ID
influx replication create \ --name REPLICATION_STREAM_NAME \ --remote-id REPLICATION_REMOTE_ID \ --local-bucket-id INFLUX_BUCKET_ID \ --remote-bucket REMOTE_INFLUX_BUCKET_NAME
一旦创建了复制流,InfluxDB 将会将所有写入复制到指定的存储桶到 InfluxDB Cloud 存储桶。使用 influx replication list 命令查看当前队列大小、最大队列大小和最新状态代码等信息。
向您的 InfluxDB OSS
/api/v2/remotes端点发送POST请求,以创建一个远程连接以复制数据。POST localhost:8086/api/v2/remotes
在您的请求中包含以下内容:
- 请求方法:
POST - 头部:
- 授权:
Token方案与您的 InfluxDB OSS API 令牌 - 内容类型:
application/json
- 授权:
- 请求体: 包含以下字段的 JSON 对象:
* 必填- * allowInsecureTLS: 所有不安全的 TLS 连接
- description: 远程描述
- * name: 远程连接名称
- * orgID: InfluxDB OSS 组织 ID
- * remoteAPIToken: InfluxDB Cloud API 令牌 (API 令牌必须具有对目标存储桶的写入权限)
- * remoteOrgID: InfluxDB Cloud 组织 ID
- * remoteURL: InfluxDB Cloud 区域 URL
curl --request POST http://localhost:8086/api/v2/remotes \ --header 'Authorization: Token INFLUX_OSS_TOKEN' \ --data '{ "allowInsecureTLS": false, "description": "Example remote description", "name": "Example remote name", "orgID": "INFLUX_OSS_ORG_ID", "remoteAPIToken": "REMOTE_INFLUX_TOKEN", "remoteOrgID": "REMOTE_INFLUX_ORG_ID", "remoteURL": "https://cloud2.influxdata.com" }'如果您已经配置了远程 InfluxDB 连接,您可以使用现有的连接。要查看现有连接,请使用
/api/v2/remotes端点和GET请求方法。GET localhost:8086/api/v2/remotes
在您的请求中包含以下内容:
- 请求方法:
GET - 头部:
- 授权:
Token方案以及您的 InfluxDB OSS API token
- 授权:
- 查询参数:
- orgID: InfluxDB OSS 组织ID
curl --request GET \ http://localhost:8086/api/v2/remotes?orgID=INFLUX_OSS_ORG_ID \ --header 'Authorization: Token INFLUX_OSS_TOKEN' \- 请求方法:
向您的 InfluxDB OSS
/api/v2/replications端点发送一个POST请求以创建一个复制流。POST localhost:8086/api/v2/remotes
在您的请求中包含以下内容:
- 请求方法:
POST - 头部:
- 授权:
Token方案与您的 InfluxDB OSS API 令牌 - 内容类型:
application/json
- 授权:
- 请求体: 带有以下字段的 JSON 对象:
* 必需
- dropNonRetryableData: 当遇到不可重试的错误时丢弃数据。
- * localBucketID: 需要从中复制写入的 InfluxDB OSS 存储桶 ID。
- * maxAgeSeconds: 数据在被丢弃之前的最大年龄(以秒为单位,默认值为
604800,必须大于或等于0)。 - * maxQueueSizeBytes: 复制队列的最大大小(以字节为单位,默认值为
67108860,必须大于或等于33554430)。 - * name: 复制流名称。
- * orgID: InfluxDB OSS 组织 ID。
- * remoteBucketID: 需要复制写入到的 InfluxDB Cloud 存储桶 ID。
- * remoteBucketName: 需要复制写入到的 InfluxDB Cloud 存储桶名称。
- * remoteID: 远程连接 ID
- 请求方法:
remoteBucketID 和 remoteBucketName 是互斥的。
curl --request POST http://localhost:8086/api/v2/replications \
--header 'Authorization: Token INFLUX_OSS_TOKEN' \
--data '{
"dropNonRetryableData": false,
"localBucketID": "INFLUX_OSS_BUCKET_ID",
"maxAgeSeconds": 604800,
"maxQueueSizeBytes": 67108860,
"name": "Example replication stream name",
"orgID": "INFLUX_OSS_ORG_ID",
"remoteBucketName": "REMOTE_INFLUX_BUCKET_NAME",
"remoteID": "REMOTE_ID",
}'
一旦创建了复制流,InfluxDB将把指定本地桶中的所有写入复制到InfluxDB Cloud桶中。要获取有关每个复制流的信息,例如当前队列大小、最大队列大小和最新状态代码,请向您的InfluxDB OSS /api/v2/replications端点发送GET请求。
GET localhost:8086/api/v2/replications
在您的请求中包含以下内容:
- 请求方法:
GET - 头部:
- 授权:
Token方案与您的 InfluxDB OSS API token
- 授权:
- 查询参数:
- orgID: InfluxDB OSS 组织 ID
curl --request GET \
http://localhost:8086/api/v2/replications?orgID=INFLUX_OSS_ORG_ID \
--header 'Authorization: Token INFLUX_OSS_TOKEN' \
需要注意的重要事项
- 只有写操作会被复制。其他数据操作(如删除或恢复)不会被复制。
- 在InfluxDB OSS中,大的写入请求体会被完整地写入。当进行复制时,写入请求会分批发送到远程存储桶。最大的批量大小是500 kB(通常在250到500行行协议之间)。这可能导致某些批次成功而其他批次失败的情况。
复制降采样或处理后的数据
在某些情况下,您可能不想将原始的高精度数据写入远程的 InfluxDB Cloud 实例。要仅复制降采样或处理过的数据:
在您的 InfluxDB OSS 实例中创建一个 bucket,以存储降采样或处理过的数据。
创建一个InfluxDB任务,该任务对数据进行降采样或处理,并将其存储在新的存储桶中。例如:
import "influxdata/influxdb/tasks" import "types" // omit this line if adding task via the UI option task = {name: "Downsample raw data", every: 10m} data = () => from(bucket: "example-bucket") |> range(start: tasks.lastSuccess(orTime: -task.every)) numeric = data() |> filter(fn: (r) => types.isType(v: r._value, type: "float") or types.isType(v: r._value, type: "int") or types.isType(v: r._value, type: "uint")) |> aggregateWindow(every: task.every, fn: mean) nonNumeric = data() |> filter(fn: (r) => types.isType(v: r._value, type: "string") or types.isType(v: r._value, type: "bool")) |> aggregateWindow(every: task.every, fn: last) union(tables: [numeric, nonNumeric]) |> to(bucket: "example-downsampled-bucket")创建一个复制流以将数据从降采样桶复制到远程 InfluxDB Cloud 实例。
查看 InfluxDB OSS 复制服务指标
除了您可以使用CLI或API访问的复制流信息,您还可以查看InfluxDB OSS实例的复制服务级别指标,例如/api/v2/write错误详细信息、对服务的调用次数和持续时间,以及排队的点的总数。
要查看复制服务级别指标,请向您的本地 InfluxDB OSS /metrics 端点发送 GET 请求。
有关更多信息,请参见 InfluxDB OSS metrics。