生产环境变更 AppSpace存储切换

你好,我是老成。今日分享一个运维实战案例。

背景介绍

去年24年,我搭建了一个其他人员找的开源 App 分发系统(AppSpace),供公司内部使用。最开始在一个单节点 Docker 环境部署,随着时间的推移,迁移到了 K8s 环境当中,我们 K8s 环境中,所有项目没有特殊情况存储方式全部都会走对象存储,不会走 PVC(使用对象存储,是为了便于项目的迁移)。

然而,这个 App 分发系统就是那个特殊情况,不支持内部的 Ceph 版的对象存储,要支持只能去修改代码,当时又没有人去改这个东西,于是只能先走 PVC 进行存储。

上周,我领导将这个 App 分发系统进行了代码修改,支持了内部的 Ceph 对象存储。于是我就开始实施存储方式的切换,和数据迁移(PVC->对象存储)工作。

下面将介绍,存储切换和数据迁移过程中的问题和流程。注意:以下操作均在测试环境验证通过之后,才具体变更到生产,同时本文已在生产变更实践。

官网:appspa.github.io/docs/develo...

GitHub:github.com/appspa/app-...

数据迁移

通过 s3cmd 命令将数据目录,同步到对象存储当中

bash 复制代码
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 命令介绍,可查看这篇博客:blog.csdn.net/codelearnin...

修改数据库

1)修改我们数据库的地址,将http://appsapce-test.test.com修改为http://appspace-test.test.com/对象存储桶名称。将源下载地址,修改为新地址。

2)通过查看数据,得知只有这两个集合中保存地址信息,导出数据

不知道具体集合,可直接导出整个库数据,通过 VSCode 批量查找信息即可

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

数据迁移了,App应用无法下载

1)问题现象

点击下载 App 按钮后,无反应,浏览器页面空白,好像也看不出和意识到啥问题,如图:

2)排查步骤

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

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

3)处理方法

通过 s3cmd 命令批量开启目录下文件权限

bash 复制代码
s3cmd setacl --recursive s3://xxx-appspace-test/67b5926efe8167002406ad64/ --acl-public

由于这里有23个目录,实现批量的话,可以写个 for 循环即可

bash 复制代码
for i in $(s3cmd la | awk '{print $2}'); do
  s3cmd setacl --recursive ${i} --acl-public
done

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

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

END

最后。昨天我创建了一个免费星球,叫 "运维开发领域(免费)",欢迎围观,交流。

星球将会比群聊更加活跃,同时包含干货内容和知识分享。

进星球可免费看,我前段时间写的付费专栏,《如何搞定博客,全流程实践指南》:mp.weixin.qq.com/s/3AnbRTxcN...

点击查看,免费专栏地址:wx.zsxq.com/group/88882...

相关推荐
YC运维23 分钟前
网络配置综合实验全攻略(对之前学习的总结)
linux·服务器·网络
平凡灵感码头1 小时前
什么是 Bootloader?怎么把它移植到 STM32 上?
linux·soc
无敌的牛2 小时前
Linux基础开发工具
linux·运维·服务器
Edingbrugh.南空2 小时前
实战指南:用pmap+gdb排查Linux进程内存问题
linux·运维·服务器
亚马逊云开发者2 小时前
将 Go 应用从 x86 平台迁移至 Amazon Graviton:场景剖析与最佳实践
linux·数据库·golang
大叔是90后大叔2 小时前
Linux/Ubuntu安装go
linux·ubuntu·golang
孙克旭_3 小时前
day051-ansible循环、判断与jinja2模板
linux·运维·服务器·网络·ansible
渡我白衣3 小时前
Linux操作系统之进程间通信:共享内存
linux
Mr_Orangechen4 小时前
Linux 下使用 VS Code 远程 GDB 调试 ARM 程序
linux·运维·arm开发
lilian1294 小时前
linux系统mysql性能优化
linux·运维·mysql