IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Nexus3 容器部署3.70.x升级实践-非成功案例

    ysicing (i@ysicing.me)发表于 2025-05-16 21:09:42
    love 0

    docker 从 3.70.x 及以下版本升级 3.71.x 及以上版本出现旧数据库不支持错误

    官方也很细心给了一份升级文档 upgrading-to-nexus-repository-3-71-0-and-beyond

    由于我使用的也是官方镜像,社区也有人给出了解决方案 sonatype/nexus-public#51

    友情提示,操作前需要备份持久化数据,避免升级失败,建议先阅读文尾后再参考我的升级

    创建 nexus 备份文件

    • 设置-系统-任务-创建任务

    • 搜索 Backup,选择它

    • 创建一下手动触发的任务,备份路径 /nexus-data/backup 就行

    • 创建完任务后,点击 backup 任务运行

    • 触发备份

    • 等待备份完成

    不放心,也可以进容器内,看一下:

    19:56 ➜  ~ kubectl exec -it pods/nexus3-859bb76886-mc29s -n nat -- bash
    bash-4.4$ ls
    nexus  sonatype-work  start-nexus-repository-manager.sh
    bash-4.4$ cd /nexus-data/
    bash-4.4$ ls
    backup	blobs  cache  db  elasticsearch  etc  generated-bundles  instances  javaprefs  kar  karaf.pid  keystores  lock	log  orient  port  restore-from-backup	tmp
    bash-4.4$ cd backup/
    bash-4.4$ ls
    analytics-2025-05-16-11-56-22-3.70.1-02.bak  component-2025-05-16-11-56-22-3.70.1-02.bak  config-2025-05-16-11-56-22-3.70.1-02.bak  security-2025-05-16-11-56-22-3.70.1-02.bak
    bash-4.4$ exit
    

    示例是 k8s 方式,docker 部署也是类似。

    数据迁移

    查询对应 nexus-db-migrator 迁移工具

    需要下载和你 Nexus 版本匹配的 nexus-db-migrator 工具, 最新版本下载 nexus-db-migrator, 目前最新版本是 3.70.4-02

    大概格式如下:

    https://download.sonatype.com/nexus/nxrm3-migrator/nexus-db-migrator-<version版本号>.jar
    

    由于我的版本是 3.70.1-02, 选择下载

    https://sonatype-download.global.ssl.fastly.net/repository/downloads-prod-group/nxrm3-migrator/nexus-db-migrator-3.70.1-03.jar
    

    可能你对应的版本不存在,可以尝试改 patch 版本,实在不行你就先升级到 3.70.4 最新版本

    再次提醒版本一定要匹配上

    操作

    进入容器内部操作,方便起见, 确保在 /nexus-data/backup 目录下

    bash-4.4$ pwd
    /nexus-data/backup
    

    下载迁移工具,或者同步到容器内也行(网络不好的情况下)

    curl -s -L -O https://sonatype-download.global.ssl.fastly.net/repository/downloads-prod-group/nxrm3-migrator/nexus-db-migrator-3.70.1-03.jar
    

    停 nexus 服务

    /opt/sonatype/nexus/bin/nexus stop
    

    执行迁移操作,将数据迁移到 H2 数据库,根据数据量和配置灵活调整 -Xmx4G -Xms4G 值,这里条件有限默认 4G, 执行完成如下图

    java -Xmx4G -Xms4G -XX:+UseG1GC -XX:MaxDirectMemorySize=28672M -jar nexus-db-migrator-3.70.1-03.jar --migration_type=h2
    

    再次停 nexus 服务

    bash-4.4$ /opt/sonatype/nexus/bin/nexus stop
    Shutting down nexus
    nexus is not running.
    

    查看迁移的数据

    bash-4.4$ ls -ahl nexus.mv.db
    -rw-r--r-- 1 nexus nexus 320K May 16 12:19 nexus.mv.db
    

    将迁移的数据文件复制到 db 文件夹中

    cp nexus.mv.db /nexus-data/db
    

    然后退出容器

    销毁容器

    • compose 部署
    docker compose down nexus3
    
    • k8s 部署副本改成 0
    kubectl scale --replicas 0 deploy/nexus3 -n nat
    

    编辑配置文件

    为啥不在容器里编辑,啥工具都没有不方便,而且这个配置持久化了

    • 默认配置如下 old
    root@nat3:/data/k8s/local/nexus3/etc# cat nexus.properties
    # Jetty section
    # application-port=8081
    # application-host=0.0.0.0
    # nexus-args=${jetty.etc}/jetty.xml,${jetty.etc}/jetty-http.xml,${jetty.etc}/jetty-requestlog.xml
    # nexus-context-path=/${NEXUS_CONTEXT}
    
    # Nexus section
    # nexus-edition=nexus-pro-edition
    # nexus-features=\
    #  nexus-pro-feature
    
    # nexus.hazelcast.discovery.isEnabled=true
    
    • 新增 nexus.datastore.enabled=true, 新配置如下
    root@nat3:/data/k8s/local/nexus3/etc# cat nexus.properties
    # Jetty section
    # application-port=8081
    # application-host=0.0.0.0
    # nexus-args=${jetty.etc}/jetty.xml,${jetty.etc}/jetty-http.xml,${jetty.etc}/jetty-requestlog.xml
    # nexus-context-path=/${NEXUS_CONTEXT}
    
    # Nexus section
    # nexus-edition=nexus-pro-edition
    # nexus-features=\
    #  nexus-pro-feature
    
    # nexus.hazelcast.discovery.isEnabled=true
    nexus.datastore.enabled=true
    

    启动老服务,验证数据库切换成功

    • compose 部署
    docker compose up -d
    
    • k8s 部署副本改成 0
    kubectl scale --replicas 1 deploy/nexus3 -n nat
    

    观察日志,搜索 H2

    2025-05-16 12:33:15,378+0000 INFO  [FelixStartLevel] *SYSTEM org.sonatype.nexus.datastore.DataStoreConfigurationDefaultSource - Loaded 'nexus' data store configuration defaults (Embedded H2)
    2025-05-16 12:33:15,710+0000 INFO  [FelixStartLevel] *SYSTEM com.zaxxer.hikari.HikariDataSource - nexus - Starting...
    2025-05-16 12:33:16,018+0000 INFO  [FelixStartLevel] *SYSTEM com.zaxxer.hikari.HikariDataSource - nexus - Start completed.
    2025-05-16 12:33:16,020+0000 INFO  [FelixStartLevel] *SYSTEM org.sonatype.nexus.datastore.mybatis.MyBatisDataStore - nexus - Loading MyBatis configuration from /opt/sonatype/nexus/etc/fabric/mybatis.xml
    2025-05-16 12:33:16,147+0000 INFO  [FelixStartLevel] *SYSTEM org.sonatype.nexus.datastore.mybatis.MyBatisDataStore - nexus - MyBatis databaseId: H2
    2025-05-16 12:33:16,346+0000 INFO  [FelixStartLevel] *SYSTEM org.sonatype.nexus.datastore.mybatis.MyBatisDataStore - nexus - Creating schema for UpgradeTaskDAO
    

    升级版本失败

    直接替换镜像升级就完成了,然后我的数据就没了 😂, 严格按照官方文档来的哇 😂

    后续

    • 云缘生镜像站暂停营业几天
    • 虽然有备份数据,但是不想回滚了,重新部署,数据存储使用 PG 吧



沪ICP备19023445号-2号
友情链接