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

article/2025/8/22 1:53:43

#作者:闫乾苓

文章目录

  • 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.hkcw.cn/article/fZTcvpVYpX.shtml

相关文章

今天北京最高气温32℃,午后阵风明显 出行注意防暑防风

今天白天多云,北风一级转南风三级,阵风六级,最高气温32℃;夜间多云,南转北风一二级,最低气温22℃。今天云量增多,气温仍较高,午后阵风明显,出行注意防暑防风勤补水。温红征 摄责任编辑:0882

工具识别系统Python+深度学习+人工智能+卷积神经网络算法+TensorFlow+图像识别

一、介绍 工具识别系统,使用Python作为主要编程语言,基于TensorFlow搭建卷积神经网络算法,通过收集了8种常见的日常工具图片(“汽油罐(Gasoline Can)”, “锤子(Hammer)”, “钳子&…

歌手终于炒出新菜了!

歌手终于炒出新菜了!《歌手2025》迎来了一位新面孔,原创歌手兼音乐剧演员湛嘉丽。她凭借代表作《海鸥》展现了不俗的实力,网友们对这位新人充满期待,并评论说:“歌手终于炒出新菜了。”今年的《歌手》节目给了音乐剧很大的舞台,不仅打破了以往依赖“回锅肉”的模式,还注…

机器学习-线性回归基础

一、什么是回归 依据输入x写出一个目标值y的计算方程,求回归系数的过程就叫回归。简言之:根据题意列出方程,求出系数的过程就叫做回归。 回归的目的是预测数值型的目标值y,分类的目的预测标称型的目标值y。 二、线性回归 2.1线性…

什么是MSBC

mSBC(Modified SubBand Coding)是蓝牙协议中用于语音通话的一种音频编码格式,专为HFP/HSP(蓝牙免提/耳机规范)设计。它是对SBC(SubBand Coding)的改进版本,核心目标是在有限带宽下保…

2024长春全国邀请赛CCPC

文章目录 G - Platform GameI - The Easiest ProblemL - Recharge G - Platform Game 题目来源:G - Platform Game 解题思路 可以先对每个平台的高度从大到小排序,高度相同再根据横坐标从左往右排序,依次遍历每个平台,如果高…

王树森推荐系统公开课 排序06:粗排模型

shared bottom 表示神经网络被所有特征共享。精排模型主要开销在神经网络,神经网络很大且很复杂。 每做一次推荐,用户塔只做一次推理。物品塔存放入向量数据库。 后期融合模型常用于召回,前期融合模型常用于精排。 物品塔短时间内比较稳…

中国车企经营状况几何 高负债背后的研发投入

近日,“车圈恒大”这一话题在舆论界引起广泛关注,资本市场因此出现连续震荡,汽车股集体下跌。恒大的问题主要在于其“高负债、高周转、高风险”的扩张模式,最终导致资金链断裂。汽车行业是否存在类似现象?这种论调能否作为行业洞察?从可收集到的上市整车公司公开财务数据…

RPG16.重攻击

1.创建GA_HeavyAttackMaster 2.打开,然后设置实例化策略为每个实例化Actor 设置标签 创建子类GA_HeavyAttack_Axe,设置子类的标签 父类里添加print输出用于调试 3.添加输入,复制LightAttack,重命名 打开DA_InputConfig,添加输入…

Dify中 SYSTEM, USER, ASSISTANT 的关系、职责与使用方法

在Dify这类对话式AI应用构建平台中,SYSTEM, USER, ASSISTANT 这三种消息类型共同定义了与大型语言模型(LLM)交互的结构和上下文。它们的关系可以理解为: SYSTEM: 扮演着“导演”或“场景设定者”的角色。USER: 扮演着“提问者”或“任务发起者”的角色。ASSISTANT: 扮演着“…

藏海传全面登顶 肖战演技获肯定

藏海传全面登顶 肖战演技获肯定!《藏海传》全面登顶,肖战用实力证明了自己不仅仅是流量,也打破了很多人对流量的偏见,肖战演技值得被肯定藏海传全面登顶 肖战演技获肯定。责任编辑:0882

DFS:从入门到进阶的刷题指南

目录 一、基础DFS:递归实现、状态标记、回溯 全排列问题 组合问题 子集问题 二、网格DFS:二维矩阵遍历、连通块计数、方向数组 岛屿数量 单词搜索 被围绕的区域 三、 记忆化DFS:动态规划DFS,缓存中间结果 斐波那契数列&a…

《P2324 [SCOI2005] 骑士精神》

题目描述 输入格式 第一行有一个正整数 T(T≤10),表示一共有 T 组数据。 接下来有 T 个 55 的矩阵,0 表示白色骑士,1 表示黑色骑士,* 表示空位。两组数据之间没有空行。 输出格式 对于每组数据都输出一行。如果能在…

XMOS以全新智能音频及边缘AI技术亮相广州国际专业灯光音响展

全球领先的边缘AI和智能音频解决方案提供商XMOS于5月27-30日亮相第23届广州国际专业灯光、音响展览会(prolight sound Guangzhou,以下简称“广州展”,XMOS展位号:5.2A66)。在本届展会上,XMOS将展出先进的音…

吉林大学操作系统上级实验四(hash存储讲解及顺序存储文件管理实现)

此章节书上内容既包括文件操作,又包括hash存储的实现,较复杂。 先讲解一下涉及的文件操作: 文件操作: 一.creat系统调用 图一 create函数原型(图中pachname应为pathname) 当调用creat函数时,它会尝试创建一个名为p…

消息队列-kafka为例

目录 消息队列应用场景和基础知识MQ常见的应用场景MQ消息队列的两种消息模式如何保证消息队列的高可用?如何保证消息不丢失?如何保证消息不被重复消费?如何保证消息消费的幂等性?重复消费的原因解决方案 如何保证消息被消费的顺序…

基于Docker和YARN的大数据环境部署实践最新版

基于Docker和YARN的大数据环境部署实践 目的 本操作手册旨在指导用户通过Docker容器技术,快速搭建一个完整的大数据环境。该环境包含以下核心组件: Hadoop HDFS/YARN(分布式存储与资源调度)Spark on YARN(分布式计算…

图片压缩工具 | 发布到咸鱼并配置网盘自动发货

OPEN-IMAGE-TINY,一个基于 Electron VUE3 的图片压缩工具,项目开源地址:https://github.com/0604hx/open-image-tiny 在上一篇文章ElectronVue3Rsbuild开发桌面应用中,我们已经完成了程序的开发,可以发布给别人使用啦…

ASP.NET Core OData 实践——Lesson7使用Reference增删改查一对多Navigation Property(C#)

大纲 主要模型设计支持的接口控制器设计数据源查询(GET)查询基类类型Entity的导航属性查询派生类型Entity的导航属性查询基类类型Entity的导航属性集合中指定Entity查询派生类类型Entity的导航属性集合中指定Entit 新增(POST)和 完整更新(PUT)向基类类型Entity的导航属性建立或…

无需自建高防:APP遭遇DDoS的解决方案

2021年,某知名电商平台在"618"大促期间遭遇DDoS攻击,支付系统瘫痪近2小时;2022年,一款热门手游在新版本上线时因CC攻击导致服务器崩溃。 据观察,电商大促、暑期流量高峰和年末结算期等关键商业周期&#xf…