亲历的企业级微服务的完整构建过程-系列文章目录
本人参与了这次的企业级微服务的完整构建,想要记录下来以便以后复习,同时也想分享给小伙伴们,抛砖引玉,欢迎大家提出自己的意见和建议,大家一起探讨一起成长。以下为该系列所有文章的链接:
- 搭建和使用Maven私有仓库(Nexus)(更新中。。。)
- API网关(待发布)
- 认证中心(待发布)
- Redis框架(待发布)
- RabbitMQ(待发布)
- MyBatis(待发布)
- Web模块(待发布)
- 低代码(待发布)
- Core
- 监控和告警(待发布)
- MongoDB(待发布)
搭建和使用Maven私有仓库(Nexus)-系列文章目录
说明:
- 以下部分模块,绝大多数人,在日常工作中都是用不到的,所以我就没有介绍,毕竟时间是最重要的成本,没必要花大量时间在我们用不到的内容上。
- 下面的“1 通用”章节,系列文章中的每一篇内容都相同,介绍一些背景、约定和官网链接等,大家只要知道这些内容了,就不用每篇文章都去看了。
- 安装步骤
- 登录和界面
- 备份和恢复
- 管理:讲述了Nexus的管理功能,包括用户管理、权限管理、任务管理等
- 使用Nexus仓库:讲述了使用(而非管理) Nexus Repository 的方方面面的知识
- 仓库管理器概念:使用 Nexus 需要先理解一些概念,该节内容提供了必要的背景和知识
- 用户界面概述
- 搜索组件(暂时用不到,略)
- 浏览仓库和仓库组
- 管理当前登录用户的资料
- 上传组件
- 查看标签(仅可用于Pro版本,略)
- 集成(主要讲述了如何使用 APIs 和 集成外部工具)(暂时用不到,略)
- Maven中配置和使用Nexus
本文目录
正文
1 通用
1.1 前言
在构建微服务之前,需要先做一些准备工作,比如Maven私有仓库的管理。因为有些微服务模块是作为公共组件被其他微服务引用的,这些公共的微服务,就要设置为依赖,并用Maven仓库管理起来,将自定义的依赖上传到Maven中央仓库并不是一个明智的选择。原因如下:
- 最重要的是隐私和安全问题,我们不可能把企业内部开发的组件上传到公共网络,让所有人能够随便下载;
- 上传很麻烦,上传方法详见 https://blog.csdn.net/agonie201218/article/details/124800163;
- 可能不允许上外网,则无法上传;
- 可能会有网络延迟、上传缓慢的问题。
- 降低了中央仓库的负担。
综上,我们最好是搭建自己的私有Maven仓库,而当前最流行的就是 Sonatype Nexus Repository Manager
,以下简称 Nexus
。
1.2 约定
- 我使用的版本是
OSS 3.40.1-01
,整个系列的文章都是在该版本上展开介绍,你们可能使用的是 Pro 版,少数模块是我的 OSS 版上没有的。不过一般使用的话,OSS 版已经够用了 - 文中出现的
Repository
,中文称之为“仓库” - 文中出现的变量
$install-dir
,值为/opt/sonatype/nexus
- 文中出现的变量
$data-dir
,值为/opt/sonatype/sonatype-work/nexus3
,或/nexus-data
,两者都是在docker容器nexus中的路径,一个是软链接,一个是实际路径 - 文中出现的变量
${jetty.etc}
,值为/opt/sonatype/nexus/etc/jetty
- NXRM:Nexus Repository Manager,即 Nexus 仓库管理器
- RBAC:Role-Based Access Control,即 基于角色的访问控制
1.3 官方文档
提供Nexus的官方文档:https://help.sonatype.com/repomanager3/
官方文档包含了系统要求、搭建方法,以及各种操作方法等,内容已经非常全面了。
2 备份和恢复
背景: Nexus有2种版本:OSS,免费版;Pro,收费版。因为OSS版本只能使用OrientDB数据库,Pro版本才能使用其他数据库(如H2, PostgreSQL),而我使用的是免费的OSS版,所以这里就介绍下如何备份和恢复 OrientDB。以后如果用到Pro版,再补上其他数据库的备份恢复步骤。
2.1 OrientDB数据库数据备份
-
创建备份任务:点击图中的“Create task”按钮
-
创建备份任务:点击“Admin - Export databases for backup”项
-
创建备份任务:点击“Admin - Export databases for backup”项,配置备份项目
需要配置 任务名称、通知邮箱、通知时机、备份路径、任务频率等。其中,“Task frequency”(任务频率),可以配置为基础的“每日、每周”等,也可以使用高级的CRON表达式,上面2张截图中分别使用了2种方式。 -
创建备份任务:配置完点击“Save”按钮,就可以在 Tasks列表中看到我们刚刚配置好的任务记录了
如下图所示:
点击上图中的“bak-data”记录,进入到详情页面,可以删除、手动运行、手动停止 任务,也可以查看任务运行汇总信息,还可以修改任务(点击 ‘Settings’按钮):
-
运行任务:可以点击上图中的“Run”按钮手动运行,也能等待定时任务自动运行
备份任务运行完成后可以在配置的备份路径下找到备份文件,一共3个:# 我这里是在宿主机的物理路径下查看的 root@work:/var/lib/docker/volumes/nexus-data/_data/bak# ll 总用量 580 drwxr-xr-x 2 200 200 4096 7月 1 10:45 ./ drwxr-xr-x 16 200 200 4096 7月 1 10:46 ../ -rw-r--r-- 1 200 200 233985 7月 1 10:45 component-2022-07-01-02-45-00-3.40.1-01.bak -rw-r--r-- 1 200 200 211691 7月 1 10:45 config-2022-07-01-02-45-00-3.40.1-01.bak -rw-r--r-- 1 200 200 134769 7月 1 10:45 security-2022-07-01-02-45-00-3.40.1-01.bak
注:
6. 当任务运行时,它会将备份数据导出到“Backup location”字段中指定的路径。一次备份会生成3个 .bak 文件:
·component - 构成仓库管理器中组件的所有相关数据
·config - 常规管理配置,例如计划任务和电子邮件服务器配置
·security - 所有用户和访问权限管理内容
所有备份文件都基于任务开始时间的时间戳格式显示。
-
配置了通知邮箱没用,任务成功或失败后,并没有发送邮件给该邮箱,后台日志中有一个提示消息:
2022-07-01 02:49:24,866+0000 WARN [event-12-thread-38] *SYSTEM org.sonatype.nexus.internal.email.EmailManagerImpl - No email enabled but asked to send anyway.
。谁研究出解决办法,可以告诉我。2022-07-05 15:51: 这个问题我解决了,是因为我没有配置和启用发送邮件服务器(注意:
Enable
复选框必须打勾,启用它):
2.2 所有数据备份
-
数据库数据备份(参考5.1节)
-
在运行导出任务的同时备份安装目录和数据目录中的自定义配置
-
备份所有 blob 存储
直接备份存储 blob 的目录,通常是$data-dir/blobs
。 -
节点ID 备份
每个 Nexus Repository 实例都与一个不同的 ID 相关联。我们必须备份此 ID,以便 Blob 存储指标(磁盘上 Blob 的大小和数量)和 Nexus Firewall 报告在还原时起作用。要备份以保留节点 ID 的文件位于以下位置:$data-dir/keystores/node/
。 -
将所有备份的配置和导出的数据存储在一起
注:对数据库的写访问被暂时挂起,直到备份完成。建议在下班时间安排备份任务(比如写备份脚本,放到定时任务中运行)。
2.3 OrientDB数据库数据恢复
- 停止 Nexus
- 进入目录
$data-dir/db
,删除以下3个目录:- component/
- config/
- security/
- 进入存储导出数据库备份文件的目录
$data-dir/bak
- 将相应的
.bak
文件复制到$data-dir/restore-from-backup
进行恢复(注意:对于版本 3.10.0 或更早版本,请使用$data-dir/backup
作为恢复位置) - 还原与 DB 备份对应的 Blob 存储备份
- 重新启动 Nexus
- 验证 Nexus 仓库是否正常运行
- 从目录
$data-dir/restore-from-backup
中删除恢复用到的.bak
文件 - 验证:我们可以通过查看之前从
$data-dir/nexus3/db
中删除的数据库目录及其中的内容是否完全恢复,来验证恢复是否完成
注意:
-
当组件数据库恢复时,包含组件的相应 blob 存储也必须恢复。不这样做会导致 blob存储和数据库之间出现同步问题。
-
如果 Blob 存储和数据库备份不是在完全相同的时刻进行的,它们可能在还原后不同步。 要解决此问题,请在
Adminitration
管理界面中的System → Tasks
下安排并运行任务Repair - Reconcile component database from blob store
。