Harbor高可用私有镜像仓库搭建教程:从零开始集群部署
Harbor高可用私有镜像仓库搭建教程:从零开始集群部署
生产环境中,单机Harbor一旦宕机,整个容器镜像拉取和推送都会受影响。
本文用实战步骤教你在两台服务器上部署Harbor高可用集群,共用外部数据库和对象存储,前端通过负载均衡统一入口。
读完你就能照着操作,获得一个稳定可靠的私有镜像仓库。
硬件与软件环境准备清单
高可用需要至少两个Harbor节点、一个外部数据库、一个外部Redis和一个共享存储。
以下是推荐规格:
- Harbor节点:2台服务器(4C8G以上,CentOS 7.9或Ubuntu 20.04)
- 数据库:PostgreSQL 13+(也可用MySQL 8.0,但Harbor官方推荐PostgreSQL)
- 缓存:Redis 6+(用于会话共享和任务队列)
- 存储:NFS或S3对象存储(存放镜像数据)
- 负载均衡:Nginx或HAProxy(统一入口,约2C4G即可)
所有节点需安装Docker和Docker Compose。
命令行示例:
# 在每台Harbor节点上安装Docker
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce docker-ce-cli containerd.io
systemctl enable --now docker
# 安装Docker Compose
curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
一步步搭建Harbor高可用集群
1. 配置外部数据库与Redis
创建PostgreSQL数据库和用户:
CREATE USER harbor WITH PASSWORD 'your_strong_password';
CREATE DATABASE harbor OWNER harbor;
GRANT ALL PRIVILEGES ON DATABASE harbor TO harbor;
同样创建Redis实例(建议用独立服务器,关闭持久化或采用RDB)。
2. 下载并配置Harbor
在两台节点上下载Harbor离线安装包并解压:
wget https://github.com/goharbor/harbor/releases/download/v2.11.0/harbor-offline-installer-v2.11.0.tgz
tar zxf harbor-offline-installer-v2.11.0.tgz
cd harbor
复制harbor.yml.tmpl为harbor.yml,修改关键参数:
hostname: harbor.yourdomain.com # 负载均衡的域名或IP
database:
type: external
host: 192.168.1.100
port: 5432
username: harbor
password: your_strong_password
core_db: harbor
jobservice_db: harbor_job_service
registry_db: harbor_registry
notary_server_db: harbor_notary_server
trivy_db: harbor_trivy
redis:
type: external
host: 192.168.1.101
port: 6379
password:
storage_service:
type: filesystem
filesystem:
rootdir: /data/harbor # 需要共享存储挂载点,例如NFS
注意:两节点的hostname填同一域名,storage_service的rootdir必须指向同一个共享存储路径(如NFS挂载)。存储类型也可改用s3,配置阿里云OSS等。
3. 执行安装并启动
在每个节点上执行:
./install.sh
等待脚本完成,Harbor会以容器方式启动。
运行docker-compose ps确认所有服务状态正常。
配置负载均衡与前端统一入口
在负载均衡服务器上安装Nginx,配置如下:
upstream harbor_backend {
server 192.168.1.10:443 max_fails=3 fail_timeout=30s;
server 192.168.1.11:443 max_fails=3 fail_timeout=30s;
}
server {
listen 443 ssl;
server_name harbor.yourdomain.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass https://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;
}
}
如果使用HTTP,将443改为80并去掉ssl相关指令。
负载均衡的server_name需与Harbor节点hostname一致。
常见问题与避坑指南
- 数据库连接失败:检查PostgreSQL是否允许远程连接(
pg_hba.conf添加0.0.0.0/0并重启)。 - 存储权限不足:共享存储目录需对所有Harbor节点有读写权限,建议用
chown -R 10000:10000 /data/harbor(Harbor registry容器默认UID 10000)。 - Redis认证:若Redis设了密码,在
harbor.yml的redis.password填写,否则留空。 - 证书不一致:所有节点使用同一套SSL证书,否则负载均衡转发会报错。
- 后台任务超时:若镜像同步或垃圾清理慢,可调整
jobservice并发数。
验证集群功能是否正常
完成部署后,打开浏览器访问https://harbor.yourdomain.com,使用默认管理员admin/Harbor12345登录(建议立即修改密码)。
执行基本操作测试:
# 登录仓库
docker login harbor.yourdomain.com -u admin -p Harbor12345
# 推送一个测试镜像
docker tag nginx:latest harbor.yourdomain.com/library/nginx:test
docker push harbor.yourdomain.com/library/nginx:test
# 在另一台机器上拉取
docker pull harbor.yourdomain.com/library/nginx:test
若以上步骤全部成功,说明高可用集群搭建完毕。
此时关闭其中一台Harbor节点,镜像推送和拉取仍可通过另一节点正常完成。
如果你对Harbor的其他高级功能感兴趣,比如镜像复制、漏洞扫描或RBAC权限配置,可以继续查看本站相关教程。