Docker + Harbor + Keepalived 高可用+harbor自身的镜像双向复制
一、整体架构
- 主节点:10.0.0.91
- 备节点:10.0.0.92
- VIP:10.0.0.99(用户唯一访问入口)
- 数据:Harbor 双向镜像复制
- 高可用:Keepalived + 服务健康检查
二、Harbor 配置要点
两台节点的 harbor.ymlhostname 统一配置为 VIP 10.0.0.99,保证切换后访问地址、回调地址一致。
yaml
hostname: 10.0.0.99
http:
port: 80
https:
port: 443
certificate: xxx
private_key: xxx
配置后执行:
./prepare
docker-compose down
docker-compose up -d
三、Keepalived + 健康检查(服务级 HA)
1. 检查脚本 /etc/keepalived/check_harbor.sh
#!/bin/bash
curl -s -o /dev/null http://127.0.0.1:80
if [ $? -ne 0 ];then
exit 1
fi
docker ps | grep harbor-core > /dev/null
if [ $? -ne 0 ];then
exit 1
fi
exit 0
chmod +x /etc/keepalived/check_harbor.sh
2. 主节点 keepalived.conf
global_defs {
router_id HARBOR_HA
}
vrrp_script check_harbor {
script "/etc/keepalived/check_harbor.sh"
interval 2
weight -20
fall 2
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
check_harbor
}
virtual_ipaddress {
10.0.0.99/24
}
}
3. 备节点
仅修改:
state BACKUP
priority 100
其余完全一致。
四、为什么用户一开始就访问 10.0.0.99?
- Keepalived 启动后,VIP 自动绑定在主节点
- Harbor 对外地址就是 VIP
- 用户
docker login 10.0.0.99直接访问 VIP - 无需关心后端真实节点
五、Harbor 数据一致性(高可用关键)
两台 Harbor 配置双向复制:
- 91 复制到 92
- 92 复制到 91模式:基于事件驱动 + 定时同步确保主备镜像、用户、权限一致。
六、典型故障与切换
- 主节点机器宕机 → VIP 漂移至备机
- Harbor 核心容器挂了 → 脚本检测失败 → 权重降低 → VIP 漂移
- 网络异常 → 自动切换整个过程用户无感知。
七、总结
两台 Harbor 统一使用 VIP 作为 hostname,通过双向复制保证数据一致;使用 Keepalived 实现 VIP 高可用,并搭配服务健康检查脚本,实现机器宕机或 Harbor 服务异常时自动漂移 VIP,用户全程只访问 VIP,实现无感知高可用。
正文完