Docker部署Harbor高可用集群,零基础实操全流程

为什么需要Harbor高可用

生产环境中,单个Harbor实例一旦宕机,镜像仓库就无法使用,直接影响CI/CD和容器部署。
Docker部署Harbor高可用能保证一个节点故障时,另一个节点无缝接管,用户无感知。
本文针对零基础用户,把每一步拆开讲,确保看完就能动手操作。

准备工作:软硬件要求

部署Docker部署Harbor高可用至少需要两台Linux服务器(建议4核8GB以上)和一台共享存储设备。
核心组件包括:

  • Docker(20.10+)和Docker Compose(v2+)
  • 共享文件系统:NFS、Ceph或云厂商的NAS(用于存放镜像数据)
  • 外部数据库:推荐PostgreSQL(Harbor从2.0开始默认支持)或MySQL 8.0,需要额外部署一台数据库服务
  • 负载均衡器:Nginx、HAProxy或云负载均衡(将流量分发到两个Harbor节点)

注意:所有服务器之间时间必须同步,建议安装ntp或chrony。

核心操作:搭建Harbor高可用集群

第一步:配置共享存储

以NFS为例,在存储服务器上创建目录并导出(假设IP为192.168.1.100):

# 存储服务器执行
mkdir -p /data/harbor
cat >> /etc/exports <

在两台Harbor服务器上分别挂载:

mount -t nfs 192.168.1.100:/data/harbor /data/harbor

第二步:准备外部数据库

创建Harbor专属数据库和用户:

CREATE DATABASE harbor;
CREATE USER harbor WITH PASSWORD 'YourPassword';
GRANT ALL PRIVILEGES ON DATABASE harbor TO harbor;

第三步:编写Harbor配置文件

下载Harbor离线安装包(以v2.10为例),解压后进入目录。
编辑 harbor.yml.tmpl(复制为 harbor.yml),关键修改项:

hostname: loadbalancer.example.com  # 使用负载均衡的域名或IP

# 对外HTTPS证书配置(生产必配)
https:
  port: 443
  certificate: /your/cert.pem
  private_key: /your/key.pem

database:
  type: postgresql
  host: your-db-ip
  port: 5432
  username: harbor
  password: YourPassword
  database: harbor
  ssl_mode: disable

data_volume: /data/harbor

# 使用外部Redis(可选但推荐)
redis:
  type: external
  host: your-redis-ip
  port: 6379
  password: ""

# 高可用模式下必须开启
password_secret: a-random-strong-string
harbor_admin_password: admin-password-change

注意:两台节点的 harbor.ymlhostname 之外必须完全相同(hostname 必须写负载均衡地址,而不是节点本机IP)。

第四步:在两台节点分别启动Harbor

在两台服务器上依次执行:

./prepare
./install.sh --with-trivy  # 开启漏洞扫描,按需添加

启动后分别访问 http://node1:8080http://node2:8080 验证是否正常。

第五步:配置负载均衡

以Nginx为例,将请求代理到两台Harbor节点:

upstream harbor_backend {
    server node1_ip:8080 max_fails=3 fail_timeout=30s;
    server node2_ip:8080 max_fails=3 fail_timeout=30s;
}
server {
    listen 443 ssl;
    server_name loadbalancer.example.com;
    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;
    location / {
        proxy_pass http://harbor_backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

重启Nginx后,通过负载均衡地址访问Harbor。

避坑指南:常见问题与解决

  1. 存储权限错误:Harbor容器内用户UID为10000,共享存储目录需要开放权限:chown -R 10000:10000 /data/harbor
  2. 证书不一致:所有节点和负载均衡使用的证书必须一致,否则docker login会报“x509: certificate signed by unknown authority”
  3. 数据库连接超时:检查防火墙是否开放5432端口,数据库配置文件 pg_hba.conf 是否允许远程连接
  4. Harbor服务启动失败:先查看 docker-compose logs,多数问题出在数据库连接或存储挂载
  5. 时间不同步:集群节点时间偏差超过60秒会导致认证失败,用 chronyc sources -v 确认同步状态

效果验证:确保高可用生效

  1. 通过负载均衡域名登录Harbor Web界面,创建一个名为 test 的项目
  2. 在任意一台机器上 docker login loadbalancer.example.com 并推送一个镜像:
   docker pull nginx:latest
   docker tag nginx:latest loadbalancer.example.com/test/nginx:latest
   docker push loadbalancer.example.com/test/nginx:latest
  1. 手动停止Node1上的Harbor容器(docker-compose down),再次重复推送和拉取操作
  2. 观察是否还能正常读写,若无缝切换则高可用搭建成功

提示:生产环境建议添加监控告警(如Prometheus + Alertmanager)自动通知节点故障。

写在最后

本文完整演示了从环境准备到验证的Docker部署Harbor高可用全流程。
零基础用户只要按步骤操作,遇到特定错误先回查“避坑指南”,多数问题都能自行解决。
建议先在测试环境练习一遍,再应用到生产。
如果你在部署中遇到其他奇怪的问题,欢迎在评论区留言交流。

分享到:
上一篇
Linux服务器内核模块管理从入门到排错
下一篇
年服务器国内云服务器排行怎么选?从配置到价格一步步教你对比
1
系统公告

泽御云五一特惠活动🔥

泽御云持证合规运营,资质齐全可查,长久稳定! 五一限时多重福利同步开启: ✅ 香港 2 核 2G 云服务器超值拼团,低价入手团长免费 ✅ 4 核 4G 多机房年付拼团,性价比拉满 ✅ 内蒙古新区限时 7 折(zeyuyunnmg)特惠,专属优惠码锁价续费 ✅ 全站通用 75 折优惠,老用户充值享专属赠金 官方站点:zeyuyun.com 合规资质齐全|售后有保障|活动限时错过不再有
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意