从 InfluxDB OSS 复制数据
使用 InfluxDB 复制流(InfluxDB 边缘数据复制)将选定存储桶的传入数据复制到一个或多个远程 InfluxDB OSS、InfluxDB Cloud 或 InfluxDB Enterprise 实例的存储桶。
从 InfluxDB OSS 复制数据到 InfluxDB Cloud、InfluxDB OSS 或 InfluxDB Enterprise。
配置复制流
使用 influx
CLI 或 InfluxDB 2.7 API 来配置复制流。
要将数据复制到 InfluxDB OSS 或 InfluxDB Enterprise,请相应地调整远程连接值。
在本地 InfluxDB OSS 实例中,使用
influx remote create
命令创建要复制数据的远程连接。提供以下信息:
- 远程连接名称
<ul>
<ul>
```sh
influx remote create \
--name example-remote-name \
--remote-url https://cloud2.influxdata.com \
--remote-api-token mYsuP3r5Ecr37t0k3n \
--remote-org-id 00xoXXoxXX00
```
If you already have remote InfluxDB connections configured, you can use an existing connection. To view existing connections, run `influx remote list`.
在本地 InfluxDB OSS 实例中,使用
influx replication create
命令创建复制流。提供以下信息:
- 复制流名称
<ul>
<ul>
db-name/rp-name
存储桶名称语法。```sh
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 OSS 将把对指定存储桶的所有写入复制到远程 InfluxDB 存储桶。使用 influx replication list
命令查看诸如当前队列大小、最大队列大小和最新状态代码等信息。
发送
POST
请求到本地 InfluxDB OSS/api/v2/remotes
端点,以创建要复制数据的远程连接。POST localhost:8086/api/v2/remotes
在你的请求中包含以下内容:
- 请求方法:
POST
- 标头
- 授权: 带有本地 InfluxDB OSS API 令牌 的
Token
方案 - 内容类型:
application/json
- 授权: 带有本地 InfluxDB OSS API 令牌 的
- 请求正文: 具有以下字段的 JSON 对象
* 必需- * allowInsecureTLS: 允许不安全的 TLS 连接
- description: 远程描述
- * name: 远程连接名称
- * orgID: 本地 InfluxDB OSS 组织 ID
- 请求方法:
<ul>
<ul>
<div class="keep-url"></div>
```sh
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"
}'
```
If you already have remote InfluxDB connections configured, you can use an
existing connection. To view existing connections, use the `/api/v2/remotes`
endpoint with the `GET` request method.
<div class="keep-url"></div>
<pre class="api-endpoint"><a href="/influxdb/v2/api/#operation/GetRemoteConnections" target="_blank"><span class="api get">GET</span> localhost:8086/api/v2/remotes</a></pre>
Include the following in your request:
- **Request method:** `GET`
- **Headers:**
- **Authorization:** `Token` scheme with your local InfluxDB OSS [API token](/influxdb/v2/admin/tokens/)
- **Query parameters:**
- **orgID:** Local InfluxDB OSS organization ID
<div class="keep-url"></div>
```sh
curl --request GET \
http://localhost:8086/api/v2/remotes?orgID=INFLUX_OSS_ORG_ID \
--header 'Authorization: Token INFLUX_OSS_TOKEN' \
```
发送
POST
请求到本地 InfluxDB OSS/api/v2/replications
端点,以创建复制流。POST localhost:8086/api/v2/remotes
在你的请求中包含以下内容:
- 请求方法:
POST
- 标头
- 授权: 带有本地 InfluxDB OSS API 令牌 的
Token
方案 - 内容类型:
application/json
- 授权: 带有本地 InfluxDB OSS API 令牌 的
- 请求正文: 具有以下字段的 JSON 对象: * 必需
- dropNonRetryableData: 当遇到不可重试的错误时,丢弃数据。
- * localBucketID: 要从中复制写入的本地 InfluxDB OSS 存储桶 ID。
- * maxAgeSeconds: 数据在被丢弃之前的最大存在时间(以秒为单位)(默认为
604800
,必须大于或等于0
)。 - * maxQueueSizeBytes: 最大复制队列大小(以字节为单位)(默认为
67108860
,必须大于或等于33554430
)。 - * name: 复制流名称。
- * orgID: 本地 InfluxDB OSS 组织 ID。
- 请求方法:
<ul>
db-name/rp-name
存储桶名称语法。 - <span class="req asterisk ">*</span> **remoteID:** Remote connection ID
remoteBucketID
和 remoteBucketName
是互斥的。如果复制到 InfluxDB Enterprise,请使用 remoteBucketName
和 db-name/rp-name
存储桶名称语法。
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 OSS 将把来自指定本地存储桶的所有写入复制到远程 InfluxDB 存储桶。要获取诸如每个复制流的当前队列大小、最大队列大小和最新状态代码等信息,请发送 GET
请求到本地 InfluxDB OSS /api/v2/replications
端点。
GET localhost:8086/api/v2/replications
在你的请求中包含以下内容:
- 请求方法:
GET
- 标头
- 授权: 带有本地 InfluxDB OSS API 令牌 的
Token
方案
- 授权: 带有本地 InfluxDB OSS API 令牌 的
- 查询参数
- 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 行 Line Protocol 之间)。这可能会导致某些批处理成功而其他批处理失败的情况。
复制降采样或处理后的数据
在某些情况下,你可能不希望将原始的高精度数据写入到远程 InfluxDB 实例。要仅复制降采样或处理后的数据:
在你的 InfluxDB OSS 实例中创建一个存储桶来存储降采样或处理后的数据。
创建一个 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 实例。
查看 InfluxDB OSS 复制服务指标
除了你可以使用 CLI 或 API 访问的复制流信息之外,你还可以查看 InfluxDB OSS 实例的复制服务级别指标,例如 /api/v2/write
错误详细信息、对服务的调用次数和持续时间以及排队的总点数。
要查看复制服务级别指标,请发送 GET
请求到本地 InfluxDB OSS /metrics
端点。
有关更多信息,请参阅 InfluxDB OSS 指标。
此页是否对您有帮助?
感谢您的反馈!
支持和反馈
感谢您成为我们社区的一份子!我们欢迎并鼓励您提供关于 InfluxDB 和此文档的反馈和错误报告。要获得支持,请使用以下资源:
拥有年度或支持合同的客户 可以联系 InfluxData 支持。