当前位置: 首页 > news >正文

Nexus仓库数据高可用备份与恢复方案(上)

#作者:闫乾苓

文章目录

  • 1、要解决的问题
  • 2、解决方案
    • 方案说明
  • 3、方案验证
    • 部署nexus pvc
    • 部署nexus deployment
    • 部署nexus svc
    • 查看部署状态
    • 访问UI页面
    • 创建基于minio 的Blob Store 库
    • 准备测试数据

1、要解决的问题

  1. Nexus使用容器化部署并使用NFS或者HostPath作为数据持久化存储方案时,因NFS/HostPath为非分布式存储解决方案,本身不具备数据高可用存储能力,如何解决其故障发生时业务数据恢复的问题。
  2. 如何保证nexus运行时其业务数据的高可用性、数据量持续增长的问题。

2、解决方案

架构图
在这里插入图片描述

方案说明

  1. Nexus3服务使用k8s Deployment 部署1副本,通过nodeName选定k8s Node节点。
  2. Blob Store 通过s3协议使用mimio高可用分布式存储作为底层二进制文件的存储,确保了上传到Nexus中的构件的数据可用性。
  3. 因为mimio原生不支持文件系统挂载,在不具备Ceph,Glusterfs等分布式环境的情况下,本例将Nexu3 服务的数据目录nexus-data 挂载到通过NFS storageClass 动态绑定的PV中,存储到NFS server. 因NFS原生不具备数据高可用能力,所以这里选择通过cronjob定时备份、Rsync实时同步两种方式进行数据备份,以确保在NFS serve故障引起的数据损坏时有足够的数据恢复能力,后文将详细说明。

3、方案验证

容器化部署nexus

部署nexus pvc

建议使用cephfs等分布式存储,可以确保nexus数据的安全。可省略nexus数据备份的步骤。

本例因不具备cephfs的环境,故使用NFS storageClass 动态绑定pvc作为持久化存储,因NFS不具备数据高可用能力,后文将介绍存储到NFS中的nexus数据如何做备份。

前提:NFS storageClass 已经在k8s环境中部署完成。

nexus-pvc.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:labels:name: nexus-pvcnamespace: nexus-2
spec:accessModes:- ReadWriteManyresources:requests:storage: 50GistorageClassName: nfs# kubectl apply -f nexus-svc.yaml

部署nexus deployment

nexus-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:labels:name: devops-nexusnamespace: nexus-2
spec:replicas: 1selector:matchLabels:app: nexustemplate:metadata:labels:app: nexusspec:nodeName: 192.168.123.242#imagePullSecrets:#  - name: middleware_namespace-imagepullsecretcontainers:#- image: harbor_url/devops-release/list/sonatype/nexus3:3.41.1- image: 192.168.123.241:20030/nexus/nexus3:3.41.1imagePullPolicy: IfNotPresentname: nexusports:- containerPort: 8081protocol: TCPvolumeMounts:- mountPath: /nexus-dataname: nexus-pvcvolumes:- name: nexus-pvcpersistentVolumeClaim:claimName: nexus-pvckubectl apply -f nexus-deployment.yaml

部署nexus svc

nexus-svc.yaml
apiVersion: v1
kind: Service
metadata:labels:name: devops-nexusnamespace: nexus-2
spec:ports:- port: 8081targetPort: 8081selector:app: nexustype: NodePort# kubectl apply -f nexus-svc.yaml

查看部署状态

在这里插入图片描述

访问UI页面

admin账号的密码需要在pv中的admin.password查看
在这里插入图片描述

创建基于minio 的Blob Store 库

需要准备:

  1. minio的API 访问地址(minio默认9000的端口)
  2. 有权限访问bucket的账号的 Access Key ID和 Secret Access Key
    在这里插入图片描述
    在这里插入图片描述
    blob store的名称和Bucket的保持一致,Region选us-east-1(使用默认default会报错),expiration day 可以改为-1,表示不清理已删除的blob store。
    在这里插入图片描述
    Authentication (Optional) 填写有权限访问mimio的Access Key ID及Secret Access Key
    在这里插入图片描述
    Endpoint URL填写 mimio的svc的IP和API端口
    在这里插入图片描述
    相关选项都填写完成后,点击 save 进行创建,创建完成后查看如下:
    在这里插入图片描述
    在minio中查看,在nexus中定义的minio-blob-store bucket 已经创建。并且会有数据写入。
    在这里插入图片描述
    创建repositories 库
    在这里插入图片描述
    类型选择:RAW(hosted),或者根据实际需要进行类型选择。
    Blob store 选上一步已创建的 “minio-blob-store”,并点击“Create repository” 创建.
    在这里插入图片描述
    创建完成后查看:
    在这里插入图片描述
    上传文件到repo-01仓库进行测试
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    等待上传完成,会有提示。
    查看上传:
    在这里插入图片描述
    查看minio中的bucket,磁盘使用量会增加。
    在这里插入图片描述

准备测试数据

使用批量上传文件到Nexus 仓库的脚本,上传50个文件,每个文件100MB。

#!/bin/bashFIEL_BASE_NAME="upload_nexus_test_file"
NEXUS_URL="http://169.169.87.101:8081/repository/"
REPO="repo-01"for i in $(seq 1 50)
doecho ------------ $i ---------------------curl -I -u admin:admin.123 --upload-file ${FIEL_BASE_NAME} ${NEXUS_URL}/${REPO}/${FIEL_BASE_NAME}_$iecho
done

在这里插入图片描述
minio中查看bucket的数据量(注意,minio webUI界面显示的数据量会有短暂延时。)
在这里插入图片描述
为了验证数据的高可用性,再创建1个Blob Store “minio-blob-store-02”,并基于其上创建仓库“repo-02”,同样用脚本批量上传50个100M大小的文件。
在这里插入图片描述
因为minio web界面显示Bucket的数据量会有延迟,可以通过mc 命令进行查看。

# curl https://dl.min.io/client/mc/release/linux-amd64/mc > /usr/local/bin/mc
# chmod +x /usr/local/bin/mc# mc alias set minio-server http://169.169.174.183:29000 65WNgqImKSD3c0qX n7iXpeOECUX3u3OOmzGPmS9M7JT4Y2nd
Added `minio-server` successfully.# mc du  minio-server/minio-blob-store
6.0GiB  114 objects     minio-blob-store# mc du  minio-server/minio-blob-store-02
4.9GiB  102 objects     minio-blob-store-02

2个Bucket 数据量不一样,是因为minio-blob-store在批量上传50个100M的文件前做了其他文件的手动上传测试。

http://www.xdnf.cn/news/716941.html

相关文章:

  • MVCC(多版本并发控制)机制
  • Cangjie 中的值类型与引用类型
  • 设置变体控制两个apk, 一个是有密码,一个是没有密码!
  • 英语写作中“广泛、深入、详细地(的)”extensively、in-depth、at length (comprehensive )的用法
  • 46. Permutations和47. Permutations II
  • Spring Event(事件驱动机制)
  • 力扣面试150题--二叉树的右视图
  • leetcode hot100刷题日记——27.对称二叉树
  • ubuntu系统上运行jar程序输出时间时区不对
  • C#实现单实例应用程序:确保程序唯一运行实例
  • 算法第32天|509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯
  • 构筑电网“无形防线”: 防外破告警在线监测服务系统
  • 如何批量给局域网内网里的电脑发送信息
  • STM32 HAL库函数学习 GPIO篇
  • 【Redis】RDB和AOF混合使用
  • Java求职面试:从核心技术到AI与大数据的全面考核
  • 网络编程之网络编程预备知识
  • Python对接GPT-4o API接口:聊天与文件上传功能详解
  • 人工智能浪潮下,制造企业如何借力DeepSeek实现数字化转型?
  • cutlass学习教程
  • Security
  • Coze Space的分享体验:基于Y模型分析法的深入剖析
  • 交通违法拍照数据集,可识别接打电话,不系安全带的行为,支持YOLO,COCO JSON,VOC XML格式的标注数据集 最高正确识别率可达88.6%
  • window安装nginx
  • PostgreSQL查询一个表的数据
  • AI预测3D新模型百十个定位预测+胆码预测+去和尾2025年5月29日第92弹
  • N2语法 逆接
  • Python应用while嵌套循环
  • 嵌入式学习笔记 - freeRTOS 阻塞延时的实现机制,同时避免在中断中扫描停留
  • 2025音频传输模块全球选购指南:高品质音频体验的品牌之选