Rocky Linux上Harbor高可用集群部署指南
1. 项目概述
在现代化IT基础设施中,容器镜像仓库的高可用部署已成为企业级DevOps实践的标配。Rocky Linux作为RHEL的完美替代品,结合Harbor的企业级镜像管理能力,能够构建出稳定可靠的容器化基础设施。本文将详细记录一个生产级Harbor高可用集群在Rocky Linux上的完整部署过程。
2. 环境规划与准备
2.1 硬件资源配置建议
对于生产环境,建议采用以下配置:
- 控制节点:3台,每台8核CPU/16GB内存/100GB存储
- 工作节点:2台,每台16核CPU/32GB内存/200GB存储
- 负载均衡器:2台,每台4核CPU/8GB内存/50GB存储
注意:实际配置应根据预期负载调整,镜像存储量大的场景需要额外规划存储节点
2.2 软件版本选型
经过实际测试验证的稳定版本组合:
- 操作系统:Rocky Linux 8.6
- Harbor:v2.6.2
- Docker:20.10.17
- Docker Compose:v2.6.0
- PostgreSQL:13.5
- Redis:6.2.6
3. 基础环境部署
3.1 Rocky Linux系统初始化
在所有节点执行以下初始化操作:
# 设置主机名 hostnamectl set-hostname node1 # 关闭SELinux sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config setenforce 0 # 配置防火墙 firewall-cmd --permanent --add-port=80/tcp firewall-cmd --permanent --add-port=443/tcp firewall-cmd --permanent --add-port=4443/tcp firewall-cmd --reload # 安装基础工具 dnf install -y vim wget curl net-tools lsof3.2 Docker环境部署
# 安装依赖 dnf install -y yum-utils device-mapper-persistent-data lvm2 # 添加Docker仓库 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 安装Docker dnf install -y docker-ce docker-ce-cli containerd.io # 配置Docker mkdir -p /etc/docker cat > /etc/docker/daemon.json <<EOF { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2", "registry-mirrors": ["https://registry.docker-cn.com"] } EOF # 启动服务 systemctl enable docker systemctl start docker4. Harbor高可用集群部署
4.1 负载均衡配置
使用Nginx作为Harbor前端负载均衡器:
upstream harbor { server 192.168.1.101:80; server 192.168.1.102:80; server 192.168.1.103:80; } server { listen 80; server_name harbor.example.com; location / { proxy_pass http://harbor; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }4.2 数据库集群部署
PostgreSQL主从配置:
# 主节点配置 vim /var/lib/pgsql/13/data/postgresql.conf # 修改以下参数 wal_level = replica max_wal_senders = 3 wal_keep_size = 1GB # 从节点配置 pg_basebackup -h 192.168.1.101 -U replicator -D /var/lib/pgsql/13/data -P echo "standby_mode = 'on'" >> /var/lib/pgsql/13/data/recovery.conf echo "primary_conninfo = 'host=192.168.1.101 port=5432 user=replicator password=yourpassword'" >> /var/lib/pgsql/13/data/recovery.conf4.3 Redis哨兵模式配置
三节点Redis哨兵配置示例:
# redis.conf bind 0.0.0.0 protected-mode no port 6379 daemonize yes requirepass yourpassword # sentinel.conf sentinel monitor mymaster 192.168.1.101 6379 2 sentinel down-after-milliseconds mymaster 5000 sentinel failover-timeout mymaster 10000 sentinel auth-pass mymaster yourpassword4.4 Harbor安装与配置
下载并解压Harbor安装包:
wget https://github.com/goharbor/harbor/releases/download/v2.6.2/harbor-offline-installer-v2.6.2.tgz tar xvf harbor-offline-installer-v2.6.2.tgz cd harbor修改harbor.yml配置文件:
hostname: harbor.example.com http: port: 80 https: port: 443 certificate: /data/cert/server.crt private_key: /data/cert/server.key harbor_admin_password: Harbor12345 database: password: root123 max_idle_conns: 100 max_open_conns: 900 data_volume: /data clair: updaters_interval: 12 jobservice: max_job_workers: 10 notification: webhook_job_max_retry: 3 chart: absolute_url: disabled log: level: info local: rotate_count: 50 rotate_size: 200M location: /var/log/harbor执行安装脚本:
./install.sh --with-clair --with-chartmuseum5. 存储方案集成
5.1 MinIO集群部署
作为Harbor的存储后端,MinIO提供高可用对象存储:
# 下载MinIO wget https://dl.min.io/server/minio/release/linux-amd64/minio chmod +x minio mv minio /usr/local/bin/ # 创建启动脚本 cat > /etc/systemd/system/minio.service <<EOF [Unit] Description=MinIO After=network.target [Service] Type=simple User=minio Group=minio ExecStart=/usr/local/bin/minio server http://node{1...4}/data{1...4} \ --console-address ":9001" Restart=always [Install] WantedBy=multi-user.target EOF # 启动服务 systemctl daemon-reload systemctl enable minio systemctl start minio5.2 Harbor配置MinIO存储
修改harbor.yml:
storage_service: s3: accesskey: yourminioaccesskey secretkey: yourminiosecretkey region: us-east-1 bucket: harbor endpoint: https://minio.example.com secure: true chunksize: 5242880 rootdirectory: /harbor6. 运维与监控
6.1 日常维护命令
# 查看服务状态 docker-compose ps # 停止Harbor docker-compose down -v # 启动Harbor docker-compose up -d # 备份数据 tar czvf harbor-data-$(date +"%Y%m%d").tar.gz /data/database /data/registry6.2 Prometheus监控配置
Harbor监控指标采集配置示例:
scrape_configs: - job_name: 'harbor' static_configs: - targets: ['harbor.example.com'] metrics_path: '/metrics' scheme: 'https' tls_config: insecure_skip_verify: true7. 常见问题排查
7.1 镜像推送失败
可能原因及解决方案:
- 证书问题:确保客户端配置了正确的CA证书
- 存储空间不足:检查MinIO存储配额
- 网络问题:验证节点间网络连通性
7.2 登录认证失败
检查步骤:
- 确认PostgreSQL服务正常运行
- 验证Redis缓存服务状态
- 检查Harbor核心服务日志
docker logs harbor-core7.3 高可用切换异常
故障转移测试方法:
- 手动停止主节点Harbor服务
- 观察负载均衡器自动切换
- 验证从节点服务接管情况
8. 性能优化建议
数据库优化:
- 增加PostgreSQL连接池大小
- 配置合适的WAL日志保留策略
存储优化:
- 使用SSD存储后端
- 启用MinIO纠删码功能
网络优化:
- 配置节点间万兆网络
- 启用TCP BBR拥塞控制算法
# 启用BBR echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf sysctl -p9. 安全加固措施
证书管理:
- 使用Let's Encrypt自动续期证书
- 配置证书轮换策略
访问控制:
- 启用Harbor项目配额
- 配置细粒度权限策略
审计日志:
- 集中收集Harbor操作日志
- 配置日志告警规则
# 日志审计配置示例 cat > /etc/rsyslog.d/harbor.conf <<EOF module(load="imfile" PollingInterval="10") input(type="imfile" File="/var/log/harbor/*.log" Tag="harbor" Severity="info" Facility="local7") EOF10. 扩展功能集成
10.1 与CI/CD系统对接
Jenkins集成示例:
pipeline { agent any environment { HARBOR_CREDS = credentials('harbor-credential') } stages { stage('Build') { steps { sh 'docker build -t harbor.example.com/myproject/app:${BUILD_NUMBER} .' } } stage('Push') { steps { sh ''' docker login -u ${HARBOR_CREDS_USR} -p ${HARBOR_CREDS_PSW} harbor.example.com docker push harbor.example.com/myproject/app:${BUILD_NUMBER} ''' } } } }10.2 镜像扫描策略配置
启用Clair漏洞扫描:
clair: updaters_interval: 12 http_proxy: http://proxy.example.com:3128 https_proxy: http://proxy.example.com:3128 no_proxy: 127.0.0.1,localhost,.example.com11. 升级与迁移
11.1 Harbor版本升级步骤
- 备份数据库和配置文件
- 下载新版安装包
- 修改配置适配新版本
- 执行升级脚本
./prepare --with-clair --with-chartmuseum docker-compose up -d11.2 数据迁移方案
跨集群迁移流程:
- 使用harbor-migrator工具导出元数据
- 同步镜像存储数据
- 在新集群导入元数据
- 验证数据完整性
# 导出数据 harbor-migrator export --config harbor.yml --output backup.tar.gz # 导入数据 harbor-migrator import --config harbor.yml --input backup.tar.gz12. 灾备恢复方案
12.1 全量备份策略
建议备份以下内容:
- Harbor数据库dump
- 配置文件目录
- 证书文件
- 镜像存储数据
# 创建每日备份任务 0 2 * * * /usr/bin/pg_dump -U postgres -d registry > /backup/harbor-db-$(date +\%Y\%m\%d).sql 0 3 * * * tar czvf /backup/harbor-config-$(date +\%Y\%m\%d).tar.gz /harbor/config12.2 灾难恢复流程
恢复步骤:
- 在新环境部署基础服务
- 恢复数据库备份
- 还原配置文件
- 同步存储数据
- 启动Harbor服务
13. 最佳实践总结
经过多个生产环境部署经验,总结以下关键点:
- 容量规划要预留30%以上余量
- 定期测试高可用切换功能
- 监控关键指标:存储使用率、API响应时间、认证成功率
- 建立完善的备份验证机制
实际部署中发现,配置合理的PostgreSQL连接池参数和Redis缓存策略,可以显著提升Harbor在高并发场景下的性能表现。建议根据实际负载情况,持续优化这些关键参数。
