Harbor高可用私有镜像仓库搭建内网加速拉取实操
Harbor高可用私有镜像仓库搭建的核心目的是解决单点故障和内网拉取镜像慢的问题。
所谓高可用,通常采用主从复制或多节点共享存储配合负载均衡,让多个节点都能提供拉取服务,内网客户端就近请求,从而显著降低镜像下载延迟。
本文面向零基础用户,从架构选型到命令落地,逐步说明如何完成搭建与验证。
内网拉取镜像慢,问题出在哪
很多团队使用Docker Hub直接拉镜像,服务器在国内时经常超时或下载速度只有几十KB/s。
即使配置了镜像加速器,当私有镜像越来越多,单台Harbor节点带宽不足、磁盘IO成为瓶颈,也会拖慢整个CI/CD流程。
内网加速拉取的本质是让镜像流量尽量留在局域网内,通过部署多个Harbor实例并做好同步,客户端总是从最近且可用的节点拉取。
适用场景很明确:公司内部有多台服务器需要频繁拉取同一批镜像,或者跨机房需要统一镜像分发。
如果你只是个人开发环境,单机版Harbor配合公网加速器已经够用,不必上高可用。
高可用方案怎么选
主从复制是目前最易落地的方案:主Harbor负责推送和镜像管理,从Harbor定期或实时拉取主节点的新镜像,只提供读取服务。
客户端通过负载均衡器(如Nginx或HAProxy)访问多个从节点,实现高可用和内网加速。
另一种方案是共享存储(如NFS、Ceph)加多节点同库,所有Harbor实例挂载同一块存储,镜像数据天然一致。
这种方式对网络和存储要求较高,适合已有专业存储环境的团队。
零基础用户建议先做主从,因为配置清晰、排错容易,也足够覆盖多数业务需求。
部署主从Harbor实例
这里以两个节点为例,假设主节点IP为192.168.1.10,从节点IP为192.168.1.11,均已安装Docker和Docker Compose。
安装Harbor时,需要准备好harbor.yml文件。
主节点配置重点,编辑harbor.yml:
hostname: 192.168.1.10
http:
port: 80
data_volume: /data/harbor
database:
password: root123
执行安装:
sudo ./install.sh
从节点配置harbor.yml时,hostname改为192.168.1.11,其他保持一致。
安装完成后,在从节点的Harbor Web界面中创建复制规则。
操作路径:登录从节点Harbor → 系统管理 → 复制管理 → 新建规则。
关键配置如下:
- 复制模式:Push-Based,即主节点主动推送。
- 源仓库:主节点的地址和项目名称,例如
192.168.1.10/library。 - 目标仓库:当前从节点的仓库地址。
- 触发模式:建议选择“事件驱动”,这样主节点每次推送新镜像,从节点能自动同步。
如果希望主节点也承担读取压力,可以再加一台Nginx做负载均衡,将客户端请求分发到两个节点。
下面是一个简单的Nginx配置片段:
upstream harbor_backend {
server 192.168.1.10:80;
server 192.168.1.11:80;
}
server {
listen 8080;
location / {
proxy_pass http://harbor_backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
配置完成后,客户端只需要将镜像仓库地址指向负载均衡器,例如192.168.1.100:8080。
验证内网加速拉取效果
先在主节点推送一个测试镜像:
docker tag nginx:1.27 192.168.1.10/library/nginx:v1
docker push 192.168.1.10/library/nginx:v1
等待几秒后,登录从节点Harbor界面,确认该镜像已经同步。
接着在一台内网客户端上配置Docker仓库地址,编辑/etc/docker/daemon.json:
{
"insecure-registries": ["192.168.1.100:8080"]
}
重启Docker后执行拉取:
docker pull 192.168.1.100:8080/library/nginx:v1
通过docker images确认镜像大小,再用time docker pull观察耗时。
与直接走公网拉取相比,内网延迟通常会降低一个数量级。
还可以用curl -I检查响应头,确认请求被负载均衡分发了。
避坑与常见疑问
主从复制最常见的问题是同步失败。
先确认两个节点之间网络互通,防火墙放行80端口和443端口。
如果同步规则显示错误,进入从节点容器查看日志:
docker logs -f harbor-registry
另一个容易踩坑的点是Harbor版本不一致。
主从节点的Harbor版本必须相同,否则复制协议可能不兼容。
建议安装前都使用最新稳定版,避免跨大版本同步。
很多人会问,能不能只有一个Harbor节点加一个磁盘阵列来实现高可用?
可以,但NFS存储容易因网络波动导致数据损坏,生产环境需要谨慎评估。
还有人在问,内网加速是不是一定要配置负载均衡?
如果只有两个节点,直接在客户端写多个--add-registry参数也能自动选择,但维护麻烦,不如统一入口。
最后提醒,Harbor本身有GC(垃圾回收)机制,高可用环境下不要在多个节点同时执行GC,否则可能误删正在同步的镜像。
建议只在主节点手动触发GC,从节点保持自动同步即可。
如果你正在处理Harbor高可用私有镜像仓库搭建内网加速拉取,建议先按本文步骤完整执行,再根据自己的网络环境调整同步策略;
遇到异常时优先查看复制日志和Docker日志,大部分问题都能从中找到线索。