Skip to content

InfluxDB 升级准备

升级前评估

版本兼容性检查

  • 1.x 到 2.x 升级兼容性

    • InfluxDB 2.x 与 1.x 有较大架构差异
    • 1.x 的 InfluxQL 查询语言在 2.x 中仍受支持,但有部分语法差异
    • 2.x 新增了 Flux 查询语言
    • 1.x 的连续查询(CQ)在 2.x 中被替换为任务(Task)
    • 1.x 的保留策略(RP)在 2.x 中与桶(Bucket)结合
  • 同版本升级兼容性

    • 同主版本内升级通常兼容性较好(如 1.8.x 升级到 1.8.y)
    • 注意查看官方发布说明中的重大变更
    • 检查配置文件中是否有废弃的参数

业务影响评估

  • 升级窗口规划

    • 根据业务负载确定合适的升级时间(建议业务低峰期)
    • 评估升级所需的大致时间
    • 制定回滚计划和时间点
  • 服务级别协议(SLA)考虑

    • 确保升级过程符合 SLA 要求
    • 提前通知相关业务团队
    • 准备降级方案

硬件资源评估

  • 检查当前硬件资源使用情况

    • CPU 使用率:确保有足够的 CPU 资源用于升级过程
    • 内存使用率:升级过程可能需要额外内存
    • 磁盘空间:确保有足够的磁盘空间用于备份和升级
  • 2.x 版本硬件要求

    • 建议使用 SSD 存储
    • 最低 4GB 内存(生产环境建议 8GB 以上)
    • 足够的磁盘空间(至少为现有数据大小的 2 倍)

升级前备份

数据备份

  • 1.x 版本数据备份

    bash
    # 停止 InfluxDB 服务
    systemctl stop influxdb
    
    # 备份数据目录(推荐方法)
    tar -czf influxdb-backup-$(date +%Y%m%d).tar.gz /var/lib/influxdb
    
    # 或使用官方备份工具
    influxd backup -portable /path/to/backup
  • 2.x 版本数据备份

    bash
    # 停止 InfluxDB 服务
    systemctl stop influxdb
    
    # 备份数据目录
    tar -czf influxdb2-backup-$(date +%Y%m%d).tar.gz /var/lib/influxdb2
    
    # 或使用官方备份工具
    influx backup /path/to/backup

配置文件备份

  • 1.x 配置文件备份

    bash
    cp /etc/influxdb/influxdb.conf /etc/influxdb/influxdb.conf.backup.$(date +%Y%m%d)
  • 2.x 配置文件备份

    bash
    cp /etc/influxdb/influxd.conf /etc/influxdb/influxd.conf.backup.$(date +%Y%m%d)

其他重要文件备份

  • 日志文件

    bash
    cp /var/log/influxdb/influxdb.log /path/to/backup/
  • 脚本和工具

    • 备份自定义的 InfluxDB 相关脚本
    • 备份第三方集成工具的配置

升级前检查

系统环境检查

  • 操作系统版本兼容性

    • 检查目标 InfluxDB 版本支持的操作系统版本
    • 确保操作系统已更新到最新补丁
  • 依赖包检查

    bash
    # 检查 Go 版本(如果从源码编译)
    go version
    
    # 检查系统库依赖
    ldd /usr/bin/influxd

数据库状态检查

  • 1.x 状态检查

    bash
    # 检查 InfluxDB 服务状态
    systemctl status influxdb
    
    # 检查数据库完整性
    influxd check -dbpath /var/lib/influxdb/data
    
    # 检查 TSM 文件完整性
    influxd inspect verify -datadir /var/lib/influxdb/data
  • 2.x 状态检查

    bash
    # 检查 InfluxDB 服务状态
    systemctl status influxdb
    
    # 检查 TSM 文件完整性
    influxd inspect verify -engine-path /var/lib/influxdb2/engine

性能基准测试

  • 运行性能测试

    bash
    # 使用 influx-stress 工具进行基准测试
    influx-stress write -db test -host localhost:8086 -p 10 -t 60
    influx-stress query -db test -host localhost:8086 -q "SELECT * FROM measurement WHERE time > now() - 1h" -p 10 -t 60
  • 记录基准测试结果

    • 写入吞吐量
    • 查询响应时间
    • CPU 和内存使用率
    • 磁盘 I/O 使用率

升级前配置调整

1.x 配置文件调整

  • 检查并更新配置参数

    • 移除废弃的配置参数
    • 调整性能相关参数
    • 启用必要的日志
  • 示例配置调整

    toml
    [http]
      log-enabled = true
      log-queries-after = "1000000000"  # 1秒
    
    [data]
      index-version = "tsi1"  # 使用 TSI 索引

2.x 配置文件准备

  • 创建初始配置文件

    bash
    # 生成默认配置文件
    influxd config > /etc/influxdb/influxd.conf
  • 关键配置参数调整

    toml
    [http]
      bind-address = ":8086"
      log-enabled = true
    
    [storage]
      engine-path = "/var/lib/influxdb2/engine"
      wal-dir = "/var/lib/influxdb2/wal"

升级前业务准备

通知相关团队

  • 内部团队通知

    • 运维团队
    • 开发团队
    • 业务团队
    • 管理层
  • 外部用户通知

    • 如服务对外提供 API,需提前通知用户
    • 说明升级时间和可能的影响

暂停相关业务

  • 暂停写入操作

    • 通知业务系统暂停写入
    • 或使用负载均衡将流量切换到备用实例
  • 暂停定时任务

    • 暂停与 InfluxDB 相关的定时任务
    • 暂停连续查询或任务

升级前工具准备

官方工具准备

  • 下载目标版本安装包

    bash
    # 1.x 版本下载
    wget https://dl.influxdata.com/influxdb/releases/influxdb_1.8.10_amd64.deb
    
    # 2.x 版本下载
    wget https://dl.influxdata.com/influxdb/releases/influxdb2_2.7.1_amd64.deb
  • 安装必要的工具

    bash
    # 安装 influx CLI(2.x)
    wget -q https://repos.influxdata.com/influxdata-archive_compat.key
    echo '393e8779c89ac8d958f81f942f9ad7fb82a25e133faddaf92e15b16e6ac9ce4c influxdata-archive_compat.key' | gpg --import - && cat influxdata-archive_compat.key | apt-key add -
    echo 'deb [signed-by=/etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg] https://repos.influxdata.com/debian stable main' | tee /etc/apt/sources.list.d/influxdata.list
    apt-get update && apt-get install influxdb2-cli

自定义脚本准备

  • 升级自动化脚本

    bash
    #!/bin/bash
    
    # 升级前检查脚本
    
    # 检查服务状态
    if systemctl is-active --quiet influxdb; then
      echo "InfluxDB 服务正在运行"
    else
      echo "InfluxDB 服务未运行"
      exit 1
    fi
    
    # 检查磁盘空间
    DATA_DIR="/var/lib/influxdb"
    SPACE=$(df -h $DATA_DIR | tail -1 | awk '{print $5}' | sed 's/%//')
    if [ $SPACE -gt 80 ]; then
      echo "警告:磁盘空间使用率超过 80%"
    fi
    
    echo "升级前检查完成"
  • 回滚脚本

    bash
    #!/bin/bash
    
    # 回滚脚本
    
    # 停止当前 InfluxDB 服务
    systemctl stop influxdb
    
    # 恢复备份的数据目录
    tar -xzf /path/to/backup/influxdb-backup-$(date +%Y%m%d).tar.gz -C /
    
    # 恢复配置文件
    cp /etc/influxdb/influxdb.conf.backup.$(date +%Y%m%d) /etc/influxdb/influxdb.conf
    
    # 启动 InfluxDB 服务
    systemctl start influxdb
    
    echo "回滚完成"

升级前测试

测试环境升级

  • 搭建测试环境

    • 复制生产环境数据到测试环境
    • 模拟生产环境配置
  • 执行测试升级

    • 在测试环境执行完整的升级流程
    • 记录升级过程中的问题和解决方法
    • 验证升级后的功能和性能

功能验证测试

  • 基本功能测试

    • 写入数据测试
    • 查询数据测试
    • 连续查询/任务测试
    • 保留策略测试
  • 集成测试

    • 测试与第三方工具的集成
    • 测试自定义脚本的兼容性
    • 测试 API 兼容性

升级计划制定

升级步骤详细规划

  • 1.x 到 2.x 升级步骤示例

    1. 停止 InfluxDB 1.x 服务
    2. 备份数据和配置文件
    3. 安装 InfluxDB 2.x
    4. 运行 influxd upgrade 命令升级数据
    5. 配置 InfluxDB 2.x
    6. 启动 InfluxDB 2.x 服务
    7. 验证升级结果
  • 同版本升级步骤示例

    1. 停止 InfluxDB 服务
    2. 备份数据和配置文件
    3. 安装新版本 InfluxDB
    4. 更新配置文件(如果需要)
    5. 启动 InfluxDB 服务
    6. 验证升级结果

回滚计划制定

  • 回滚触发条件

    • 升级过程中出现严重错误
    • 升级后功能异常
    • 性能严重下降
    • 无法恢复的数据问题
  • 回滚步骤

    1. 停止当前 InfluxDB 服务
    2. 恢复备份的数据目录
    3. 恢复备份的配置文件
    4. 安装旧版本 InfluxDB
    5. 启动 InfluxDB 服务
    6. 验证回滚结果

升级前监控准备

监控系统配置

  • 设置关键指标监控

    • CPU 使用率
    • 内存使用率
    • 磁盘空间使用率
    • 磁盘 I/O 使用率
    • InfluxDB 服务状态
  • 配置告警规则

    yaml
    # Prometheus 告警规则示例
    groups:
    - name: influxdb-upgrade-alerts
      rules:
      - alert: InfluxDBServiceDown
        expr: up{job="influxdb"} == 0
        for: 5m
        labels:
          severity: critical
        annotations:
          summary: "InfluxDB 服务已停止"
          description: "InfluxDB 服务在 {{ $labels.instance }} 上已停止运行超过 5 分钟"
      
      - alert: InfluxDBDiskSpaceLow
        expr: (node_filesystem_size_bytes{mountpoint="/var/lib/influxdb"} - node_filesystem_free_bytes{mountpoint="/var/lib/influxdb"}) / node_filesystem_size_bytes{mountpoint="/var/lib/influxdb"} * 100 > 90
        for: 10m
        labels:
          severity: warning
        annotations:
          summary: "InfluxDB 磁盘空间不足"
          description: "InfluxDB 数据目录磁盘空间使用率超过 90%"

日志监控

  • 设置日志监控
    • 监控 InfluxDB 日志文件
    • 配置关键词告警(如 error、panic、fatal)
    • 设置日志轮转,确保有足够的磁盘空间

常见问题(FAQ)

Q1: 升级前需要停止 InfluxDB 服务吗?

A1: 是的,升级前必须停止 InfluxDB 服务,否则可能导致数据损坏。在停止服务前,建议先暂停所有写入操作,确保数据已完全写入磁盘。

Q2: 1.x 到 2.x 升级需要注意哪些重要变化?

A2: 1.x 到 2.x 升级需要注意以下重要变化:

  • 架构差异:2.x 采用全新架构
  • 查询语言:新增 Flux 查询语言,InfluxQL 仍受支持但有差异
  • 数据模型:保留策略与桶结合
  • 连续查询:被任务(Task)替代
  • 配置文件:配置参数和格式有较大变化

Q3: 如何确定升级所需的时间?

A3: 升级所需时间取决于以下因素:

  • 数据量大小
  • 硬件性能
  • 升级方式(同版本升级或跨版本升级)
  • 配置复杂度

建议在测试环境中执行一次完整升级,以预估实际升级时间。

Q4: 升级前需要备份哪些重要数据?

A4: 升级前需要备份以下重要数据:

  • 数据目录(包含 TSM 和 WAL 文件)
  • 配置文件
  • 日志文件
  • 自定义脚本和工具
  • 第三方集成配置

Q5: 如何测试升级后的功能和性能?

A5: 测试升级后的功能和性能可以从以下方面进行:

  • 基本功能测试:写入、查询、连续查询/任务等
  • 性能测试:与升级前的基准测试结果对比
  • 集成测试:测试与第三方工具的集成
  • 压力测试:模拟高负载场景

Q6: 升级过程中出现数据损坏怎么办?

A6: 如果升级过程中出现数据损坏,应立即执行回滚计划:

  • 停止当前 InfluxDB 服务
  • 恢复备份的数据和配置
  • 启动旧版本 InfluxDB 服务
  • 验证数据完整性

Q7: 2.x 版本的配置文件与 1.x 有什么主要区别?

A7: 2.x 版本的配置文件与 1.x 主要区别包括:

  • 配置结构更扁平化
  • 移除了一些 1.x 特有的配置参数
  • 新增了 Flux 相关的配置参数
  • 数据存储相关的配置参数有较大变化

Q8: 升级前如何检查 InfluxDB 数据的完整性?

A8: 可以使用以下命令检查 InfluxDB 数据的完整性:

  • 1.x:influxd check -dbpath /var/lib/influxdb/data
  • 1.x TSM 文件:influxd inspect verify -datadir /var/lib/influxdb/data
  • 2.x TSM 文件:influxd inspect verify -engine-path /var/lib/influxdb2/engine

Q9: 升级后如何迁移 1.x 的连续查询到 2.x 的任务?

A9: 可以使用以下方法迁移连续查询到任务:

  • 手动将连续查询转换为 Flux 任务
  • 使用官方提供的迁移工具
  • 参考 2.x 文档中的任务编写指南

Q10: 升级前如何评估硬件资源是否足够?

A10: 可以从以下方面评估硬件资源:

  • 检查当前硬件资源使用情况(CPU、内存、磁盘)
  • 参考官方文档中目标版本的硬件要求
  • 考虑数据增长趋势
  • 在测试环境中模拟升级过程,观察资源使用情况