ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

VictoriaMetrics vmbackup 备份工具完全指南:快照备份、增量备份与智能备份实战

VictoriaMetrics vmbackup 备份工具完全指南:快照备份、增量备份与智能备份实战 VictoriaMetrics vmbackup 备份工具完全指南快照备份、增量备份与智能备份实战【免费下载链接】VictoriaMetricsVictoriaMetrics: fast, cost-effective monitoring solution and time series database项目地址: https://gitcode.com/GitHub_Trending/vi/VictoriaMetricsvmbackup是 VictoriaMetrics 官方提供的备份工具用于将单机版或集群版 VictoriaMetrics 的指标数据从即时快照instant snapshot备份到 GCS、S3、Azure Blob 或本地文件系统以抵御硬件故障和意外数据丢失。读完本文你将掌握 vmbackup 的完整命令行用法、完整/增量/智能备份三种策略的选型与部署方式、备份底层工作原理含源码级证据以及 Kubernetes 场景下的凭证注入与故障排查技巧。概述为什么备份必须基于即时快照无论是单机版还是集群版 VictoriaMetrics官方都推荐使用vmbackup定期从即时快照执行数据备份。原因在于备份期间无需停止 VictoriaMetrics 服务快照本身是对数据目录的瞬时一致性视图且快照内所有文件都是不可变的immutable。关于快照的创建、列出与删除操作详见 Single-server-VictoriaMetrics.md 的即时快照章节。vmbackup的备份过程可以随时中断使用相同参数重新启动后会自动从断点继续无需人工干预。备份产生的数据由配套的 vmrestore 工具负责恢复。企业版用户还可以基于vmbackup使用 vmbackupmanager它能自动创建按小时、按天、按周、按月的备份并自动执行清理与保留策略。从源码结构看vmbackup的入口位于 app/vmbackup/main.go其工作流程非常清晰解析-snapshot.createURL调用快照创建 HTTP 接口以快照目录为源srcFS、-dst为目标dstFS、-origin为可选加速源originFS构造actions.Backup执行备份备份完成后自动删除已创建的快照。主流程中的关键实现参见 app/vmbackup/main.go快照自动创建与删除和 app/vmbackup/main.go备份动作分发普通备份或纯远程复制。支持的存储类型vmbackup通过-dst参数指定备份目标支持以下存储类型存储类型-dst写法示例说明GCSgs://bucket/path/to/backupGoogle Cloud StorageS3s3://bucket/path/to/backupAWS S3Azure Blob Storageazblob://container/path/to/backupAzure Blob任意 S3 兼容存储s3://bucket/path/to/backup如 MinIO、Ceph RGW 等需配合-customS3Endpoint本地文件系统fs:///absolute/path/to/backup本地绝对路径需要注意两点使用 S3 兼容存储MinIO、Cloudian 等时-dst的 URL 中只写桶名S3 服务的主机名必须通过-customS3Endpoint参数单独指定见后文自定义 S3 endpoint一节。vmbackup禁止将备份存储到-storageDataPath指向的目录。该目录只能由 VictoriaMetrics 或vmstorage管理。此限制在源码中有明确校验app/vmbackup/main.go 会检查-dst是否指向数据目录若指向则直接报错退出。vmbackup对接不同远端存储的实现分散在 lib/backup 目录下gcsremote/gcs.go、s3remote/s3.go、azremote/azblob.go、fsremote/fsremote.go它们统一实现了 lib/backup/common/fs.go 中定义的RemoteFS接口因此可以在不同存储之间无缝切换。单节点备份对单机版 VictoriaMetrics 做一次完整备份只需一条命令./vmbackup -storageDataPath/path/to/victoria-metrics-data -snapshot.createURLhttp://localhost:8428/snapshot/create -dstgs://bucket/path/to/new/backup各参数含义-storageDataPathVictoriaMetrics 数据目录路径必须与单机版 VictoriaMetrics或集群版vmstorage启动时-storageDataPath保持一致。-snapshot.createURL创建快照的 HTTP 接口地址。vmbackup会先请求该地址创建快照备份完成后再自动删除快照。无需停止 VictoriaMetrics因为备份基于不可变的即时快照进行。-dst备份目标位置bucket为已存在的存储桶名path/to/new/backup为备份存放路径。更详细的完整备份说明见下文完整备份一节。作为最佳实践官方推荐使用下文介绍的智能备份smart backups策略。集群备份对 VictoriaMetrics 集群版做完整备份需要在每个vmstorage节点上分别运行vmbackup且各节点的备份必须放在远端存储的不同目录中以避免节点间备份互相冲突。例如为 3 个vmstorage节点分别备份vmstorage-1$ /vmbackup -storageDataPath/path/to/vmstorage-data -snapshot.createURLhttp://vmstorage1:8482/snapshot/create -dstgs://bucket/vmstorage-1 vmstorage-2$ /vmbackup -storageDataPath/path/to/vmstorage-data -snapshot.createURLhttp://vmstorage2:8482/snapshot/create -dstgs://bucket/vmstorage-2 vmstorage-3$ /vmbackup -storageDataPath/path/to/vmstorage-data -snapshot.createURLhttp://vmstorage3:8482/snapshot/create -dstgs://bucket/vmstorage-3注意vmbackup需要能访问每个vmstorage节点的数据目录。对于 Kubernetes 部署官方推荐使用sidecar 容器方式让vmbackup与vmstorage运行在同一个 Pod 内从而共享数据卷。集群版的-snapshot.createURL应指向vmstorage的快照接口默认端口 8482例如http://vmstorage1:8482/snapshot/create。集群整体架构可参考 Cluster-VictoriaMetrics.md。备份类型详解vmbackup支持增量备份与完整备份两类增量备份当-dst指向的目标路径中已存在上一次备份数据时自动启用此时只上传发生变化的数据。完整备份当-dst指向空目录时执行全量备份。若通过-origin指向同一远端存储上已有的备份vmbackup会对新旧备份间共享的数据执行服务器端复制server-side copy从而节省数据传输时间和成本。以下命令均以单机版为例。集群版只需在每个vmstorage节点上执行同样的命令并将-snapshot.createURL指向对应vmstorage节点即可./vmbackup -storageDataPath/path/to/vmstorage-data -snapshot.createURLhttp://vmstorage1:8482/snapshot/create -dstgs://bucket/vmstorage-1完整备份Full backup./vmbackup -storageDataPath/path/to/victoria-metrics-data -snapshot.createURLhttp://localhost:8428/snapshot/create -dstgs://bucket/path/to/new/backup参数拆解/path/to/victoria-metrics-data单机版 VictoriaMetrics 或集群版vmstorage中-storageDataPath指向的数据目录。备份基于即时快照进行无需停止 VictoriaMetrics。http://victoriametrics:8428/snapshot/create创建快照的 URL。vmbackup先通过该 URL 创建快照执行备份随后自动删除快照。bucket已存在的 GCS 桶名。path/to/new/backup新备份的目标路径。借助已有备份的服务器端复制实现快速完整备份若目标 GCS 桶中已在-origin路径存在上一次备份可通过以下命令加速新备份./vmbackup -storageDataPath/path/to/victoria-metrics-data -snapshot.createURLhttp://localhost:8428/snapshot/create -dstgs://bucket/path/to/new/backup -origings://bucket/path/to/existing/backup其原理是新旧备份共享的数据直接从-origin到-dst做服务器端复制备份数据不会在远端存储与本地运行的vmbackup工具之间传输从而同时节省时间与网络带宽成本。不同云存储厂商的服务器端复制行为存在差异具体注意事项参见下文服务器端复制已有备份一节。增量备份Incremental backup当-dst指向已存在的备份时vmbackup自动执行增量备份仅向远端存储上传新增数据在大数据量场景下显著节省时间和带宽./vmbackup -storageDataPath/path/to/victoria-metrics-data -snapshot.createURLhttp://localhost:8428/snapshot/create -dstgs://bucket/path/to/existing/backup智能备份Smart backups智能备份是一种将完整备份与增量备份结合、并按配置和可用存储空间高效管理备份数据的策略。在 VictoriaMetrics 中智能备份的含义是每日完整备份存放到YYYYMMDD目录每小时增量备份存放到latest目录。具体操作分两步每小时执行向latest写入增量备份./vmbackup -storageDataPath/path/to/victoria-metrics-data -snapshot.createURLhttp://localhost:8428/snapshot/create -dstgs://bucket/latest该命令创建即时快照并上传到gs://bucket/latest只上传变化的数据即增量备份在大数据量备份场景下节省带宽与时间。每天执行一次将latest服务器端复制为按日期命名的完整备份./vmbackup -origings://bucket/latest -dstgs://bucket/YYYYMMDD该命令将gs://bucket/latest中的备份服务器端复制到gs://bucket/YYYYMMDD其中YYYYMMDD为当天日期如20240125。这种智能备份策略的价值在于小时级备份是增量的网络带宽开销小既能从最近一小时恢复latest备份也能从任意一天恢复YYYYMMDD备份。使用注意事项执行每日备份时不应同时运行小时级备份避免并发写入latest造成数据不一致备份不再需要时应及时清理以节省存储成本如需自动化智能备份可参考基于vmbackup构建的 vmbackupmanager 工具。服务器端复制已有备份有时需要纯粹地对已有备份做服务器端复制通过-origin指定源备份路径、-dst指定目标路径即可例如./vmbackup -origings://bucket/foo -dstgs://bucket/bar约束与特性-origin与-dst必须指向同一个对象存储桶或同一个文件系统服务器端复制通常比常规备份快得多因为备份数据不经过本地vmbackup工具中转部分对象存储系统如 S3 Glacier在服务器端复制时会执行完整对象拷贝速度慢且成本高请先查阅所用存储厂商的文档确认具体行为若-dst中已有数据其内容会与-origin数据做同步sync从而支持对备份做增量的服务器端复制。从源码看纯复制场景-snapshotName为空、即未指定快照会走actions.RemoteBackupCopy分支实现在 lib/backup/actions/copy.go跨不同类型存储如 S3 → GCS时lib/backup/actions/backup.go 中的crossTypeCopy会通过io.Pipe流式下载-上传完成拷贝。工作原理备份算法逐步骤解析vmbackup的备份算法分为以下 7 步通过-snapshot.createURL创建快照收集快照、-dst、-origin三处的文件信息找出-dst中存在但快照中不存在的文件并删除——这些通常是被合并进更大文件的小文件找出快照中存在但-dst中缺失的文件——通常是小体积的新文件和大体积的合并文件将第 3 步结果中在-origin里存在的文件做服务器端复制从-origin到-dst——这些通常是最古老、体积最大、在多次备份间共享的文件将第 3 步剩余的、不在-origin中的文件从快照上传到-dst删除已创建的快照。上述算法的源码实现位于 lib/backup/actions/backup.go 的runBackup函数其中步骤 3 对应deleteDstPartsbackup.go步骤 5 对应copySrcParts中的dst.CopyPart服务器端复制backup.go步骤 6 对应并发上传srcCopyParts并实时打印已上传字节数、百分比、速度与预计完成时间ETA。此外备份会生成两个特殊标记文件定义见 lib/backup/backupnames/filenames.gobackup_metadata.ignore包含备份元数据快照创建时间created_at与备份完成时间completed_atRFC3339 格式写入逻辑见 backup.gobackup_complete.ignore备份成功完成后创建vmrestore通过它判断备份是否完整。1 GiB 分块机制备份时vmbackup会把源文件拆分为1 GiB大小的块chunk每个块作为备份中的独立文件存储。该常量定义在 lib/backup/common/part.goMaxPartSize 1024 * 1024 * 1024。这种拆分在备份文件数量与临时错误后的重传数据量之间取得平衡文件过大则单次网络错误重传成本高文件过小则远端对象数量过多。分块逻辑实现在 lib/backup/fslocal/fslocal.go 的ListParts中对每个文件按MaxPartSize切分生成带Path、FileSize、Offset、Size字段的Part列表每个 Part 在远端以路径/文件名/FileSize_Offset_Size十六进制的命名方式存储part.go。值得注意的是parts.json与appliedRetention.txt这类内容随时间变化的文件会被分配唯一 key保证每次备份都会重新复制part.go。快照属性是高效备份的前提vmbackup的高效性依赖即时快照的以下性质快照内所有文件不可变immutable旧文件会周期性合并为新文件越小的文件被合并的概率越高连续两次快照之间共享大量相同文件。正是这些性质使增量备份和基于-origin的服务器端复制能够又快又省。如果这些性质被破坏例如对非快照的可变文件执行备份vmbackup可能无法正常工作或性能退化这一点在源码注释中也有明确警示lib/backup/actions/backup.gothe backup works only for VictoriaMetrics snapshots made via/snapshot/create。快照的生命周期管理vmbackup通过-snapshot.createURL自动创建快照流程为发起 POST 请求到快照创建接口解析 JSON 响应中的快照名称实现见 lib/snapshot/snapshot.go快照名称格式为YYYYMMDDhhmmss-十六进制序号校验规则见 lib/snapshot/snapshotutil/snapshotutil.go若未显式指定-snapshot.deleteURL则会从-snapshot.createURL自动推导将/create替换为/delete备份结束后自动删除快照app/vmbackup/main.go。数据恢复vmrestore备份数据由vmrestore工具恢复恢复时要求 VictoriaMetrics已停止。vmrestore的用法./vmrestore -srcgs://bucket/path/to/backup -storageDataPathpath/to/restored/data-storageDataPath目录可以非空恢复时其内容会与-src内容同步类似rsync --delete实现增量恢复-src为备份源路径支持的存储类型与-dst一致。相关 flag 定义见 app/vmrestore/main.go。故障排查备份速度慢尝试调大-concurrency提高并发上传 worker 数量。vmbackup占满网络带宽或 CPU调低-concurrency或调低-maxBytesPerSecond限制上传速度。大核数机器上vmbackup占满 CPU尝试使用-filestream.disableFadvise参数禁用fadvise()系统调用。该调用用于防止后台合并和备份期间最近访问的数据被挤出 OS 页缓存但在某些罕见场景下会消耗过多 CPU。备份因临时错误中断直接用相同参数重启vmbackup它会自动从断点继续。备份成功结束后记得清理失败尝试期间遗留的旧快照。单机版与集群版备份不可互用从单机版 VictoriaMetrics 创建的备份不能恢复到集群版 VictoriaMetrics反之亦然。快照磁盘占用关于快照如何占用磁盘空间及清理建议参见 Single-server-VictoriaMetrics.md 的快照故障排查章节。高级用法以文件形式提供凭证关于从凭证文件、环境变量、云厂商 metadata 服务或 Kubernetes Secret / IAM 角色获取凭证的完整说明参见 connecting-vm-components-to-cloud-storage 指南。下面给出各存储厂商最常见的认证方式示例。S3AWS 及 S3 兼容存储——通过-credsFilePath指定凭证文件vmbackup \ -storageDataPath/data \ -snapshot.createURLhttp://localhost:8428/snapshot/create \ -dsts3://victoriametrics-backup/backup01 \ -credsFilePath/etc/credentialsGoogle Cloud StorageGCS——同样使用-credsFilePathvmbackup \ -storageDataPath/data \ -snapshot.createURLhttp://localhost:8428/snapshot/create \ -dstgs://victoriametrics-backup/backup01 \ -credsFilePath/etc/credentialsAzure Blob Storage——通过环境变量注入账号名与密钥export AZURE_STORAGE_ACCOUNT_NAMEmystorageaccount export AZURE_STORAGE_ACCOUNT_KEYmyaccountkey vmbackup \ -storageDataPath/data \ -snapshot.createURLhttp://localhost:8428/snapshot/create \ -dstazblob://victoriametrics-backup/backup01在 Kubernetes 中提供凭证最简方式是利用 KubernetesSecret通过环境变量注入 Pod。例如创建如下 Secret 存放 AWS S3 凭证apiVersion: v1 kind: Secret metadata: name: vmbackup-credentials data: access_key: base64-encoded-key secret_key: base64-encoded-secret然后在 Pod 中通过secretKeyRef注入环境变量env: - name: AWS_ACCESS_KEY_ID valueFrom: secretKeyRef: key: access_key name: vmbackup-credentials - name: AWS_SECRET_ACCESS_KEY valueFrom: secretKeyRef: key: secret_key name: vmbackup-credentials更安全的方式是使用IAM 角色为 Pod 提供令牌避免手动管理凭证AWS 部署需配置 EKS 的 IAM roles for service accounts。为vmbackup/vmbackupmanager创建带 IAM 角色映射注解的 ServiceAccountapiVersion: v1 kind: ServiceAccount metadata: name: monitoring-backups annotations: eks.amazonaws.com/role-arn: arn:aws:iam::{ACCOUNT_ID}:role/{ROLE_NAME}随后将 Pod 配置为使用该 ServiceAccountvmbackup/vmbackupmanager会自动通过 IAM role for service account 获取凭证。GCP 部署需配置 Workload Identity。创建带 Workload Identity 注解的 ServiceAccount--- apiVersion: v1 kind: ServiceAccount metadata: name: monitoring-backups annotations: iam.gke.io/gcp-service-account: {sa_name}{project_name}.iam.gserviceaccount.com配置 Pod 使用该 ServiceAccount 后vmbackup/vmbackupmanager会自动通过 Workload Identity 获取凭证。使用自定义 S3 endpointvmbackup支持与 MinIO、Cloudian 等 S3 兼容存储配合使用只需通过-customS3Endpoint指定自定义 endpointMinIO 示例-customS3Endpointhttp://localhost:9000AWS Gov 区域示例-customS3Endpointhttps://s3-fips.us-gov-west-1.amazonaws.comS3 兼容存储上对象的永久删除vmbackup与vmbackupmanager在执行增量备份时对 S3 兼容对象存储使用标准的 delete 操作该操作只删除对象的当前版本大多数场景下够用。若需要删除对象的所有历史版本可传入-deleteAllObjectVersions命令行参数./vmbackup -storageDataPath... -snapshot.createURL... -dsts3://bucket/path -deleteAllObjectVersions此外也可以使用对象存储的**生命周期规则lifecycle rules**自动清理非当前版本对象具体请参阅所用存储厂商的文档。命令行参数详解运行vmbackup -help可查看全部可用参数。核心参数整理如下参数默认值说明-concurrency int10并发 worker 数量调大可缩短备份耗时-configFilePath string—S3 配置文件路径未设置时从默认位置加载-configProfile string—S3 配置的 profile 名未设置时读取AWS_PROFILE/AWS_DEFAULT_PROFILE环境变量-credsFilePath string—GCS 或 S3 凭证文件路径未设置时从默认位置加载-customS3Endpoint string—S3 兼容存储如 MinIO的自定义 endpoint未设置时使用标准 S3-deleteAllObjectVersionsfalse删除对象时是否同时清除其全部历史版本-dst string—备份目标路径如gs://bucket/path、s3://bucket/path、azblob://container/path、fs:///path/to/backup。若指向已有备份则执行增量备份使用自定义 S3 endpoint 时 URL 只含桶名-filestream.disableFadvisefalse读取大数据文件时禁用fadvise()系统调用-httpListenAddr string:8420导出/metrics指标的 HTTP 监听地址-maxBytesPerSecond size0不限速最大上传速度支持KB/MB/GB/TB/KiB/MiB/GiB/TiB后缀-origin string—远端存储上旧备份目录用于完整备份时做服务器端复制以加速-s3ACL string—S3 上传对象的 ACL可选private、public-read、authenticated-read、bucket-owner-full-control等-s3ForcePathStyletrue是否用 path style 访问 S3endpoint 前加桶名前缀-s3ObjectTags string—S3 对象标签JSON 格式如{param1:value1}-s3SSEKMSKeyId string—S3 兼容存储的 SSE KMS Key ID-s3StorageClass string—AWS S3 存储类可选GLACIER、DEEP_ARCHIVE、STANDARD、STANDARD_IA等-s3TLSInsecureSkipVerifyfalse连接 S3 endpoint 时跳过 TLS 校验-snapshot.createURL string—VictoriaMetrics 创建快照的 URL如http://victoriametrics:8428/snapshot/create设置后无需再设-snapshotName-snapshot.deleteURL string—删除快照的 URL未设置时由-snapshot.createURL自动推导-snapshot.tls*—连接-snapshot.createURL的 TLS 配置CAFile、CertFile、KeyFile、InsecureSkipVerify、ServerName-snapshotName string—要备份的已存在快照名设置了-snapshot.createURL则无需设置-storageDataPath stringvictoria-metrics-dataVictoriaMetrics 数据路径必须与 VictoriaMetrics/vmstorage的-storageDataPath一致关键参数的源码定义参见 app/vmbackup/main.gohttpListenAddr、storageDataPath、snapshotName、snapshot.createURL、snapshot.deleteURL、dst、origin、concurrency、maxBytesPerSecond与 lib/snapshot/snapshot.gosnapshot.tls*系列参数。补充说明几个细节参数-envflag.enable允许从环境变量读取命令行参数环境变量值优先级低于命令行 flag-envflag.prefix可为环境变量指定前缀-objectMetadata string为上传对象设置元数据JSON 格式本地文件系统目标不支持-loggerLevel/-loggerFormat/-loggerOutput控制日志级别INFO/WARN/ERROR 等、格式default或json与输出stderr或stdout-pushmetrics.*将/metrics页面的指标推送到远端监控系统-license/-licenseFile企业版 License 配置仅企业版二进制可用。从源码构建官方推荐直接使用发布页vmutils-*压缩包中的预编译二进制该压缩包由根目录 Makefile 的release-vmutils-*系列目标生成其中即包含vmbackup。开发构建安装 Go在仓库根目录执行make vmbackup生成的vmbackup二进制位于bin目录。生产构建安装 Docker在仓库根目录执行make vmbackup-prod生成vmbackup-prod二进制到bin目录。构建 Docker 镜像执行make package-vmbackup构建victoriametrics/vmbackup:PKG_TAG镜像PKG_TAG为根据源码自动生成的镜像标签也可通过PKG_TAGfoobar make package-vmbackup手动指定。基础镜像默认为 alpine可通过ROOT_IMAGE环境变量替换为任意基础镜像。例如构建基于 scratch 的镜像ROOT_IMAGEscratch make package-vmbackup小结vmbackup以即时快照为基础为 VictoriaMetrics 提供了可随时中断、断点续传的备份能力并覆盖 GCS、S3、Azure Blob、S3 兼容存储与本地文件系统等多种目标。完整备份、增量备份与每日YYYYMMDD完整备份 每小时latest增量备份的智能备份策略配合-origin服务器端复制加速可在大数据量场景下显著降低时间与带宽成本。结合本文的源码级原理1 GiB 分块、Part 差集/交集计算、backup_complete.ignore完成标记、快照自动创建与删除与故障排查建议你可以在生产环境可靠地落地 VictoriaMetrics 的数据保护方案并在必要时通过vmrestore快速恢复数据。【免费下载链接】VictoriaMetricsVictoriaMetrics: fast, cost-effective monitoring solution and time series database项目地址: https://gitcode.com/GitHub_Trending/vi/VictoriaMetrics创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表