Nexus仓库迁移

Nexus仓库迁移

下文主要介绍Nexus仓库迁移过程中遇到的一些问题和总结

需求描述: 需要将源主机的Nexus服务以及相关数据信息,迁移至目标主机,数据迁移完成测试验证后,切换域名,完成迁移.

环境介绍

源主机 目标主机 域名 Nexus版本
10.80.42.138 10.14.46.12 repo.wecash.asia 3.8.0

迁移步骤

  1. 在主机B生成一对私钥,同时将公钥添加到主机A上,配置免密登录;
  2. 在主机B安装Maven环境;
  3. Rsync增量方式同步数据
  4. 数据同步完成后,启动Nexus服务,本地写host绑定域名方式,进行验证;
  5. 验证通过后,切换域名,完全迁移;
    ⚠️: 强烈建议迁移时候,两台主机的Nexus数据及服务目录保持完全一致,仓库版本保持一致;

环境准备

  1. 安装JDK(略)
  2. 安装Maven
    Maven – Welcome to Apache Maven
    1
    2
    3
    4
    # cd /usr/local/src
    # wget https://www-us.apache.org/dist/maven/maven-3/3.6.0/binaries/apache-maven-3.6.0-bin.tar.gz
    # tar -zxvf apache-maven-3.6.0-bin.tar.gz -C /data/services/
    # cd /data/services/ && mv apache-maven-3.6.0 maven-3.6
    安装配置参考: Maven – Users Centre
    配置环境变量:
    1
    2
    3
    export MAVEN_OPTS="-Xms1g -Xmx1g"
    export MAVEN_HOME="/data/services/maven-3.6"
    export PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH
  3. Nexus安装
  • 下载
    Download Repository OSS
  • Nexus启动脚本
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    # cat /etc/systemd/system/nexus.service
    [Unit]
    Description=nexus service
    After=network.target

    [Service]
    Type=forking
    LimitNOFILE=65536
    ExecStart=/data/services/nexus-8081/bin/nexus start
    ExecStop=/data/services/nexus-8081/bin/nexus stop
    User=nexus
    Restart=on-abort

    [Install]
    WantedBy=multi-user.target
  • Nginx代理Nexus仓库
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    # cat /etc/nginx/conf.d/repo.wecash.asia-80.conf
    server {
    listen 80;
    server_name repo.wecash.asia;
    charset utf-8;

    access_log /data/logs/nginx/repo.wecash.asia.access.log main;
    error_log /data/logs/nginx/repo.wecash.asia.error.log warn;

    # allow large uploads of files
    client_max_body_size 1G;

    # optimize downloading files larger than 1G
    #proxy_max_temp_file_size 2G;

    location / {
    proxy_pass http://127.0.0.1:8081;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    }

    迁移数据

    1
    # nohup rsync -vuazrtpP --progress --delete --exclude="blobs/docker-registry-sea"  -e 'ssh' root@10.80.42.138:/data/nexus3data/nexus3/ /data/nexus3data/nexus3/ > /tmp/rsync.log 2>&1 &

    Q&A

    在同步完成Blob数据后,启动Nexus服务,在使用仓库构建包的时候存在包的Meta-data信息更新或获取失败问题,导致return的code为500问题,client返回的错误信息如下所示:
    1
    Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.8.2:deploy (default-deploy) on project indonesia-customer-center-biz-api: Failed to retrieve remote metadata net.wecash:indonesia-customer-center-biz-api:1.0-SNAPSHOT/maven-metadata.xml: Could not transfer metadata net.wecash:indonesia-customer-center-biz-api:1.0-SNAPSHOT/maven-metadata.xml from/to nexus-snapshots (http://repo.wecash.asia/repository/maven-snapshots/): Failed to transfer file: http://repo.wecash.asia/repository/maven-snapshots/net/wecash/indonesia-customer-center-biz-api/1.0-SNAPSHOT/maven-metadata.xml. Return code is: 500 , ReasonPhrase:javax.servlet.ServletException: org.sonatype.nexus.repository.storage.RetryDeniedException: Reached max retries: 8/8. -> [Help 1]
  1. 迁移后源主机与目标主机路径不一致
    同步Blob数据至迁移后的主机B,通过修改Nexus配置文件中的karaf.data参数指定数据目录
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    # cd /data/services/nexus-3.8/bin
    # cat nexus.vmoptions
    -Xms2G
    -Xmx2G
    -XX:MaxDirectMemorySize=2G
    -XX:+UnlockDiagnosticVMOptions
    -XX:+UnsyncloadClass
    -XX:+LogVMOutput
    -XX:LogFile=/data/nexus/logs/nexus.log
    -XX:-OmitStackTraceInFastThrow
    -Djava.net.preferIPv4Stack=true
    -Dkaraf.home=.
    -Dkaraf.base=.
    -Dkaraf.etc=etc/karaf
    -Djava.util.logging.config.file=etc/karaf/java.util.logging.properties
    -Dkaraf.data=/data/nexus/nexus-data
    -Djava.io.tmpdir=/data/nexus/tmp
    -Dkaraf.startLocalConsole=false
  2. 尝试解决方法一
    此时,server段会存在一些异常log,如果log中出现soft-deleted关键字,需要将对应Blob下vol下的*.properties文件中的delete=true标示删除,如果需要Deploy的包比较多,此时,手动操作就会比较繁琐且容易出错,思考,尝试从全局来修复该问题,初步使用Compact的Task来进行修复Repository Management,并没有什么意义,问题依然存在…
  3. 尝试解决方法二
    通过OrientDB Console尝试修改repository_blobstore表中对应的Blob的path信息,修改为绝对路径,默认表中存储的信息为karaf.data路径的相对路径,此方法依然无效…
    Relocating Blob Stores – Sonatype Support
  4. 终极解决方法

    全量同步$data-dir or ${karaf.data}下的所有文件至新机器以及nexus源码安装文件至新机器,强烈建议文件存放的目录结构保持一致,增量完全同步完成之后,修改环境变量和权限,启动服务,进行验证;

  5. 官方迁移指导
    Moving a Nexus Repo 3 Installation to a New Location – Sonatype Support

扩展

  1. 一般在迁移完成后需要创建Task任务,重建repo的Index和MetaData信息
  2. Nexus仓库的元数据和配置信息存储在OrientDB(文件类型数据库)中
  3. Nexus仓库的索引信息存储在内置的elasticsearch中
  4. 如果在Nexus日志中查看到有关elasticsearch的Index错误信息,删除${karaf.data}参数对应目录下的elasticsearch目录,重新同步数据即可

Maven配置文件

Nexus仓库Maven配置文件settings.xml参数介绍

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
cat settings.xml
<?xml version="1.0" encoding="utf-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<pluginGroups/>
<proxies/>
<servers>
<server>
<id>wecash-nexus</id>
<username>wecash-asia</username>
<password>Be2MFTpf6TPmcXw7BpEarGZt</password>
</server>
<server>
<id>nexus-releases</id>
<username>wecash-asia</username>
<password>Be2MFTpf6TPmcXw7BpEarGZt</password>
</server>
<server>
<id>nexus-snapshots</id>
<username>wecash-asia</username>
<password>Be2MFTpf6TPmcXw7BpEarGZt</password>
</server>
</servers>
<mirrors>
<mirror>
<id>wecash-nexus</id>
<name>nexus repository</name>
<mirrorOf>*</mirrorOf>
<url>http://repo.wecash.asia/repository/maven-public/</url>
</mirror>
</mirrors>
<profiles>
<profile>
<id>nexus</id>
<repositories>
<repository>
<id>wecash-nexus</id>
<url>http://repo.wecash.asia/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>wecash-nexus</id>
<url>http://repo.wecash.asia/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>
</settings>

Maven基本命令

1
2
3
4
# 构建
mvn clean package -Denv=test-jkt -U -DskipTests=True
# 推送包
mvn deploy -Denv=test-jkt -U -DskipTests=True

本文标题:Nexus仓库迁移

文章作者:shuke

发布时间:2020年04月23日 - 16:04

最后更新:2020年04月23日 - 16:04

原始链接:https://shuke163.github.io/2020/04/23/Nexus%E4%BB%93%E5%BA%93%E8%BF%81%E7%A7%BB/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

-------------本文结束感谢您的阅读-------------

本文标题:Nexus仓库迁移

文章作者:shuke

发布时间:2020年04月23日 - 16:04

最后更新:2020年04月23日 - 16:04

原始链接:https://shuke163.github.io/2020/04/23/Nexus%E4%BB%93%E5%BA%93%E8%BF%81%E7%A7%BB/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

0%