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.yml 除 hostname 之外必须完全相同(hostname 必须写负载均衡地址,而不是节点本机IP)。
第四步:在两台节点分别启动Harbor
在两台服务器上依次执行:
./prepare
./install.sh --with-trivy # 开启漏洞扫描,按需添加
启动后分别访问 http://node1:8080 和 http://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。
避坑指南:常见问题与解决
- 存储权限错误:Harbor容器内用户UID为10000,共享存储目录需要开放权限:
chown -R 10000:10000 /data/harbor - 证书不一致:所有节点和负载均衡使用的证书必须一致,否则docker login会报“x509: certificate signed by unknown authority”
- 数据库连接超时:检查防火墙是否开放5432端口,数据库配置文件
pg_hba.conf是否允许远程连接 - Harbor服务启动失败:先查看
docker-compose logs,多数问题出在数据库连接或存储挂载 - 时间不同步:集群节点时间偏差超过60秒会导致认证失败,用
chronyc sources -v确认同步状态
效果验证:确保高可用生效
- 通过负载均衡域名登录Harbor Web界面,创建一个名为
test的项目 - 在任意一台机器上
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
- 手动停止Node1上的Harbor容器(
docker-compose down),再次重复推送和拉取操作 - 观察是否还能正常读写,若无缝切换则高可用搭建成功
提示:生产环境建议添加监控告警(如Prometheus + Alertmanager)自动通知节点故障。
写在最后
本文完整演示了从环境准备到验证的Docker部署Harbor高可用全流程。
零基础用户只要按步骤操作,遇到特定错误先回查“避坑指南”,多数问题都能自行解决。
建议先在测试环境练习一遍,再应用到生产。
如果你在部署中遇到其他奇怪的问题,欢迎在评论区留言交流。