你好,我是老成。今日分享一个运维实战案例。
背景介绍
去年24年,我搭建了一个其他人员找的开源 App 分发系统(AppSpace),供公司内部使用。最开始在一个单节点 Docker 环境部署,随着时间的推移,迁移到了 K8s 环境当中,我们 K8s 环境中,所有项目没有特殊情况存储方式全部都会走对象存储,不会走 PVC(使用对象存储,是为了便于项目的迁移)。
然而,这个 App 分发系统就是那个特殊情况,不支持内部的 Ceph 版的对象存储,要支持只能去修改代码,当时又没有人去改这个东西,于是只能先走 PVC 进行存储。
上周,我领导将这个 App 分发系统进行了代码修改,支持了内部的 Ceph 对象存储。于是我就开始实施存储方式的切换,和数据迁移(PVC->对象存储)工作。
下面将介绍,存储切换和数据迁移过程中的问题和流程。注意:以下操作均在测试环境验证通过之后,才具体变更到生产,同时本文已在生产变更实践。
官网:https://appspa.github.io/docs/developer-guide/index/
GitHub:https://github.com/appspa/app-space
数据迁移
通过 s3cmd 命令将数据目录,同步到对象存储当中
1. 单次
s3cmd sync /data s3://xxx-appspace
# 或者
s3cmd put --recursive /data s3://xxx-appspace-test
2. 批量
for i in $(ls); do
s3cmd sync ${i} s3://xxx-appspace
done
更多 s3cmd 命令介绍,可查看这篇博客:https://blog.csdn.net/codelearning/article/details/142267161
修改数据库
1)修改我们数据库的地址,将http://appsapce-test.test.com
修改为http://appspace-test.test.com/对象存储桶名称
。将源下载地址,修改为新地址。
2)通过查看数据,得知只有这两个集合中保存地址信息,导出数据
不知道具体集合,可直接导出整个库数据,通过 VSCode 批量查找信息即可

3)通过 VSCode 批量替换后再将数据导入数据库即可

数据迁移了,App应用无法下载
1)问题现象
点击下载 App 按钮后,无反应,浏览器页面空白,好像也看不出和意识到啥问题,如图:

2)排查步骤
排查第一步,浏览器打开 F12 开发者模式查看接口地址。

拿到地址后,我们直接访问该地址,发现403错误,权限被拒绝访问。正常情况直接访问对象存储地址都是可以下载资源的,所以肯定是对象存储权限问题。

3)处理方法
通过 s3cmd 命令批量开启目录下文件权限
s3cmd setacl --recursive s3://xxx-appspace-test/67b5926efe8167002406ad64/ --acl-public

由于这里有23个目录,实现批量的话,可以写个 for 循环即可
for i in $(s3cmd la | awk '{print $2}'); do
s3cmd setacl --recursive ${i} --acl-public
done


通过以上操作之后,我们服务下载功能就正常

另外通过 S3 Browser 图形化也是可以管理,不过不推荐,因为不能批量操作。通过 s3cmd 命令,可以实现对目录进行批量操作。

END
最后。昨天我创建了一个免费星球,叫 ”运维开发领域(免费)“,欢迎围观,交流。
星球将会比群聊更加活跃,同时包含干货内容和知识分享。
进星球可免费看,我前段时间写的付费专栏,《如何搞定博客,全流程实践指南》:https://mp.weixin.qq.com/s/3AnbRTxcNQ1wZnkKjyvNug
点击查看,免费专栏地址:https://wx.zsxq.com/group/88882812844552/topic/2852411425851221

非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:https://www.qiuyl.com/xueyw/422
共有 0 条评论