文档文档

从 InfluxDB OSS 复制数据

使用 InfluxDB 复制流(InfluxDB 边缘数据复制)将选定存储桶的传入数据复制到一个或多个远程 InfluxDB OSS、InfluxDB Cloud 或 InfluxDB Enterprise 实例的存储桶。

从 InfluxDB OSS 复制数据到 InfluxDB Cloud、InfluxDB OSS 或 InfluxDB Enterprise。

配置复制流

使用 influx CLIInfluxDB 2.7 API 来配置复制流。

要将数据复制到 InfluxDB OSS 或 InfluxDB Enterprise,请相应地调整远程连接值。

  1. 在本地 InfluxDB OSS 实例中,使用 influx remote create 命令创建要复制数据的远程连接。

    提供以下信息:

    • 远程连接名称
  2. 远程 InfluxDB 实例 URL
  3. <ul>
    
  4. 远程 InfluxDB API 令牌(API 令牌必须具有对目标存储桶的写入权限)
  5. <ul>
    
  6. 远程 InfluxDB 组织 ID
  7. ```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`.
    
    1. 在本地 InfluxDB OSS 实例中,使用 influx replication create 命令创建复制流。

      提供以下信息:

      • 复制流名称
    2. 远程连接 ID
    3. <ul>
      
    4. 要从中复制写入的本地存储桶 ID
    5. <ul>
      
    6. 要将写入复制到的远程存储桶名称或 ID。如果复制到 InfluxDB Enterprise,请使用 db-name/rp-name 存储桶名称语法。
    7. ```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 命令查看诸如当前队列大小、最大队列大小和最新状态代码等信息。

      1. 发送 POST 请求到本地 InfluxDB OSS /api/v2/remotes 端点,以创建要复制数据的远程连接。

        POST localhost:8086/api/v2/remotes

        在你的请求中包含以下内容:

        • 请求方法: POST
        • 标头
          • 授权: 带有本地 InfluxDB OSS API 令牌Token 方案
          • 内容类型: application/json
        • 请求正文: 具有以下字段的 JSON 对象
          * 必需
          • * allowInsecureTLS: 允许不安全的 TLS 连接
          • description: 远程描述
          • * name: 远程连接名称
          • * orgID: 本地 InfluxDB OSS 组织 ID
      2. * remoteAPIToken: 远程 InfluxDB API 令牌(API 令牌必须具有对目标存储桶的写入权限)
      3.   <ul>
        
      4. * remoteOrgID: 远程 InfluxDB 组织 ID
      5.   <ul>
        
      6. * remoteURL: 远程 InfluxDB 实例 URL
      7. <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' \
        ```
        
        1. 发送 POST 请求到本地 InfluxDB OSS /api/v2/replications 端点,以创建复制流。

          POST localhost:8086/api/v2/remotes

          在你的请求中包含以下内容:

          • 请求方法: POST
          • 标头
            • 授权: 带有本地 InfluxDB OSS API 令牌Token 方案
            • 内容类型: application/json
          • 请求正文: 具有以下字段的 JSON 对象: * 必需
            • dropNonRetryableData: 当遇到不可重试的错误时,丢弃数据。
            • * localBucketID: 要从中复制写入的本地 InfluxDB OSS 存储桶 ID。
            • * maxAgeSeconds: 数据在被丢弃之前的最大存在时间(以秒为单位)(默认为 604800,必须大于或等于 0)。
            • * maxQueueSizeBytes: 最大复制队列大小(以字节为单位)(默认为 67108860,必须大于或等于 33554430)。
            • * name: 复制流名称。
            • * orgID: 本地 InfluxDB OSS 组织 ID。
        2. * remoteBucketID: 要将写入复制到的远程存储桶 ID。
        3.   <ul>
          
        4. * remoteBucketName: 要将写入复制到的远程存储桶名称。如果复制到 InfluxDB Enterprise,请使用 db-name/rp-name 存储桶名称语法。
        5.   - <span class="req asterisk ">*</span> **remoteID:** Remote connection ID
          

          remoteBucketIDremoteBucketName 是互斥的。如果复制到 InfluxDB Enterprise,请使用 remoteBucketNamedb-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 方案
          • 查询参数
            • 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 实例。要仅复制降采样或处理后的数据:

          1. 在你的 InfluxDB OSS 实例中创建一个存储桶来存储降采样或处理后的数据。

          2. 创建一个 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")
            
          3. 创建复制流,以将来自降采样存储桶的数据复制到远程 InfluxDB 实例。

          查看 InfluxDB OSS 复制服务指标

          除了你可以使用 CLIAPI 访问的复制流信息之外,你还可以查看 InfluxDB OSS 实例的复制服务级别指标,例如 /api/v2/write 错误详细信息、对服务的调用次数和持续时间以及排队的总点数。

          要查看复制服务级别指标,请发送 GET 请求到本地 InfluxDB OSS /metrics 端点。

          有关更多信息,请参阅 InfluxDB OSS 指标


          此页是否对您有帮助?

          感谢您的反馈!


          Flux 的未来

          Flux 即将进入维护模式。您可以继续像现在一样使用它,而无需对您的代码进行任何更改。

          阅读更多

          现已全面上市

          InfluxDB 3 Core 和 Enterprise

          快速启动。更快扩展。

          获取更新

          InfluxDB 3 Core 是一个开源、高速的最新数据引擎,可实时收集和处理数据,并将其持久化到本地磁盘或对象存储。InfluxDB 3 Enterprise 构建在 Core 的基础上,增加了高可用性、读取副本、增强的安全性以及数据压缩,以实现更快的查询和优化的存储。InfluxDB 3 Enterprise 的免费层级可供非商业家庭或业余爱好者使用。

          有关更多信息,请查看: