私有化迁移方案

一、目标

vika维格表平台的测试环境、生产环境,所有应用服务、存储服务与定制开发服务完整地、平滑地无缝迁移到K8S,保障数据、用户、权限以及第三方集成平台等,迁移后保持正常运行且数据无误。


二、部署架构图



三、迁移准备事项

已集成自研或第三方系统,请自行同步迁移

有哪些服务或资源需要迁移?

类别

当前服务/资源

迁移说明

应用服务

Redis

自建,新环境重新安装

应用服务

数据库

自建,新环境重新安装,并迁移数据

应用服务

rabbit-mq

自建,新环境重新安装

应用服务

Nginx

自建,新环境重新安装

应用服务

Minio

重新安装Minio OSS存储服务,并迁移图片、附件、视频等数据

应用服务

imageProxy

自建,新环境重新安装

应用服务

backend-server

自建,新环境重新安装

应用服务

socket-server

自建,新环境重新安装

应用服务

room-server

自建,新环境重新安装

应用服务

fusion-server

自建,新环境重新安装

其他服务

自研或第三方服务

请自行在新环境重新安装与配置


四、迁移步骤

以下步骤涵盖测试环境与生产环境,新服务器部署完成后,需停机迁移数据,迁移步骤如下:

第一阶段:资源准备、新环境部署与调试

  1. 准备k8s集群、k8s证书上传到终端服务器、私有化镜像仓库(可选)

  2. 开通VPN账号,支持vika OP工程师可远程登录终端服务器

  3. 登录新终端服务器,使用k8s证书,开始在K8S平台上部署所有应用服务、存储服务与定制化服务

  4. 从旧环境同步环境变量

  5. 新环境启动完成



第二阶段:正式迁移

  1. 按双方约定时间,原POC服务器、新环境的应用停止,开始迁移数据库

    1. 根据实际情况选择:

      1. 情况1:若使用云MySQL数据库,通过云DTS数据服务,在线同步Mysql数据,拷贝到新服务器数据库

      2. 情况2:若本地安装的MySQL,用Navicat 工具或 mysql dump 执行导出数据库文件,再导入新数据库

    2. 具体步骤

      1. 先测试下验证工具可以正常同步数据,配置好工具并确认正常可以同步

      2. 全量一次同步,初始数据后,咱们可以在新环境试验下

      3. 最后旧服务器停服,全量同步一次

      4. 清空redis 所有key , 完毕

  2. 对象存储服务Minio数据,原POC服务器安装并使用Minio client工具,拷贝到新服务器,还原附件、图片等数据,参见 Minio数据迁移

  3. 新服务器,重启所有服务

  4. 切换域名到新环境

  5. 打开内网维格表地址,验证数据是否已完整迁移,测试定制化功能是否正常

  6. 试运行


Mysql 迁移

  1. 进入原来mysql 服务器执行备份

    mysqldump -uroot -p vikadata > /data/mysql/vikadata_$(date +%F).sql


2. 导入到新数据库

mysql -uroot -p

-- 关闭binlog ,可选 
> SET sql_log_bin = 0;
> use vikadata;
> source /data/mysql/vikadata_$(date +%F).sql

Minio数据迁移


执行步骤:

1、进入旧minio服务器,安装Minio Client(MC)工具

wget https://dl.min.io/client/mc/release/linux-amd64/mc -O /usr/local/bin/mc && chmod +x /usr/local/bin/mc

2、在旧minio服务器,将新minio 暴露 k8s-endpoint 端口到本地

 kubectl --kubeconfig kubeconfig port-forward services/minio --address 0.0.0.0 9000:9000 -n vika-datacenter

3、执行一键同步minio数据

#!/bin/bash
###
# 本机能访问源和目标minio 存储桶
# 将k8s minio 代理到本机方法:  kubectl port-forward services/minio --address 0.0.0.0 9000:9000 -n vika-datacenter
###

MINIO_ENDPOINT=${MINIO_ENDPOINT:-http://minio-apitable:9000}
MINIO_ACCESS_KEY=${MINIO_ACCESS_KEY:-apitable}
MINIO_SECRET_KEY=${MINIO_SECRET_KEY:-apitable@com}
MINIO_DEST_ENDPOINT=${MINIO_DEST_ENDPOINT:-http://127.0.0.1:9000}
MINIO_DEST_ACCESS_KEY=${MINIO_DEST_ACCESS_KEY:-admin}
MINIO_DEST_SECRET_KEY=${MINIO_DEST_SECRET_KEY:-73VyYWygp7VakhRC6hTf}
MINIO_BUCKET=${MINIO_BUCKET:-assets}
mkdir -p  minio-dst
# cp from source
mc alias set src-minio ${MINIO_ENDPOINT} ${MINIO_ACCESS_KEY} ${MINIO_SECRET_KEY}
#mc cp -r src-minio/${MINIO_BUCKET} minio-dst/

# cp to dst
mc alias set remote-dst-minio ${MINIO_DEST_ENDPOINT} ${MINIO_DEST_ACCESS_KEY} ${MINIO_DEST_SECRET_KEY}
#mc cp -r minio-dst/${MINIO_BUCKET}/ remote-dst-minio/${MINIO_BUCKET}/
# 网络互通时使用,推荐
mc mirror -a src-minio/${MINIO_BUCKET}/ remote-dst-minio/${MINIO_BUCKET}/