当前位置: 首页 > news >正文

Harbor镜像仓库迁移与高可用集群搭建实战指南

实验环境

Ubuntu22.04操作系统

registry节点 10.0.0.91

master节点 10.0.0.92

backup节点 10.0.0.93

在企业信息化建设的不同演进阶段,私有镜像仓库的选型策略存在显著差异。近期主导完成某企业级容器镜像仓库升级项目,成功实现Docker Registry至Harbor企业级镜像仓库的平滑迁移。本次技术实践采用基于Harbor的高可用架构设计,同时构建跨数据中心的镜像同步机制,现就架构方案与实施要点进行技术复盘。本文重点剖析Harbor的集群化部署方案、多副本数据一致性保障策略,以及跨云环境镜像同步的最佳实践。

Registry与Harbor功能矩阵对比图

功能模块Docker RegistryHarbor
权限控制基础HTTP认证RBAC角色体系、项目级权限
漏洞扫描不支持集成Trivy/Clair、CVE数据库
镜像同步需第三方工具多策略跨集群复制
高可用架构依赖外部存储内置PostgreSQL集群、Redis哨兵
存储后端本地/对象存储支持S3/OSS/NFS/Ceph
操作审计完整操作日志记录与追溯
Helm Chart管理不支持独立Chart仓库服务
镜像签名需手动配置Notary服务集成
GC机制手动触发策略化自动回收+空间监控

通过Harbor的企业级镜像治理能力,企业可构建从开发环境到生产环境的可信镜像流水线,将镜像安全管控节点左移,实现漏洞早发现、风险早阻断。在大规模迁移场景中,合理运用Harbor的智能化GC与分布式复制能力,可使PB级仓库迁移效率提升300%以上,为云原生转型提供坚实基础设施保障。

一、Registry镜像仓库迁移至Harbor

1. 查看现有Registry镜像列表
通过API接口获取当前Registry仓库中的所有镜像:

curl http://10.0.0.91:5000/v2/_catalog

2. Harbor仓库复制配置
登录Harbor管理界面

  •  创建目标项目

    进入"项目" → "新建项目",输入项目名称(如library),选择公开或私有。

  •  配置复制规则

    导航至"复制管理" → "新建复制规则":

    • 名称:registry-migration
    • 复制模式:Push(从Registry推送至Harbor )
    • 源仓库:选择Registry类型,填写地址http://10.0.0.91:5000
    • 目标项目:选择刚创建的项目(如library
    • 触发模式:选择"手动触发"(首次迁移建议手动)

  •  执行镜像同步

    在复制规则列表中找到新建规则,点击"执行"按钮启动迁移。任务状态可在"任务日志"中查看。

  


二、Harbor高可用集群部署

1. 双节点Harbor部署
以10.0.0.92(主)和10.0.0.93(备)为例

 配置文件呈现

[root@elk93 ~]# vim /usr/local/harbor/harbor.yml
...
hostname: 10.0.0.93
...
## https related config                               
#https:
#  # https port for harbor, default is 443
#  port: 443
#  # The path of cert and key files for nginx
#  certificate: /your/certificate/path
#  private_key: /your/private/key/path
#  # enable strong ssl ciphers (default: false)
#  # strong_ssl_ciphers: false

...
harbor_admin_password: 1   
...
data_volume: /data/harbor       
...



本文简单修改了四处配置文件,并且将HTTPS给注释掉,因为我在测试环境还原了步骤,没有证书了。。。。
# 在两节点执行以下操作
wget https://github.com/goharbor/harbor/releases/download/v2.7.0/harbor-offline-installer-v2.7.0.tgz
tar zxf harbor-offline-installer-v2.7.0.tgz -C /usr/local/
cd /usr/local/harbor
cp harbor.yml.tmpl harbor.yml
vim harbor.yml  # 修改hostname和端口配置
./install.sh    # 启动Harbor

 Keepalived实现VIP漂移

# 两个节点安装keepalived服务

apt install -y keepalived


主备节点配置差异点:

主节点(10.0.0.92)配置

# 修改配置文件
92节点的master
[root@elk92 ~]# cat /etc/keepalived/keepalived.conf 
# /etc/keepalived/keepalived.conf(主节点:10.0.0.92)
global_defs {
   router_id 10.0.0.92  # 必须唯一,建议用本机IP
}

vrrp_script chk_nginx {
    script "killall -0 nginx"  # 检查Nginx进程是否存在
    interval 2                 # 每隔2秒检查一次
    weight -20                 # 检查失败时,优先级降低20
}

vrrp_instance VI_1 {
    state MASTER              # 主节点角色
    interface ens33           # 网卡名称(需根据实际网卡名修改)
    virtual_router_id 251     # 虚拟路由ID(主从必须一致)
    priority 100              # 初始优先级(必须高于从节点)
    advert_int 1              # 主备同步检查间隔(秒)
    mcast_src_ip 10.0.0.92    # 本机IP(必须为本机真实IP)

    # 注释或删除 nopreempt 以启用抢占模式
    # nopreempt               # 主节点恢复后会自动抢回VIP

    authentication {
        auth_type PASS        # 认证类型
        auth_pass yinzhengjie # 密码(主从必须一致)
    }

    track_script {
        chk_nginx            # 绑定健康检查脚本
    }

    virtual_ipaddress {
        10.0.0.66            # 虚拟IP(VIP)
    }
}

备节点(10.0.0.93)配置:

93节点的backup
[root@elk93 /usr/local/harbor]# cat /etc/keepalived/keepalived.conf 
# /etc/keepalived/keepalived.conf(从节点:10.0.0.93)
global_defs {
   router_id 10.0.0.93  # 必须唯一,建议用本机IP
}

vrrp_script chk_nginx {
    script "killall -0 nginx"
    interval 2
    weight -20
}

vrrp_instance VI_1 {
    state BACKUP             # 从节点角色
    interface ens33
    virtual_router_id 251    # 必须与主节点一致
    priority 90              # 初始优先级低于主节点
    advert_int 1
    mcast_src_ip 10.0.0.93   # 本机IP(必须为本机真实IP)

    authentication {
        auth_type PASS
        auth_pass yinzhengjie
    }

    track_script {
        chk_nginx
    }

    virtual_ipaddress {
        10.0.0.66
    }
}


访问测试:
http://10.0.0.66

现在的VIP就在93上面,我们实现VIP漂移
[root@elk93 ~]# systemctl stop keepalived.service 

再次刷新

现在可以看到harbor的节点变成了92节点的信息

3. Nginx反向代理配置
在独立节点(如10.0.0.91)部署:

upstream harbor_cluster {
    server 10.0.0.66:80;
}

server {
    listen 80;
    server_name harbor.yourdomain.com;
    
    location / {
        proxy_pass http://harbor_cluster;
        proxy_set_header Host $host;
    }
}

访问测试,这里只需要在Windows的hosts解析一下即可,模拟一下域名。 

4. 最终架构验证

  • 访问测试:http://harbor.yourdomain.com
  • VIP漂移测试:
再次测试keepalived
[root@elk92 ~]# systemctl stop keepalived.service 
[root@elk92 ~]# ip a s ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:ca:88:8d brd ff:ff:ff:ff:ff:ff
    altname enp2s1
    inet 10.0.0.92/24 brd 10.0.0.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:feca:888d/64 scope link 
       valid_lft forever preferred_lft forever
[root@elk92 ~]# 

这时候已经漂移到93节点
[root@elk93 ~]# ip a |grep ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    inet 10.0.0.93/24 brd 10.0.0.255 scope global ens33
    inet 10.0.0.66/32 scope global ens33
再次刷新页面
可以发现数据已经变回了93节点的


三、主从harbor镜像数量同步一致

这时候我们的高可用架构已经搭建完成了,我们只需要同步一下两个harbor的镜像仓库的镜像数量就可以了

等待一分钟,成功即可

四、生产环境注意事项

  1. 存储一致性
    建议使用共享存储(如NFS/CEPH)挂载/data目录,确保双节点数据一致。

  2. 数据库高可用
    Harbor默认使用本地PostgreSQL,生产环境建议改用外部MySQL集群。

  3. 证书配置
    为Harbor和Nginx配置HTTPS证书,提升安全性:

    # 在Harbor节点生成证书
    openssl req -x509 -newkey rsa:4096 -nodes -days 365 \
      -keyout /etc/nginx/ssl/harbor.key \
      -out /etc/nginx/ssl/harbor.crt
    
  4. 监控告警
    集成Prometheus监控关键指标:

    • 容器健康状态
    • 镜像同步延迟
    • 存储空间使用率

附录:Harbor复制触发模式详解

模式适用场景配置建议
手动触发数据初始化、临时同步结合脚本批量操作
定时触发跨地域定期备份Cron表达式设置非峰值时段
事件触发生产环境实时同步限制并发防止任务堆积
失败重试网络抖动后的数据修复设置最大重试次数(建议3-5次)

通过本文方案,可实现企业级镜像仓库的无缝迁移与高可用保障,支撑容器化业务的稳定运行。

相关文章:

  • 在Centos 7环境下安装MySQL
  • C++11 auto decltype
  • 未来工程项目管理新走向:云原生软件赋能绿色可持续建设
  • 【申论】二十大报告中的申论金词金句
  • 【AI News | 20250324】每日AI进展
  • 大数据学习(82)-数仓详解
  • 【Ratis】SlideWindow滑动窗口机制
  • unity动效扫光教程
  • Linux应用:异步IO、存储映射IO、显存的内存映射
  • 常见框架漏洞攻略-Shiro篇
  • Elasticsearch:构建 AI 驱动的搜索体验
  • 嵌入式八股RTOS与Linux---进程间的通信与同步篇
  • SQL 集合运算
  • 蓝桥与力扣刷题(蓝桥 回文判定)
  • AI 浪潮下的 IT 行业变革:机遇与挑战并存
  • 08.面向对象的特性
  • 【力扣刷题实战】搜索插入位置
  • 用API解锁大模型超能力——从零构建智能体到本地知识库全链路解析
  • FFmpeg6.1.1 MSYS2+GCC 源码编译
  • 在C++ Qt中集成Halcon窗口并实现跨平台兼容和大图加载
  • 习近平同欧洲理事会主席科斯塔、欧盟委员会主席冯德莱恩就中欧建交50周年互致贺电
  • 新闻1+1丨多地政府食堂开放“舌尖上的服务”,反映出怎样的理念转变?
  • 泰国培训十万网络安全人员加强网络防御打击电诈
  • 北美票房|“雷霆”开画票房比“美队4”低,但各方都能接受
  • 当一群杜克土木工程毕业生在三四十年后怀念大学的历史课……
  • 解放日报头版:上海张江模力社区托举“年轻的事业”