Docker迁移K3S计划方案
本文介绍关于 Docker、ones.cn(SAAS) 迁移k3s环境 计划方案介绍及实施落地操作文档说明
本文目录
类别 | 内容 |
---|---|
一、ONES docker迁移K3S计划 | ONES docker迁移K3S计划 |
二、数据迁移计划目标 | 数据迁移计划目标 |
三、迁移停机耗时说明 | 迁移停机耗时说明 |
四、迁移实施预演 | 迁移实施预演 |
五、迁移脚本工具使用介绍 | 迁移脚本工具介绍 |
六、常见问题FAQ场景 | 常见问题FAQ场景 |
一、ONES docker迁移K3S计划
docker单机版本实例现状概览
K3S单机版本实例目标概览
单机 K3s 优势摘要
- 改善当前的升级时间要求,支持模块差量更新,降低后续维护成本;
- 应用组件、中间件支持更细粒度的应用和数据分离;组件插拔扩展更为成熟;
- 支持更加灵活的数据备份策略、监控告警运维周边工具;
- 未来支持自助运维工具箱,ONES 私有部署实例操作更加简化及自助化,运维体验更加透明和友好;
- 支持节点横向扩展,提供多副本实例;
- K3S作为ONES 未来主要部署编排维护方向;
二、数据迁移计划目标
在迁移目标中,我们的重点是主数据,即ONES系统中的业务结构化数据和业务静态附件文件非结构化数据(⽂件,包含⼯作项或wiki⻚⾯的附件、图⽚等)业务结构化数据它们分别对应MySQL数据库和Kafka消息队列(clickhouse备份),及对应ONES业务运维配置文件。
迁移流程概要说明
除此之外,我们还有其他数据存储在tikv和ClickHouse中,但这些数据可以通过重新生成及重放的方式进行恢复。因此,在迁移过程中,我们只需要专注于备份迁移这两类主数据即可。
收集旧单机Docker容器实例资源性能指标、服务器资源配置、数据体量体积、是否更换服务器,以便进一步评估服务资源迁移方案
备份数据,升级容器业务版本到LTS新版本,当前我们默认升级到 v3.14.110 LTS 版本;
部署与之容器业务版本对应版本(v3.14.110)K3s 新单机实例(按照 k3s 安装文档进行部署);
a. 如果使用新机器安装单机实例,此时原来的单机容器部署实例可以继续作为备份工作,在目标服务器上部署 k3s 环境;
b. 如果在同一台机器上安装 K3s 单机实例,服务器应保留足够配置资源及剩余磁盘空间,整个迁移过程,单机容器实例将会停止服务(不再写入数据);
c. 可以使用自助安装工具来完成 K3s 单机实例的部署;
停机通知,提前通知相关人员,预定迁移时间,以便在迁移期间停机。 通过工具备份导出单机容器部署实例的数据,并通过恢复工具导入到 K3s 单机实例中;
数据备份恢复方式摘要
(一)文件部分:
- 方式1 脚本通过本地Volume数据卷数据,进行备份打包;
- 方式2 脚本本地 Volume 通过 Bind Volume 方式,将数据卷挂载至 MinIO 对象存储数据挂载点创建桶后,迁移恢复进行拉取;
- 方式3 手动完成挂载原有 Volume数据盘/卷,并将mv到 K3s 存储的 PVC 中;
(二)数据库部分:
- 方式1 使用备份导入新实例;
- 方式2 外置数据库,通过配置修改对接endpoint;
数据导入后验证迁移,验证服务是否能够正常启动,业务是否恢复,观察是否有异常情况,基于全量数据重建热数据,涉及能力:索引搜索、效能报表(短暂服务降级: 影响在线搜索)
涉及变更,更新域名 DNS 或负载均衡配置,如果有相关域名 DNS 或负载均衡配置及外部第三方集成,确保更新指向目标服务器。
监控日志,确保在目标服务器上设置合适的监控和日志服务,以便及时发现和解决问题,验收K3S实例通过后,建议保留源单机Docker容器 1-2 Week工作日。
清理源单机Docker容器服务器数据资源,可以停机释放资源。
三、迁移停机耗时说明
为确保数据完整一致性,整个迁移期间,ONES单机Docker容器需要进行停机直至迁移K3S后,使用K3S新实例 请提前完成停机通知,整体迁移停机耗时受服务器网络资源及数据量体积有关,对磁盘IO读写的效率依赖较大(受限于本地磁盘的性能),若IO读写效率较低 迁移效率会遇到影响,会导致迁移处理过程变长
- 单机Docker容器升级LTS过程耗时参考最近一次升级耗时(涉及数据备份)
- 安装 K3s 单机实例耗时需要根据网络及服务器硬件等条件依赖,一般在1~2小时左右
- 数据导出、导入过程都和实例中现有的数据量体积相关。根据实际磁盘IO速度、网络速度的不同,所需要的数据也有所不同。一般再通用完整备份方案下,我们在不同量级需要的操作时间如下:
以下不同数据量级预估时间,仅供参考: 受服务器、网络资源情况影响,会导致迁移处理过程变长
数据量级 | 单机容器升级 | 数据导出(从容器中) | 数据导入恢复(到K3s中) |
---|---|---|---|
200G | 1-2h | 1-2h | 1-3h |
500G | 2-4h | 2-4h | 3-5h |
1T | 4-6h | 4-6h | 5-8h |
2T | 7-12h | 7-12h | 10-15h |
上述方案是迁移的默认方案。
大数据量实例,建议与实施团队沟通,更加精细的制定和执行整个迁移过程方案。下述是一些我们重点考虑的点。
数据类型 | 用途 | 迁移策略 | 优势 | 耗时/备注 |
---|---|---|---|---|
MySQL 数据库 | 业务核心数据库 | MySQL Dump | 数据重放,数据一致性完整性/事务功能 | 数据较大的情况下,导入较慢 |
业务核心数据库(外置) | K3S对接配置即可 | 数据复用 | n/a | |
Kafka 数据 | 重建基于流数据的业务数据 | Kafka Topic Dump | n/a | n/a |
附件、文档 | 业务数据(本地文件存储) | 文件导出导入 | 数据完整镜像 | 数据较大情况下,同步较慢 |
Minio 导出 + 回源(推荐) | 数据完整镜像/ 回源同步 | 回源同步下载需要较长的过程 | ||
直接挂载 Data Volume | 数据复用,迁移过程快 本机迁移, 不需要额外导出数据 | 无法使用 OpenEBS(单机); 存在部分冗余数据 | ||
(NAS/OSS对象存储) | K3S对接配置即可 | 数据复用 | n/a | |
插件数据 | 插件运行时数据 | 文件导出导入 | n/a | n/a |
Clickhouse -Auditlog | 审计日志数据 | Dump 导出导入 | 数据重放,保留原有审计日志数据 | n/a |
TiKV | 索引中间件数据 | 基于 MySQL 重建 | 无需迁移 | 根据数据量不同需要一定时间 |
Performance | Performance 报表数据 | 基于 Kafka 重建 | 无需迁移 | 根据数据量不同需要一定时间 |
ONES 运维配置 | 业务配置 | 文件导出 | n/a | n/a |
https | 1、推荐使用代理, 2、如果使用80/443端口,采用K3S配置项 | 1个小时 | ||
域名 | ||||
多域名 | ||||
80/443端口 | ||||
客户使用代理 | 配合修改代理策略 | 0.5个小时 | ||
上传大小限制 | 手工在页面上配置 | 需ONES配置中心配置 | ||
邮件 | 重新在页面上配置 | 需ONES配置中心配置 | ||
ONES备份任务 | 数据备份操作 | 重新开启K3S备份 | 1个小时 |
四、迁移实施预演
- 迁移准备 信息收集
当前Docker单机实例信息
服务器类型/操作系统 | ONES 版本 | 服务器资源配置描述 | 现在数据体量体积 | 迁移服务器规格 | 备注(外置扩展等信息) |
---|---|---|---|---|---|
X86/ARM | v3.14.110及以上 | CPU: | 文件附件: | 迁移独立服务器部署K3S 本地服务器迁移K3S 迁移多节点K3S/K8S集群 | 外接对象存储OSS 外接MySQL数据库 外接Nas磁盘 |
内存: | 备份包大小: | ||||
Centos7.9 | 磁盘SSD/IO读写: | Volume占用大小: |
迁移目标服务器信息
服务器类型/操作系统 | 迁移服务器规格 | 服务器资源配置描述(本地迁移忽略) | 备注(外置扩展等信息) |
---|---|---|---|
X86/ARM | 迁移独立服务器部署K3S 本地服务器迁移K3S 迁移多节点K3S/K8S集群 | CPU: | 外接对象存储OSS 外接MySQL数据库 外接Nas磁盘 Ps: 涉及迁移独立服务器,需要确保与旧实例同一个内网,否则需要离线拷贝上传备份包。 |
内存: | |||
Centos7.9 Ubuntu18以上 | 磁盘SSD/IO读写: |
- 环境检查 部署K3S实例
详细参考: ONES K3S 私有部署环境要求 ,若当前Docker实例服务器,无法满足K3S部署实例,建议基于当前用户日活使用规模,参考ONES规格推荐,升级服务器配置。
五、ones-private-migration 迁移脚本工具
迁移脚本基本功能摘要: 备份ONES-AI-Docker 单机环境实例数据,再K3S/K8S完成数据恢复能力
工具脚本下载地址
# 访问版本列表,下载最新工具下载地址
curl -s https://res.ones.pro/script/version.txt # 查看版本列表:下载地址
curl -O https://res.ones.pro/script/ones-private-migration-latest.tar.gz # 下载最新版本
工具脚本目录结构
├── export_data.log # 备份导出日志
├── import_data.log # 恢复导入日志
├── pkg # 离线资源包
│ ├── minio-image-x86-1.0.0.tar
│ └── tools-x86.tar.gz
│ └── tools-arm64.tar.gz
├── private_migration_restore.sh # k3s/k8s恢复脚本
├── private_migration.sh # ai-docker备份脚本
└── README.md # 说明文档
├── /tmp/flag.pid # 过程进展标志位文件
基本特性摘要
支持迁移目标:
Kafka数据及偏移、Clickhouse数据(审计日志)、MySQl数据、附件数据、运维配置支持离线方式
支持错误断点重试(可以重复运行)
支持跨主机文件minio备份恢复/本地同步文件镜像恢复
支持MySQL dump多线程备份/恢复
运维配置备份加密
支持迁移前后核心业务数据校验/表结构md5校验
支持常规备份恢复 ARM环境
支持SAAS(ONES.CN)导出备份数据包恢复
支持业务管道服务重建(kilob/performance/fileIndex)
运行环境
- x86_64 GNU/Linux
- ONES-AI-Docker部署环境验证测试(理论X86 Arm均支持)
- K3S部署环境恢复验证测试
一、迁移备份工具
该脚本运行环境:ONES-AI-Docker x86_64 部署环境验证测试,运行脚本时,涉及到服务停机,提前通知相关人员,预定迁移时间,以便在迁移期间停机,具体参考:迁移K3S方案计划
bash private_migration.sh # 运行备份脚本
1、选择迁移备份 "1" 本地Ai-Docker迁移备份
2、配置数据备份目录(配置的目录剩余空间必须大于20%)
配置文件备份方式
如有跨主机服务器迁移,推荐使用2 minio文件桶方式,需要确保K3S/K8S服务器能够访问本备份服务器。
- 1 本地文件同步镜像,既拷贝一份原数据附件(本地迁移数据体量小优先)
- 2 minio文件桶方式,本地服务器对外提供rclon source (跨主机迁移量大优先)
- 3 本地通过mount绑定原本地服务器ONES-AI-DOCKER 附件数据-->K3S PVC (仅支持单机K3S,脚本暂不开放,需要手动完成文件处理)
工具运行时介绍
- 备份配置选项
- 打印常规环境信息,备份目录及备份配置选项
- 停止业务服务(此时业务不可用)
- MySQL数据备份/表校验信息导出
Kafka数据备份导出/偏移值备份(允许容错备份失败)- Clickhouse数据表备份导出 (允许容错备份失败)
- 业务文件数据备份
- 运维配置备份
MySQL数据备份导出阶段
针对业务数据库进行遍历,对存在的业务数据库进行备份导出,
Kafka数据备份/偏移值备份导出阶段
全量备份kafka数据,保存kafka业务 audit_log ones-binlog offset偏移
Clickhouse数据表备份导出阶段
导出audit_log数据库业务表
业务文件数据备份导出阶段
业务文件数据包含:files 及plugin(如有插件业务)
运维配置备份/配置编码加密/打包
以下示例:已完成迁移数据备份操作,产出压缩包文件
/data2/backup/ones-data-202311281157.tar.gz
如本地迁移K3S,可直接使用备份未压缩数据目录: /data2/backup/ones-data
备份数据目录 /data2/backup/ones-data产物如下
├── camunda.sql # MySQL备份数据
├── clickhouse-backup # clickhouse备份数据
│ ├── backup_audit_log_audit_log.zst
├── conf # 运维配置备份数据
│ ├── latest_config.json
│ └── options.json
├── files # 附件备份数据
│ ├── constraint_cert
│ ├── constraint_cert_20231123-192345
│ ├── importer
│ ├── private
│ ├── public
│ ├── wiki
│ └── wiz-editor
├── info.json # 备份元数据文件
├── kafka-backup # Kafka备份数据(弃)
│ ├── 20231128-115742.175
│ ├── kafka.store
│ └── restore.store
├── project.sql # MySQL备份数据
├── superset.sql # MySQL备份数据
├── wiki.sql # MySQL备份数据
└── wizeditor.sql # MySQL备份数据
二、迁移恢复工具
该脚本运行环境:ONES-AI-K8S x86_64 K3S单机部署环境验证测试,运行脚本时,涉及K3S数据清理,请确保K3S数据是可清理状态,在迁移期间K3S业务将会停机,具体参考:迁移K3S方案计划
环境依赖
- 通过工具完成的备份包/SAAS(ONES.CN)备份包(需要解压后数据目录 例:ones-data)
- 全新部署的ONES K3S/K8S环境 (可以通过自助部署方式完成)
- ONES K3S/K8S环境业务版本需要匹配备份包业务版本号
执行数据恢复脚本:以/data/ones-data 数据目录为例
# 临时拷贝迁移恢复工具至 installer-api pod
install_pod_name=$(kubectl -n ones-installer get pod -l "app=installer-api" -o jsonpath='{.items[0].metadata.name}')
# 如果希望持久化保留导入日志,不建议再/tmp目录下运行该脚本,可以放到持久化数据目录下
# 例如:/data/ones/ones-local-storage
mkdir -p /data/ones/ones-local-storage/docker_migration
kubectl -n ones-installer -c installer-api cp private_migration_restore.sh $install_pod_name:/data/ones/ones-local-storage/docker_migration
ones-ai-k8s.sh # 进入ai-k8s 运维操作容器
cd /data/ones/ones-local-storage/docker_migration
# 执行迁移恢复工具 既:/data2/backup/ones-data 是未压缩前数据备份目录,直接使用。
bash private_migration_restore.sh -p /data2/backup/ones-data # -p 数据目录(解压后) -t (可选/支持消息通知)
工具运行时介绍
- 加载备份数据包/创建备份恢复工作环境
- 打印备份包元信息/用户确认备数据份业务版本号当前K3S业务版本号,及恢复项
- K3S业务服务停止运行
- 检查MySQL状态、清理MySQL数据 初始化表结构、导入数据
- 检查Clickhouse服务状态、导audit_log业务数据库表
- 检查Kafka服务状态、匹配备份包恢复源数据进行恢复、调整Kafka Topic offset偏移
- 运行相关业务组件(此时服务会逐渐完成启动,业务可以访问)
- 清理缓存数据(redis)、基础检查项、MySQL核心数据及结构校验、重建管道服务(kilob/performance/file index)
- 检查业务附件数据,进行同步恢复, 如是minio 通过mc mirror s3拉取完成恢复
加载备份数据包
加载备份包数据/创建恢复工作环境,打印备份包元信息/用户确认 备份恢复方式
停止业务Pod编排
检查MySQL状态、清理MySQL数据 初始化表结构、导入数据
检查Clickhouse服务状态、导audit_log业务数据库表
检查Kafka服务状态、匹配备份包恢复源数据进行恢复、调整Kafka Topic offset偏移
检查业务附件数据,进行同步恢复, 如是minio 通过mc mirror s3拉取完成恢复
运行相关业务组件(此时服务会逐渐完成启动,业务可以访问)
三、数据恢复后常规检查项
具体参考:迁移K3S方案计划
- 数据恢复后常规运维配置检查项(如若访问方式地址发生了变更,邮箱配置,特殊配置相关需要再K3S环境完成配置)
- 服务器磁盘空间剩余容量检查(如果发现磁盘容量不足,需及时清理相关备份包数据,或联系客户完成扩容,避免影响业务使用)
- K3S/K8S节点健康状态检查
- 业务Pod服务运行检查
- 业务后端Pod服务日志巡检
- 管道服务日志巡检
- 若有ONES页面账号权限/登录账号常规检查 project项目工作项增删改查/wiki页面组页面增删改查/上传附件测试/审计日志历史记录查看
- 附件迁移和数据重建都需要时间,相关操作完成并查看日志确认正常后,再正式投产!
kubectl get node # 查看节点健康状态
kubectl -n ones get po |grep -vi running # 除去running状态,是否存在异常Pod
kubectl -n ones logs -l app=project-api -c project-api --tail=20 -f # 查看业务后端日志
kubectl -n ones logs -l app=wiki-api -c wiki-api --tail=20 -f # 查看业务后端日志
# 管道服务再数据恢复后,服务需要一定时间完成数据消费、数据重建 涉及服务降级能力: 效能管理 审计操作日志更新 全局搜索 报表相关能力
kubectl get po -n ones |grep -iE "audit|binlog|bi-sync|kilob" # 查看管道Pod服务状态,并检查日志状态
kubectl -n ones logs audit-log-sync-deployment-xxxxx-xxxx --tail=20 -f # 例auditlog
四、常见FAQ场景
1. 备份 or 恢复过程因为网络终端超时或其他原因断开了,该怎么办?
# 确认是否任务已经断开,或已经完成?
# 例: ones namespace
# 建议下次可以再终端运行screen等后台终端,例如: screen -S ones # 这样就不用担心终端超时网络异常
find_data_transfer=`kubectl -n ones get pod -l app=data-files-transfer -o jsonpath='{.items[0].metadata.name}'`
kubectl -n ones exec $find_data_transfer -- ps -ef # 查看脚本是否正在运行 # {start_sync.sh} /bin/bash /data/backup_files/start_sync.sh 该handle脚本任务可忽略
kubectl -n ones logs $find_data_transfer # 查看日志
# 通过查看标志位查看任务阶段
cat /tmp/flag.pid
# 重复执行迁移备份/恢复脚本即可,迁移期间脚本支持断点重跑。
2. minio方式适用于什么场景?(暂不支持ARM环境)
文件数据体积较大/较多,且需要跨服务器迁移
3. 运行备份提示 Please enter the ONES AI-Docker Deploy Path:
备份脚本需要定位Ai-Docker最后一次部署/升级目录,默认会通过环境变量文件/etc/ones_environment
(ai-docker自身维护该文件)为准,如果/etc/ones_environment
不存在或错误,则会提示用户手动输入部署目录位置,例填写: /data/ones/pkg/ones-package-3.xx.xx-x86
4. SAAS(ONES.CN)导出数据包迁移,特殊操作
# 注意! SAAS 导出数据包,文件附件为压缩包,且压缩方式不包含目录层级关系,再使用迁移恢复工具时,请先再宿主机完成附件解压操作
# 解压数据包,例数据包目录: /data/ones-data
cd /data/ones-data/files
mkdir private
mv ../private.tar.gz ./
tar zxf private.tar.gz
# 其他例: public wiz-editor 等压缩包同理
# 完成后,正常执行恢复脚本即可
5. 我需要重新执行某一个步骤的备份/导入工作 or 重新备份/重新导入
# 例: 再恢复导入阶段,我希望重新导入mysql project数据库
vi /tmp/flag.pid # 编辑标志位文件
# 例如内容:
generate_data_transfer_/data/ones-data
kafka_copy_tools_setp_/data/ones-data
clickhouse_restore_setp done
k8s_kafka_seek_offset_setp done
kafka_restore_setp done
k8s_files_rsync_restore_setp_flag
mysql_dropdb_setp done
import db /data/backup_files/wiki.sql done
import db /data/backup_files/wizeditor.sql done
import db /data/backup_files/project.sql done
k8s_import_sql_step done
k8s_mysql_initdb_setp done
k8s_mysql_restore_setp done
# 删除标志位,重新运行导入脚本即可
import db /data/backup_files/project.sql done
k8s_mysql_restore_setp done
k8s_import_sql_step done
# 重新备份/重新导入
rm -rf /tmp/flag.pid # 删除整个标志位,重新运行所有过程
6. 通过本地迁移文件方式(非minio),由于文件较大较多,已经影响业务运行,需要非业务高峰期再进行同步剩余文件。
find_data_transfer=`kubectl -n ones get pod -l app=data-files-transfer -o jsonpath='{.items[0].metadata.name}'`
kubectl -n ones exec $find_data_transfer -- kill -USR2 1 # 停止文件同步任务
kubectl -n ones exec $find_data_transfer -- kill -USR1 1 # 启动文件同步任务
7. 外置数据库MySQL5/MySQL8场景下,如何完成迁移
外置数据库场景,数据导出备份工具将不会备份MySQL数据,并会记录外置数据库信息保留再原数据文件info.json
,再恢复操作时脚本并不会针对外置数据库作恢复动作,当所有恢复步骤完成后,您需要基于info.json
元信息中记录的外置数据库鉴权信息,进行相关数据库鉴权配置,执行make setup-ones
确认变更后,完成变更。
8. 使用MySQL dumpling备份MySQL数据(该方式比mysqldump 快接近2-3倍,不支持ARM)
# 迁移备份导出时运行
bash private_migration.sh -mysql_type dumpling
# 恢复操作不变,原信息`info.json`将会记录该配置
9. 如何查看迁移备份原信息/运维配置内容?
# 例: 备份包 /data/ones-data
# 备份包原信息
cat /data/ones-data/info.json |base64 -d
# 原ai-docker运维配置
cat /data/ones-data/conf/latest_config.json |base64 -d
cat /data/ones-data/conf/options.json |base64 -d
10. 我需要重放重建kafka auditlog clickhouse数据
# 默认迁移会恢复审计日志历史数据: 该数据再clickhouse中
# 恢复时同样会恢复kafka 消费偏移,会从ai-docker实例当前备份的偏移继续消费,不需要重新消费,如有需求:重置auditlog
# 参考OPS文档库: https://opsdoc.ones.cn/docs/data/K3S/audit-log
11. 我需要额外重置重建搜索数据/重置索引中间件(脚本再文件导入前阶段,会自动重建)
# 进入 ones-ai-k8s 操作终端
ones-ai-k8s.sh
# 修改配置
vi config/private.yaml
# 改成跟上一次不一样的值即可
kilobSyncSchemaHash: "2" # 改变随意一个数字,与当前不一即可
# 应用配置
make setup-ones
# 查看进度
kubectl logs -n ones -l app=kilob-sync --tail=200 -f
# 稍后验证
# 查看 ONES 负责人,筛选器,文档查询功能是否正常
12. 我需要额外重置/重放Performance数据(脚本再文件导入前阶段,会自动重建)
# 参考OPS文档库:https://opsdoc.ones.cn/docs/data/K3S/rebuild-performance
13. ai-docker kafka clickhouse实例异常,无法工作,我该如何迁移?
# 当导出备份工具无法完成,且kafka clickhouse服务异常情况下
# 处理方式: 根据实际情况选择
# 1、恢复kafka clickhouse服务状态,查看消费者数据内容,可以提业务工单
# 2、放弃数据kafka or clickhouse迁移,如果页面审计日志有历史日志,进行下载导出,与客户同步该情况信息,上报owner leader。
# 例:操作放弃迁移clickhouse kafka数据
vi /tmp/flag.pid
# 写入如下两行标志位,重新运行备份导出脚本即可,将会跳过该备份步骤。
Kafka Backup Process done
Clickhouse DB audit_log All Backup Process done
14. The selected directory /xxx has insufficient space, which is below the expected threshold of less than 20%. The backup process has been automatically canceled.
当运行迁移备份导出工具,选择备份本地保存目录时,当检查该目录剩余空间不足20%,将停止备份操作,你需要更换一个保存目录,或进行该数据目录扩容。
15. 我需要在线获取最新迁移工具
bash private_migration.sh # 选择 "u" 在线更新工具
# 重新运行脚本即可
16. k3s clickhouse导入数据异常: Kill
当k3s导入clickhouse数据时提示:Kill 是Clickhouse Pod 触发内存limit管理阈值,内存不足OOM
1、可以尝试调整clickhouse limit内存阈值大小,或取消内存limit限制
kubectl edit statefulset clickhouse -n ones # 搜索查找limit相关配置,取消内存限制
2、修改脚本private_migration_restore.sh 搜索:max_insert_block_size 调整其大小,降低该值,再重新运行脚本进行迁移恢复。
3、以上两类方式修改后无果 一、建议增加服务器内存规格配置 二、放弃迁移clickhouse 审计日志表 三、提交工单支持
17. kafka备份异常时,可以选择跳过kafka数据备份(确保clickhouse数据是完整的) 或者不需要业务操作日志
审计日志实际数据源来自:clickhouse audit_log库audit_log表,只需确保该数据备份并导入,理论可以放弃kafka数据备份, 脚本再新版本支持容错情况(clickhouse/kafka允许备份恢复失败)。
1、手动配置跳过kafka备份操作
# 删除遗留数据
cd [$你的备份路径]/ones-data/
rm -rf kafka-backup
vi /tmp/flag.pid # 编辑标志位文件
# 加入以下内容
Kafka Backup Process done
2、重新运行数据导出备份脚本
18. 文件附件恢复同步阶段,是否可以做其他变更操作? 如何查看恢复同步进度? 如何重建文件附件索引?
文件附件恢复同步阶段,是迁移恢复最后阶段,运行该阶段时已经完成除了文件索引重建外所有恢复动作,再该步骤可以执行相关运维变更操作,注意:再该同步阶段,部分服务降级甚至不可用:例 wiki业务,附件相关场景(依赖附件文件服务均受到影响)
1、 文件附件恢复同步阶段,是否可以做其他变更操作? 可以,但非必要不建议
2、如何查看恢复同步进度?
find_data_transfer_cmd="kubectl -n ones get pod -l app=data-files-transfer --sort-by=.status.startTime -o jsonpath='{.items[-1].metadata.name}'"
data_transfer_pod=$(eval "$find_data_transfer_cmd")
kubectl -n ones logs $data_transfer_pod -f --tail=50
19. 当文件未完成同步永久性中断,期间业务有了增量数据该如何处理?
# 完成一次文件数据备份!
# 尝试查询data_transfer Pod是否存在(如果存在跳过创建步骤)
data_transfer=`kubectl -n ones get pod -l app=data-files-transfer -o jsonpath='{.items[0].metadata.name}'`
echo $data_transfer
# 如果不存在 请使用迁移恢复工具创建该Pod
vi /tmp/flag.pid # 删除创建data_transfer标志位,迁移工具将会重新创建
clickhouse_restore_setp done
k8s_kafka_seek_offset_setp done
kafka_restore_setp done
k8s_files_rsync_restore_setp_flag
mysql_dropdb_setp done
import db /data/backup_files/wiki.sql done
import db /data/backup_files/wizeditor.sql done
import db /data/backup_files/project.sql done
k8s_import_sql_step done
k8s_mysql_initdb_setp done
k8s_mysql_restore_setp done
# 删除以下标志位,重新运行导入脚本即可
generate_data_transfer_/data/ones-data
kafka_copy_tools_setp_/data/ones-data
# 创建完成后继续完成以下操作
data_transfer=`kubectl -n ones get pod -l app=data-files-transfer -o jsonpath='{.items[0].metadata.name}'`
# 进入transfer pod
kubectl -n ones exec $data_transfer bash
# 请使用如下命令,注意!不能漏参数(已存在的文件,将会跳过不覆盖)
# file目录
rclone copy "/data/backup_files/files" "/data/ones/file" --ignore-existing --transfers=5 --links --checkers=10 --fast-list --buffer-size=256M -P --stats=60s --size-only
# plugin 目录
rclone copy "/data/backup_files/plugin" "/data/plugin" --ignore-existing --transfers=5 --links --checkers=10 --fast-list --buffer-size=256M -P --stats=60s --size-only
20. 当前实例环境 文件数量及体积较大(未使用NAS/OSS等远端存储)我需要减少停机时间完成数据迁移 避免业务受到长时间中断,该如何处理? (单机原始文件迁移方式)
当文件数量及体积较多较大,由于整个迁移方案文件迁移几乎最原始一比一情况,文件也是迁移过程耗时最长一环,ONES业务特性除去在线文档编辑
latest.json
文件会有再次编辑可能,其他文件均不会二次写入,我们可以提前再业务低峰时间段(避免Io抢占影响业务使用)进行文件手动备份同步保存 该操作下业务将可以继续运行,当正式迁移时由于文件未变更特性,文件同步将会进行差量备份,将大大提高时效。
整个操作过程 第一保证不干预原始环境数据 对数据要有敬畏
1、迁移工具运行前,提前完成文件备份(操作不影响业务)
# 这里作为例子: 本地 /data2 作为我们的k3s数据盘,当然也可以是跨节点服务器例(新服务器部署k3s)
# 业务低峰时间段执行 rsync/rclone 进行文件备份 -> /data2
# 建议使用后台终端完成运行
# 注意:当文件过大,已经影响到业务正常使用,请先关闭同步,可以选择再凌晨时开始备份(另外Docker实例凌晨有定时备份能力,建议先临时关闭crontab备份计划)
screen -S ones # (screen -rd ones 如终端断开,通过该命令终端恢复)
docker ps # 查询ONES Docker实例 容器ID
docker inspect --format "{{.Mounts}}" $容器id # 查询ONES Docker实例数据目录,根据实际变量替换容器ID
# 一般情况下返回如下,我们获取到volume卷宿主机位置信息 /var/lib/docker/volumes/ones-data/_data
# root@ones-test ones-data]# sudo docker inspect --format "{{.Mounts}}" 812f
# [{volume ones-data /var/lib/docker/volumes/ones-data/_data /data local z true }]
# 可以使用rsync rclone等工具,切记我们只拷贝,不要干预原数据
mkdir -p /data2/files /data2/plugin
# 拼接具体ONES附件位置 /var/lib/docker/volumes/ones-data/_data/ones/files/
rsync -a --info=progress2 /var/lib/docker/volumes/ones-data/_data/ones/files/ /data2/files/
# 插件
rsync -a --info=progress2 /var/lib/docker/volumes/ones-data/_data/plugin/ /data2/plugin/
# 执行完成后 /data2/files目录结构大致如下
# [root@ones-data]# ls /data2/files/
# constraint_cert importer private public wiki wiz-editor
2、完成K3S实例部署,正式开始迁移 (操作影响业务,正式停机迁移)
由于首次文件同步,再运行二次文件同步时将会进行差量同步,大大降低文件迁移同步耗时
# 1. 确保k3s环境实例安装完成可用状态,具体k3s安装步骤参考 "k3s初装文档"
# 2. 再次完成文件同步,此时业务停止使用,可以选择停止容器
docker stop $容器id
# 通过rsync可以使用跨节点主机ssh传输,不仅支持本地磁盘拷贝
rsync -a --info=progress2 /var/lib/docker/volumes/ones-data/_data/ones/files/ /data2/files/
# 插件
rsync -a --info=progress2 /var/lib/docker/volumes/ones-data/_data/plugin/ /data2/plugin/
# 3. 将完成文件备份同步的内容,写入到k3s 业务附件pvc下
# k3s单机实例为例,集群版本需要写入到共享存储下
# 例k3s数据目录安装路径如下
# /data2/ones/ones-local-storage/others-static-pvc/ones/ones-file-volume-pvc
# 由于同一块数据盘操作仅为变更inode
# ONES业务附件内容(请更换实际路径)
cd /data2/ones/ones-local-storage/others-static-pvc/ones/ones-file-volume-pvc
mv /data2/files/* ./
# ONES插件附件内容(请更换实际路径)
cd /data2/ones/ones-local-storage/others-static-pvc/ones/platform-plugin-pvc
mv /data2/plugin/* ./
3、运行迁移工具 关闭文件备份迁移能力
通过文件备份选项,关闭文件同步功能(迁移工具将不再备份文件/恢复文件操作)
bash private_migration.sh
选择 "3" 备份工具将不再备份文件内容
备份结果如下: