跳到主要内容
版本:v3&v6

Docker迁移K3S计划方案

提示

本文介绍关于 Docker、ones.cn(SAAS) 迁移k3s环境 计划方案介绍及实施落地操作文档说明

本文目录

类别内容
一、ONES docker迁移K3S计划ONES docker迁移K3S计划
二、数据迁移计划目标数据迁移计划目标
三、迁移停机耗时说明迁移停机耗时说明
四、迁移实施预演迁移实施预演
五、迁移脚本工具使用介绍迁移脚本工具介绍
六、常见问题FAQ场景常见问题FAQ场景

一、ONES docker迁移K3S计划

docker单机版本实例现状概览

alt text

K3S单机版本实例目标概览

alt text

单机 K3s 优势摘要

  1. 改善当前的升级时间要求,支持模块差量更新,降低后续维护成本;
  2. 应用组件、中间件支持更细粒度的应用和数据分离;组件插拔扩展更为成熟;
  3. 支持更加灵活的数据备份策略、监控告警运维周边工具;
  4. 未来支持自助运维工具箱,ONES 私有部署实例操作更加简化及自助化,运维体验更加透明和友好;
  5. 支持节点横向扩展,提供多副本实例;
  6. K3S作为ONES 未来主要部署编排维护方向;

二、数据迁移计划目标

在迁移目标中,我们的重点是主数据,即ONES系统中的业务结构化数据和业务静态附件文件非结构化数据(⽂件,包含⼯作项或wiki⻚⾯的附件、图⽚等)业务结构化数据它们分别对应MySQL数据库和Kafka消息队列(clickhouse备份),及对应ONES业务运维配置文件。

迁移工具

迁移流程概要说明 alt text

除此之外,我们还有其他数据存储在tikv和ClickHouse中,但这些数据可以通过重新生成及重放的方式进行恢复。因此,在迁移过程中,我们只需要专注于备份迁移这两类主数据即可。

  1. 收集旧单机Docker容器实例资源性能指标、服务器资源配置、数据体量体积、是否更换服务器,以便进一步评估服务资源迁移方案

  2. 备份数据,升级容器业务版本到LTS新版本,当前我们默认升级到 v3.14.110 LTS 版本;

  3. 部署与之容器业务版本对应版本(v3.14.110)K3s 新单机实例(按照 k3s 安装文档进行部署);

    a. 如果使用新机器安装单机实例,此时原来的单机容器部署实例可以继续作为备份工作,在目标服务器上部署 k3s 环境;

    b. 如果在同一台机器上安装 K3s 单机实例,服务器应保留足够配置资源及剩余磁盘空间,整个迁移过程,单机容器实例将会停止服务(不再写入数据);

    c. 可以使用自助安装工具来完成 K3s 单机实例的部署;

  4. 停机通知,提前通知相关人员,预定迁移时间,以便在迁移期间停机。 通过工具备份导出单机容器部署实例的数据,并通过恢复工具导入到 K3s 单机实例中;

  5. 数据备份恢复方式摘要

    (一)文件部分:

    • 方式1 脚本通过本地Volume数据卷数据,进行备份打包;
    • 方式2 脚本本地 Volume 通过 Bind Volume 方式,将数据卷挂载至 MinIO 对象存储数据挂载点创建桶后,迁移恢复进行拉取;
    • 方式3 手动完成挂载原有 Volume数据盘/卷,并将mv到 K3s 存储的 PVC 中;

    (二)数据库部分:

    • 方式1 使用备份导入新实例;
    • 方式2 外置数据库,通过配置修改对接endpoint;
  6. 数据导入后验证迁移,验证服务是否能够正常启动,业务是否恢复,观察是否有异常情况,基于全量数据重建热数据,涉及能力:索引搜索、效能报表(短暂服务降级: 影响在线搜索

  7. 涉及变更,更新域名 DNS 或负载均衡配置,如果有相关域名 DNS 或负载均衡配置及外部第三方集成,确保更新指向目标服务器。

  8. 监控日志,确保在目标服务器上设置合适的监控和日志服务,以便及时发现和解决问题,验收K3S实例通过后,建议保留源单机Docker容器 1-2 Week工作日。

  9. 清理源单机Docker容器服务器数据资源,可以停机释放资源。

三、迁移停机耗时说明

为确保数据完整一致性,整个迁移期间,ONES单机Docker容器需要进行停机直至迁移K3S后,使用K3S新实例 请提前完成停机通知,整体迁移停机耗时受服务器网络资源及数据量体积有关,对磁盘IO读写的效率依赖较大(受限于本地磁盘的性能),若IO读写效率较低 迁移效率会遇到影响,会导致迁移处理过程变长

  1. 单机Docker容器升级LTS过程耗时参考最近一次升级耗时(涉及数据备份)
  2. 安装 K3s 单机实例耗时需要根据网络及服务器硬件等条件依赖,一般在1~2小时左右
  3. 数据导出、导入过程都和实例中现有的数据量体积相关。根据实际磁盘IO速度、网络速度的不同,所需要的数据也有所不同。一般再通用完整备份方案下,我们在不同量级需要的操作时间如下:

以下不同数据量级预估时间,仅供参考: 受服务器、网络资源情况影响,会导致迁移处理过程变长

参考:K3S磁盘Io规划最佳实践建议

数据量级单机容器升级数据导出(从容器中)数据导入恢复(到K3s中)
200G1-2h1-2h1-3h
500G2-4h2-4h3-5h
1T4-6h4-6h5-8h
2T7-12h7-12h10-15h

上述方案是迁移的默认方案。

大数据量实例,建议与实施团队沟通,更加精细的制定和执行整个迁移过程方案。下述是一些我们重点考虑的点。

数据类型用途迁移策略优势耗时/备注
MySQL 数据库业务核心数据库MySQL Dump数据重放,数据一致性完整性/事务功能数据较大的情况下,导入较慢
业务核心数据库(外置)K3S对接配置即可数据复用n/a
Kafka 数据重建基于流数据的业务数据Kafka Topic Dumpn/an/a
附件、文档业务数据(本地文件存储)文件导出导入数据完整镜像数据较大情况下,同步较慢
Minio 导出 + 回源(推荐)数据完整镜像/ 回源同步回源同步下载需要较长的过程
直接挂载 Data Volume数据复用,迁移过程快 本机迁移, 不需要额外导出数据无法使用 OpenEBS(单机); 存在部分冗余数据
(NAS/OSS对象存储)K3S对接配置即可数据复用n/a
插件数据插件运行时数据文件导出导入n/an/a
Clickhouse -Auditlog审计日志数据Dump 导出导入数据重放,保留原有审计日志数据n/a
TiKV索引中间件数据基于 MySQL 重建无需迁移根据数据量不同需要一定时间
PerformancePerformance 报表数据基于 Kafka 重建无需迁移根据数据量不同需要一定时间
ONES 运维配置业务配置文件导出n/an/a
https1、推荐使用代理, 2、如果使用80/443端口,采用K3S配置项1个小时
域名
多域名
80/443端口
客户使用代理配合修改代理策略0.5个小时
上传大小限制手工在页面上配置需ONES配置中心配置
邮件重新在页面上配置需ONES配置中心配置
ONES备份任务数据备份操作重新开启K3S备份1个小时

四、迁移实施预演

  • 迁移准备 信息收集

当前Docker单机实例信息

服务器类型/操作系统ONES 版本服务器资源配置描述现在数据体量体积迁移服务器规格备注(外置扩展等信息)
X86/ARMv3.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迁移备份

image-20231128114445600

2、配置数据备份目录(配置的目录剩余空间必须大于20%)

image-20231128114645652

  1. 配置文件备份方式

    如有跨主机服务器迁移,推荐使用2 minio文件桶方式,需要确保K3S/K8S服务器能够访问本备份服务器。

    • 1 本地文件同步镜像,既拷贝一份原数据附件(本地迁移数据体量小优先)
    • 2 minio文件桶方式,本地服务器对外提供rclon source (跨主机迁移量大优先)
    • 3 本地通过mount绑定原本地服务器ONES-AI-DOCKER 附件数据-->K3S PVC (仅支持单机K3S,脚本暂不开放,需要手动完成文件处理)
工具运行时介绍
  1. 备份配置选项
  2. 打印常规环境信息,备份目录及备份配置选项
  3. 停止业务服务(此时业务不可用)
  4. MySQL数据备份/表校验信息导出
  5. Kafka数据备份导出/偏移值备份(允许容错备份失败)
  6. Clickhouse数据表备份导出 (允许容错备份失败)
  7. 业务文件数据备份
  8. 运维配置备份

MySQL数据备份导出阶段

针对业务数据库进行遍历,对存在的业务数据库进行备份导出,

image-20231128115807963

Kafka数据备份/偏移值备份导出阶段

全量备份kafka数据,保存kafka业务 audit_log ones-binlog offset偏移

image-20231128120337722

Clickhouse数据表备份导出阶段

导出audit_log数据库业务表

image-20231128120532643

业务文件数据备份导出阶段

业务文件数据包含:files 及plugin(如有插件业务)

image-20231128120627811

运维配置备份/配置编码加密/打包

以下示例:已完成迁移数据备份操作,产出压缩包文件/data2/backup/ones-data-202311281157.tar.gz 如本地迁移K3S,可直接使用备份未压缩数据目录: /data2/backup/ones-data

image-20231128120737009

备份数据目录 /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 (可选/支持消息通知)

工具运行时介绍
  1. 加载备份数据包/创建备份恢复工作环境
  2. 打印备份包元信息/用户确认备数据份业务版本号当前K3S业务版本号,及恢复项
  3. K3S业务服务停止运行
  4. 检查MySQL状态、清理MySQL数据 初始化表结构、导入数据
  5. 检查Clickhouse服务状态、导audit_log业务数据库表
  6. 检查Kafka服务状态、匹配备份包恢复源数据进行恢复、调整Kafka Topic offset偏移
  7. 运行相关业务组件(此时服务会逐渐完成启动,业务可以访问)
  8. 清理缓存数据(redis)、基础检查项、MySQL核心数据及结构校验、重建管道服务(kilob/performance/file index)
  9. 检查业务附件数据,进行同步恢复, 如是minio 通过mc mirror s3拉取完成恢复

加载备份数据包

加载备份包数据/创建恢复工作环境,打印备份包元信息/用户确认 备份恢复方式

image-20231128123758778

停止业务Pod编排

image-20231128123931625

检查MySQL状态、清理MySQL数据 初始化表结构、导入数据

image-20231128140743675

image-20231128140822319

检查Clickhouse服务状态、导audit_log业务数据库表

image-20231128140849233

检查Kafka服务状态、匹配备份包恢复源数据进行恢复、调整Kafka Topic offset偏移

image-20231128140918160

检查业务附件数据,进行同步恢复, 如是minio 通过mc mirror s3拉取完成恢复

image-20231128141102503

运行相关业务组件(此时服务会逐渐完成启动,业务可以访问)

image-20231128140949851

三、数据恢复后常规检查项

具体参考:迁移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" 在线更新工具
# 重新运行脚本即可

Alt text

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" 备份工具将不再备份文件内容

alt text

备份结果如下:

alt text

4、正常运行迁移恢复工具即可