nexus使用Ceph作为Blobstore

前言

虽然nexus支持使用ceph作为Blobstore,但实际配置过程中还是会有不少的坑。主要是大多数文档以S3作为例子,而忽略了对接ceph时会存在一些特殊的情况。

版本

Nexus OSS 3.16.2-01
Ceph Luminous 12.2.12

配置

具体配置情况如下,请注意红色框框部分:


配置1
配置2

上面的配置有两点需要注意:

  1. endpoint需要添加ip访问方式,不然默认的情况下,会使用子域名。当然如果你配置了子域名的情况,忽略这里的提醒。
  2. Ceph Luminous版本目前是不支持S3的Lifecycle模式的,因此这里需要设置为-1。否则会导致s3 plugin在同步 lifecycle 配置的时候失败,nexus启动不起来。报错可能如:


    Lifecycle同步失败报错

不小心配置错了

加入你不小心配置错了(例如Ceph不支持子域名,endpoint却填了域名形式的endpoint),并保存了。在没有重启前,一切正常,只是配置了的Blobstore不能用。但是一旦Nexus停掉,就再也起不来了。因为Nexus在初始化错误的Blobstore时,总是报错,初始化失败,从而导致启动失败。

这时候就需要手动干预,从数据库层面删掉错误的配置。Nexus底层用的时Orientdb,具体操作如下:

操作

  1. 报错日志如下:


    错误日志
  2. 启动 orientdb console
# 先进入安装目录
java -jar ./lib/support/nexus-orient-console.jar
  1. 连接相关的 database
# 后面是默认的账号密码
connect plocal:/数据目录/nexus/sonatype-work-latest/nexus3/db/config admin admin
  1. 强制删除 s3 blobstore 相关的记录
delete from repository_blobstore where type = 'S3'

Lifecycle配置错误怎么办

跟上面的类似,也是直接修改Orientdb

  1. 先禁掉 s3 blob 中的过期配置:
update repository_blobstore set attributes.s3.expiration = -1  where name = 'ceph-blob'
  1. 然后再去掉 ceph 中的 lifecycle 配置
s3cmd dellifecycle s3://nexus-blob
  1. 启动 nexus 即可。

你可能感兴趣的:(nexus使用Ceph作为Blobstore)