iotdbtool助力时序数据库IoTDB高效运维

ops/2024/11/15 4:59:09/

iotdbtool_1">iotdbtool

项目简介

iotdbtool 是一个使用 Go 语言编写的命令行工具,基于 Kubernetes 环境,提供了 IoTDB 数据的备份功能。它可以从 Kubernetes 集群中的 IoTDB Pod 中提取数据,并将其上传到阿里云 OSS 存储桶中。

iotdbtool 支持 iotDB 单机、集群,备份与恢复,备份文件存储在 oss 上,主要实现了 k8s 部署的有状态服务的备份恢复

痛点

  • 开源版本 iotdb 没有现成的冷备方案,exporttsfile 基本不可用,引用几十个 jar 导出全库需要巨量内存。
  • 业务核心组件,iotdb down = 业务不可用 down。 每天 2 次冷备,以备不时之需
  • 多个 iotdb 节点,备份恢复没有一个 all in one 简单的工具

功能特性

  • 支持任意 Pod 任意容器中的指定目录。
  • 将备份文件上传到阿里云 OSS,默认保存 7 天
  • 支持多种日志输出级别,便于调试和监控。
  • 支持 iotdb 单机、集群的备份和恢复
  • goroutine 支持并发备份
  • oss sdk 上传 oss、分片上传、进度条
  • 不依赖 kubectl 命令,使用 client-go 直接调用 api 操作 pod,安全高效

系统要求

Go 1.16 或更高版本
Kubernetes 集群
阿里云 OSS 存储桶和相应的访问权限

安装

从源码构建

首先,确保你已经安装了 Go 1.21 开发环境。然后,克隆项目并编译二进制文件:

.
|-- Makefile
|-- bin
|   `-- iotdbtools
|-- cmd
|   |-- backup.go
|   |-- oss_config.go
|   |-- restore.go
|   `-- root.go
|-- command.log
|-- go.mod
|-- go.sum
|-- iotdbtool-architecture.svg
|-- main.go
`-- readME.mdCGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -installsuffix cgo -ldflags "-w" -o bin/iotdbtools

-a:

  • 作用:强制重新编译所有依赖包,不论这些包是否已经被编译过或者是否存在缓存。Go 编译器会缓存依赖包以提高编译速度,默认情况下只重新编译必要的包。加上 -a 标志后,所有依赖包都会重新编译,适用于在编译时需要避免使用缓存的场景。

-installsuffix cgo:

  • 作用:为编译过程生成的目标文件(object files)加上一个后缀(这里是 cgo)。
  • -ldflags 传递链接器的选项给 Go 编译器的链接器。。-w:此标志告诉 Go 编译器的链接器不要生成调试信息(例如符号表、调试符号等),这样可以减小二进制文件的大小

交叉编译(在 Windows 上编译 Linux 二进制文件)

set CGO_ENABLED=0
set GOOS=linux
set GOARCH=amd64
go build -o iotdbbackup

设置为 0,可以避免对系统上 C 库的依赖,从而生成更加通用的二进制文件。

编译完成后,你将获得一个 iotdbtools 二进制文件。可以到处运行

使用指南

backup

 iotdbtools backup --config /opt/kubeconfig/cce-yx --namespace ems-uat --pods iotdb-datanode-0 --bucketname iotdb-backup \
--outname emsyx --uploadoss true --keep-local true --verbose 2

在这里插入图片描述

restore

 iotdbtools restore --config /opt/kubeconfig/eks-config-ems-eu-newaccount --namespace iotdb --pods iotdb-datanode-0 \
--bucketname iotdb-backup --file emsyx_iotdb-datanode-0_20240906154128.tar.gz --verbose 1

在这里插入图片描述

基本用法

iotdbtools is a CLI tool to backup and restore IoTDB data in Kubernetes.Usage:iotdbtools [command]Available Commands:backup      Backup IoTDB datacompletion  Generate the autocompletion script for the specified shellhelp        Help about any commandrestore     restore iotdb data from OSSFlags:-b, --bucketname string     oss bucket name (default "iotdb-backup")-s, --chunksize string      default chunksize is 10MB (default "10485760")-m, --cluster-name string   k8s clusterName-c, --config string         Path to the kubeconfig file (default "/root/.kube/config")-t, --containers string     default container (default "iotdb-datanode")-d, --datadir string        iotdb data dir (default "/iotdb/data")-h, --help                  help for iotdbbackuprestore-k, --keep-local string     keep file to local (default "true")-l, --label string          backup by pod label (default "statefulset.kubernetes.io/pod-name=iotdb-datanode-0")-n, --namespace string      Kubernetes namespace (default "iotdb")-o, --outname string        backup file name (default "iotdb-datanode-back")-p, --pods string           backup by pod name (default "iotdb-datanode-0")--uploadoss string      uploadoss flag,default is true (default "yes")-v, --verbose string        backup log level (default "0")Use "iotdbbackuprestore [command] --help" for more information about a command.

命令行参数

命令行选项以及默认值

参数描述默认值
--namespaceKubernetes 命名空间名称default
--podNameKubernetes Pod 名称iotdb-datanode
--dataDir容器中要备份的数据目录路径/data/iotdb
--outname备份文件的输出名称。backup.tar.gz
--config 指定 Kubernetes 配置文件路径。~/.kube/config
--bucketName阿里云 OSS 存储桶名称my-bucket
-fileNameOSS 存储桶中的文件名称backup/backup.tar.gz
--kubeconfigKubernetes 配置文件路径~/.kube/config
--verbose日志输出详细级别(0、1、2)1
--keepLocalkeepLocal 设置为 false(不保留本地文件)false
--chunkSize指定分片下载、上传的大小10MB
--uploadoss

命令行补全

corba

# zsh
source <(iotdbtools completion zsh)
# bash
source <(iotdbtools completion bash)

示例

iotdb_160">备份 uat iotdb
iotdbtools backup --config /opt/kubeconfig/cce-ems-plusuat.kubeconfg  --namespace ems-uat --pods=iotdb-datanode-0 --bucketname iotdb-backup  --outname emsuat --uploadoss=true --keep-local=true --datadir /iotdb/data/datanode --containers=iotdb-confignode --verbose=2
iotdb_168">备份 cn/eu iotdb
# CN 集群并行备份
iotdbtools backup --config /opt/kubeconfig/cce-ems-plusuat.kubeconfg  --namespace iotdb-bigdata  --pods=iotdb-datanode-0,iotdb-datanode-1,iotdb-datanode-2 --bucketname iotdb-backup  --outname emscn --uploadoss=true --keep-local=true --datadir /iotdb/data/datanode  --containers=iotdb-confignode --verbose=2#EU
iotdbtools backup --namespace ems-eu --pods=iotdb-datanode-0 --bucketname="iotdb-backup" --outname=emseu  --uploadoss=true --keep-local=true --containers=iotdb-confignode --verbose=2
备份其他 pod 的指定文件

备份指定 pod、container 中指定目录到本地或 oss,使用场景: 定时任务上传pod中的文件

  • 配置中心
  • coredump文件定时上传
 iotdbtools backup --config /opt/kubeconfig/eks-config-ems-eu-newaccount --namespace ems-eu --pods vnnox-middle-configcenter-7459fcfb5b-6x8gz --datadir /tmp --containers vnnox-middle-configcenter --uploadoss true --bucketname iotdb-backup --keep-local false  --verbose 2
恢复 cn 的备份
iotdbtools restore --config .config --namespace ems-uat --pods=iotdb-datanode-0 --bucketname iotdb-backup --verbose 2 --file emseu-workstaaa_iotdb-datanode-0_iotdb-datanode_20240822094200.tar.gz

配置

默认将备份文件上传到 oss,可以通过 uploadoss 关闭

OSS 的访问凭证保存到本地的 .credentials 文件中,请妥善保存

AK=your-access-key
SK=your-secret-key
ENDPOINT=your-oss-endpoint

日志输出

日志详细级别可以通过 --verbose 标志来设置。
日志级别 0 将不输出任何日志,适合静默执行。
日志级别 1 将输出基本操作日志。
日志级别 2 将输出详细日志,适合调试和问题排查。

其他

  • 统计代码行数
`find . -name "*.go"  | xargs -I GG echo "wc -l GG" | bash | awk '{sum+=$1} END {print sum}'
1725

Release

2.0

1. 新增恢复iotdb备份逻辑

2.1

1. 新增keep-local参数
2. 新增uploadoss 参数控制上传逻辑
keep-local为true时备份先落到从本地上传到OSS,使用oss-go-sdk,否则使用ossutil上传.

2.2

1. 增加企业微信通知
2. 新增分片上传参数chunksize
3. 增加集群备份并行逻辑

2.3

1. 新增hook判断逻辑,提升适配性。可备份任何pod中的文件
2. fix issue: 失败时也发送成功通知的
3. 增加性能记录函数trackStepDuration
4. 适配多级bucketname
5. 新增iotdbtools 命令行补全

2.3

1. 新增hook判断逻辑,提升适配性。可备份任何pod中的文件
2. fix issue: 失败时也发送成功通知的
3. 增加性能记录函数trackStepDuration
4. 适配多级bucketname
5. 新增iotdbtools 命令行补全

http://www.ppmy.cn/ops/109929.html

相关文章

SiC,GaN驱动优选驱动方案SiLM5350系列SiLM5350MDDCM-DG 带米勒钳位Clamp保护功能 单通道隔离栅极驱动器

SiLM5350MDDCM-DG是一款适用于IGBT、MOSFET的单通道 隔离门极驱动器&#xff0c;具有10A拉电流和10A灌电流驱动能 力。提供内部钳位功能&#xff0c;可单独控制 上升时间和下降时间。 在 SOP8 封 装 中 具 有 3000VRMS 隔 离 耐 压 &#xff08; 符 合 UL1577&#xff09;。 与…

跨平台集成:在 AI、微服务和 Azure 云之间实现无缝工作流

跨平台集成在现代 IT 架构中的重要性 随着数字化转型的不断加速&#xff0c;对集成各种技术平台的需求也在快速增长。在当今的数字世界中&#xff0c;组织在复杂的环境中执行运营&#xff0c;其中多种技术需要无缝协作。环境的复杂性可能取决于业务的性质和组织提供的服务。具…

从JVM角度深入理解String

从JVM角度深入理解String String是Java中的一个类&#xff0c;是一个引用类型&#xff0c;用于表示字符串。它是不可变的&#xff08;immutable&#xff09;&#xff0c;即一旦创建&#xff0c;其值就不能被修改。任何对String对象的修改操作都会创建一个新的String对象&#x…

路由器WAN口和LAN口有什么不一样?

“ 路由器WAN口和LAN口的区别&#xff0c;WAN是广域网端口&#xff0c;LAN是本地网端口。WAN主要用于连接外部网络&#xff0c;而LAN用来连接家庭内部网络&#xff0c;两者主要会在标识上面有区别。以往大部分路由器的WAN只有一个&#xff0c;LAN口则有四个或以上&#xff0c;近…

namp拓展功能——nse脚本

前言: 最近在写一个需求&#xff0c;需要使用 nmap 获取指纹信息的同时&#xff0c;获取 http 信息的响应体&#xff08;如果是 http 协议的情况下&#xff09; 并行并非不可&#xff0c;但是nmap本身就有对http协议的探测 nmap的nse脚本 nmap 在 -sV 的命令下&#xff0c;本…

Nginx 反向代理与负载均衡:深入解析 location 优先级

前言 今天我们将一起探讨 Nginx 反向代理与负载均衡中的一个重要环节——location 配置的优先级。通过本文&#xff0c;你将对 Nginx 的 location 匹配规则有更深入的了解。 环境搭建 在开始之前&#xff0c;我们需要准备一个简单的实验环境&#xff1a; 主服务器&#xff…

STM32的GPIO使用

一、使用流程 1.使用RCC开启GPIO时钟 2.使用GPIO_Init 函数初始化GPIO 3.使用输出或输入函数控制GPIO口 二、RCC的常用函数 函数内容可通过这两个文件进行查看&#xff1a; RCC常用函数如下&#xff1a; void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalS…

Linux 之 RPM [Red - Hat Package Manager]【包管理】

命令符 -i&#xff08;install&#xff09;&#xff1a;安装软件包。--test&#xff1a;测试安装&#xff0c;并不实际安装&#xff0c;只是检查依赖关系等是否满足安装条件。--nodeps&#xff1a;忽略依赖关系进行安装。不过这种方式可能导致软件因缺少依赖而无法正常运行&am…