阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

近期我迁移了一个百万数据的网站(imgurl.org),分享下迁移过程

560次阅读
没有评论

共计 3289 个字符,预计需要花费 9 分钟才能阅读完成。




本站提供 Linux 服务器运维,自动化脚本编写等服务,如有需要请联系博主 QQ:337003006

背景

imgurl.orgxiaoz 2017 年 12 月开始运营的一个图床网站,以下简称ImgURL,ImgURL 运营期间经历了几次迁移,不过当时数据都还不多,没什么难度。随着时间推移数据量越来越多,至今图片数据已经超过 100 万张,截至2022.03.29 已经达到 1176457 张图片。

目前服务器磁盘 IO 压力比较大(主要来自 MySQL 读写压力和图片处理时的压力(图片裁剪、压缩等)),现阶段 ImgURL 托管在 Psychz,由于 Psychz 机械硬盘 IO 太差,准备从 Psychz 的独服迁移到 Kimsufi 独服,在此做一个记录和分享。

网站结构

ImgURL 主要包括:程序(PHP)+ 数据库(MySQL)+ 外部存储三部分组成,其中外部数据又分 4 个,分别为:

  • 本地
  • Backblaze B2(云上不用考虑迁移)
  • FTP
  • 自建的 minio(S3)

备注:本地、FTP、minio 数据全部在 Psychz

其中数据量最大的为 FTP 和 minio 数据,分别为:

  • FTP:188GB(文件数量未统计)
  • minio 数据:154GB, 对象数量 67 万

数据库迁移

MySQL 数据虽然达到了百万行,但整体数据库不是很大,基本上就是标准的导入、导出操作。

首先导出 MySQL 数据库:

mysqldump -uxxx -pxxx imgurl>imgurl.sql

整个 SQL 文件导出后才 525M, 然后使用scp 命令拷贝迁移(此处省略)

接着是导入数据库:

mysql -u imgurl -p imgurl<imgurl.sql

数据库迁移这个步骤很快就完成了。

备注:不建议使用 MySQL source 命令导入,因为 source 命令会打印每一行操作,百万的数据逐行打印会把你搞奔溃。

迁移网站数据

迁移网站使用的 rsync 命令:

rsync -aqpogt -e 'ssh -p xxx' root@IP:/xxx /xxx

其中参数含义如下:

  • -a, –archive 归档模式,表示以递归方式传输文件,并保持所有文件属性
  • -q, –quiet 精简输出模式,也可以叫静默模式。这里很重要,因为如果文件很多的时候不使用静默模式会输出一大堆文件
  • -p, –perms 保持文件权限。
  • -o, –owner 保持文件属主信息。
  • -g, –group 保持文件属组信息。
  • -t, –times 保持文件时间信息。
  • -e 'ssh -p xxx'是指定 SSH 端口,因为我使用了非标准 SSH 端口(22)

由于网站程序这部分也不是很大,没有花太长时间。

FTP 数据迁移

由于 FTP 数据达到了 188G,算不上很大,但是小文件特别多,这次依然使用rsync 命令迁移 FTP 数据,不过在迁移之前,我们最好使用 screen 命令,让任务保持在后台运行,避免时间过长,导致窗口任务中断。

# 新建一个 screen 会话
screen -S xxx
#使用 rsync 命令迁移
rsync -aqpogt -e 'ssh -p xxx' root@IP:/xxx /xxx

这里比较重要的就是需要让任务后台运行,使用 screen 命令或者其它方式都行,毕竟小文件特别多,以免发生中断。整个过程持续了几个小时,具体多长时间忘记了。

最麻烦的部分 minio 数据迁移

xiaoz 使用的 minio 单机版,并没有使用 minio 集群。单机版的数据似乎是直接以源文件存到磁盘的,比较简单的方式就是直接用 rsync 命令同步源文件,但是不清楚这样是否会存在不可知的风险。因此采用了另一个相对保险的方式,使用 rclone sync 进行同步。

我已经提前在 rclone 上配置好了两边的 minio 信息(步骤省略),名称分别为 psychz_s3kimsufi_s3,一开始使用命令迁移一个桶中 2021 年的数据:

rclone sync -P psychz_s3:/imgurl/imgs/2021 kimsufi_s3:/imgurl/imgs/2021

持续了 13 个小时,还出现了非常多的报错,报错内容为:

The Content-Md5 you specified did not match what we received.

错误文件次数达到 55269,意味着有55269 个文件因为 MD5 校验没通过而迁移失败。出现这个报错的原因应该是之前我是用了非标操作直接修改了 minio 的源文件(minio 单机版可直接看到源文件并修改,之前直接对这些图片源文件进行了压缩处理,导致 MD5 发生变更)。由于文件数太多,再加上 Psychz 的 IO 比较渣,导致 rclone 在扫描的时候花了非常多的时间。

接着继续对余下的数据做迁移,这次我学聪明了,对命令进行了如下优化:

rclone sync --s3-upload-cutoff 0 --tpslimit 10 --ignore-checksum --size-only -P psychz_s3:/imgurl/imgs/2022/03 kimsufi_s3:/imgurl/imgs/2022/03

–s3-upload-cutoff 0

对于未作为分段上传上传的小对象(–s3-upload-cutoff 如果使用 rclone 上传,则对象大小如下),rclone 使用 ETag: 标头作为 MD5 校验和。

然而,对于作为分段上传或使用服务器端加密(SSE-AWS 或 SSE-C)上传的对象,ETag 标头不再是数据的 MD5 总和,因此 rclone 添加了一个额外的元数据 X -Amz-Meta-Md5chksum,它是一个 base64 编码的 MD5 哈希(与 所需的格式相同 Content-MD5)。

对于大型对象,计算此哈希可能需要一些时间,因此可以使用 禁用添加此哈希 –s3-disable-checksum。这意味着这些对象没有 MD5 校验和。

请注意,从对象中读取它需要额外的 HEAD 请求,因为元数据不会在对象列表中返回。

看了官方的描述,我还是没太搞懂 --s3-upload-cutoff 这个参数的具体含义到底是啥。

–tpslimit 10

这个参数的作用,官方描述如下:

对于未作为分段上传上传的小对象(–s3-upload-cutoff 如果使用 rclone 上传,则对象大小如下),rclone 使用 ETag: 标头作为 MD5 校验和。

然而,对于作为分段上传或使用服务器端加密(SSE-AWS 或 SSE-C)上传的对象,ETag 标头不再是数据的 MD5 总和,因此 rclone 添加了一个额外的元数据 X -Amz-Meta-Md5chksum,它是一个 base64 编码的 MD5 哈希(与 所需的格式相同 Content-MD5)。

对于大型对象,计算此哈希可能需要一些时间,因此可以使用 禁用添加此哈希 –s3-disable-checksum。这意味着这些对象没有 MD5 校验和。

请注意,从对象中读取它需要额外的 HEAD 请求,因为元数据不会在对象列表中返回。

  • --ignore-checksum这个参数的含义是忽略哈希校验(MD5),对于大量的小文件来说这个参数很有用,但是可靠性可能会降低
  • --size-only:仅校验文件的大小

通过监控观察了下,rclone 优化前和优化后的命令效果显著,系统负载也是直线下降(应该扫描少了)

154GB 数据, 对象 67 万,使用 rclone sync 同步 minio 数据花了 30 多个小时。rclone 应该还有其它很多优化参数,有兴趣的小伙伴可以取研究下 rclone 官方文档。

总结

截至 2022.03.30https://imgurl.org/ 已成功从 Psychz 迁移到了 Kimsufi,整个过程难度不大,但是 rclone sync 同步 minio 数据花费了太多时间。总结如下:

  1. MySQL 数据导入不推荐 source 命令,建议用这种方式:mysql -u imgurl -p imgurl<imgurl.sql
  2. 如果一个任务可能花费的时间特别长,请务必用 screen 之类的命令让任务保持后台运行,否则可能因为窗口关闭导致任务中断
  3. rclone sync可通过一系列优化参数提高效率,比如忽略 hash 校验--ignore-checksum
  4. Linux 本地文件迁移,推荐用rsync,简单又高效

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-04-26发表,共计3289字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7972072
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛 NAS 硬件 02:某鱼 6 张左右就可拿下 5 盘位的飞牛圣体 NAS 前言 大家好,我是星...
国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号 AI 知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率 大家好,我是星哥,...
支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare 也瘫了连监控都挂,根因藏在哪? 最近两天的互联网堪称“故障...
150元打造低成本NAS小钢炮,捡一块3865U工控板

150元打造低成本NAS小钢炮,捡一块3865U工控板

150 元打造低成本 NAS 小钢炮,捡一块 3865U 工控板 一块二手的熊猫 B3 工控板 3865U,搭...
告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

  告别 Notion 焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁” 引言 在数字笔记工...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

  免费无广告!这款跨平台 AI RSS 阅读器,拯救你的信息焦虑 在算法推荐主导信息流的时代,我们...
浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍

浏览器自动化工具!开源 AI 浏览器助手让你效率翻倍 前言 在 AI 自动化快速发展的当下,浏览器早已不再只是...
星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

  星哥带你玩飞牛 NAS-16:飞牛云 NAS 换桌面,fndesk 图标管理神器上线! 引言 哈...
星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

星哥带你玩飞牛NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手!

星哥带你玩飞牛 NAS-13:自动追番、订阅下载 + 刮削,动漫党彻底解放双手! 作为动漫爱好者,你是否还在为...
恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击 PHP-FPM(FastCGl Process M...