#作者:闫乾苓
文章目录
- 迁移步骤
- 停止nexus3服务
- 备份nexus原始数据
- 修改Blob Stores中元数据文件中类型为s3
- 将Blob Stores中的二进制构件文件数据复制s3(minio)存储
- 修改OrientDB中相关Blob Stores的属性
- 修复OrientDB的文件权限
- 开启nexus3服务
- 迁移完成后数据验证
- 迁移完成后repository上传下载功能测试
- 迁移失败回滚步骤
- 停止nexus服务
- 回滚原始数据
- 修复OrientDB数据库文件的权限为200
- 回滚修改blob store元数据文件
- 重新启动nexus服务
- 验证是否回滚成功
迁移步骤
停止nexus3服务
因nexus3服务使用k8s deployment部署的1副本pod,所以停止服务只需将pod副本数缩减为0即可。
# kubectl scale --replicas=0 deployment devops-nexus -n nexus-2
备份nexus原始数据
对nexus的持久化的原始数据进行备份,以便迁移失败进行回滚操作,如果迁移的blob store中的数据量较大,可以不对其备份。
本例以default blob store进行说明,使用rsync工具进行数据备份时,使用—exclude参数排除不对blobs/default目录进行备份。
# rsync -a * --exclude 'blobs/default' /home/yanqianling/nexus/nexus_backup/file2s3/data_bak/
修改Blob Stores中元数据文件中类型为s3
在nexus 数据持久化的nfs server 服务器上,进入数据存储目录,比如本例:
# cd /home/nfsdata/nexus-2-nexus-pvc-pvc-8583da75-34f3-4710-be9c-c3532a3c9764/blobs
修改需要迁移的Blob Store(本例为default)的元数据文件metadata.properties,将类型由file改为s3
将Blob Stores中的二进制构件文件数据复制s3(minio)存储
使用aws命令将default目录下的所有文件复制到minio中已经创建的bucket: nexus-default
# aws s3 cp /home/nfsdata/nexus-2-nexus-pvc-pvc-8583da75-34f3-4710-be9c-c3532a3c9764/blobs/default/ s3://nexus-default/ --recursive --endpoint-url http://192.168.123.240:44127
注意:/home/nfsdata/nexus-2-nexus-pvc-pvc-8583da75-34f3-4710-be9c-c3532a3c9764/blobs/default/及s3://nexus-default/ 两个路径最后的“/”不可省略,表示将default目录下的所有文件复制到minio中名为nexus-default的bucket中。
复制过程如下:
复制完成后查看minio中名为nexus-default的bucket中的数据与default目录的文件大小基本一致:
default目录暂时不要删除,等neuxs后续使用s3(minio)存储运行一段时间可稳定运行后后,再考虑是否对其进行删除,以释放磁盘空间。
修改OrientDB中相关Blob Stores的属性
首先启动OrientDB cli工具中console.sh,其路径为:orientdb-community-2.2.37/bin
再连接Nexus Orient DB
connect plocal:/home/nfsdata/nexus-2-nexus-pvc-pvc-8583da75-34f3-4710-be9c-c3532a3c9764/db/config/ admin admin
注意:
config为要操作的Orient DB的库名
默认的账号和密码均为admin
执行以下sql命令修改default bolb store的属性,增加s3(minio)的信息
UPDATE repository_blobstore MERGE {attributes: {s3: {region: 'us-east-1', bucket: 'nexus-default', prefix: '', expiration: -1, accessKeyId: '65WNgqImKSD3c0qX', secretAccessKey: 'n7iXpeOECUX3u3OOmzGPmS9M7JT4Y2nd', endpoint: 'http://169.169.174.183:29000', forcepathstyle: 'true'} } } WHERE name='default';
执行以下sql命令,将default blob store 类型改为s3
UPDATE repository_blobstore SET type = 'S3' WHERE name = 'default';
执行以下命令,查看是否修改完成
SELECT * FROM repository_blobstore
执行过程如下:
修改数据库完成后断开与数据库的连接并退出终端工具。
disconnect
exit
修复OrientDB的文件权限
因为上面修改OrientDB使用的是root权限,修改完成后,其相关数据库文件的熟悉被改为了root,需要将其修复为nexus服务pod容器中nexus账号的属主,属组的ID号200。以确保pod中服务启动时不会报权限错误。
# cd /home/nfsdata/nexus-2-nexus-pvc-pvc-8583da75-34f3-4710-be9c-c3532a3c9764/db
# chown -R 200:200 config/
开启nexus3服务
使用scale将pod副本数从0扩容到1,即开启nexus服务。
# kubectl scale --replicas=1 deployment devops-nexus -n nexus-2
# kubectl logs -f pod/devops-nexus-8574ff68f-6nwrw -n nexus-2
迁移完成后数据验证
nexus服务重新启动完成后,登录web管理界面,查看迁移的blob store的类型是否改为s3,数据大小是否符合预期。
点击迁移完成的blob store,正确应该可以进入到编辑页面,可以对其属性进行再次修改。
检查原repository中的文件:
迁移完成后repository上传下载功能测试
测试手动上传
提示上传完成
查看刚上传的文件包
blob store 显示文件数量和数据量都有相应的增加,说明上传功能正常。
下载测试
点击下载后,会弹出保存文件的窗口
文件下载完成
对比其md5值,验证其完整性,在win10系统进入powershell,进入下载文件的目录,使用以下命令计算其md5值
Get-FileHash -Path .\repo-03-testfile_10 -Algorithm MD5
对比nexus web界面此文件的md5值一致,说明迁移后原有文件的完整无损坏。
迁移失败回滚步骤
停止nexus服务
# kubectl scale --replicas=0 deployment devops-nexus -n nexus-2
回滚原始数据
将备份的原始数据复制回nexus的nfs 持久化存储
#cd /home/yanqianling/nexus/nexus_backup/file2s3/data_bak
# rsync -a * /home/nfsdata/nexus-2-nexus-pvc-pvc-8583da75-34f3-4710-be9c-c3532a3c9764/
修复OrientDB数据库文件的权限为200
# chown -R 200:200 config/
如果忘记修改权限,nexus pod将启动失败,日志会有如下提示:
回滚修改blob store元数据文件
将default/metadata.properties中类型由s3改为file
重新启动nexus服务
# kubectl scale --replicas=1 deployment devops-nexus -n nexus-2
查看日志,如下为nexus服务正常启动
验证是否回滚成功
登录web管理界面查看default blob store是否回滚为file类型、文件数量、数据量大小是否和迁移前一致
查看repository内文件列表,可以进行上传下载测试,验证功能是否正常。