作者简介

211工程院校贵州大学管理学院硕士研究生、互联网金融行业资深DevOps研发工程师. 曾在国内多家知名互联网公司 平安科技、微众银行、顺丰科技、魅族任职. 具有多年国内一线互联网公司自动化运维平台设计与开发经验。
Harbor高可用集群解决方案--实践篇
多Harbor实例共享后端存储
实验环境:
HarborA 172.16.70.91
HarborB 172.16.70.92
后端存储(NFS、PostgreSQL、Redis) 172.16.70.90
根据上文内容可知,部署Harbor多实例共享后端存储的高可用集群,需要为集群提供的后端存储有NFS、Redis、PostgreSQL。 
[root@localhost ~]# yum -y install nfs-utils rpcbind
[root@localhost ~]# mkdir -p data/harbor_data[root@localhost ~]# chown nobody:nobody data/harbor_data/ [root@localhost ~]# echo "/data/harbor_data 172.16.70.0/24(rw,sync,no_root_squash)" >> etc/exports
[root@localhost ~]# systemctl restart rpcbind[root@localhost ~]# systemctl restart nfs步骤5. 配置NFS客户端(两台Harbor上都需进行此步骤)由于Harbor服务器需要使用NFS作为共享存储,此时Harbor服务器作为NFS的客户端,此时需要在两台Harbor服务器上安装nfs-utils。[root@localhost harbor]# yum -y install nfs-utils 步骤6. 在NFS客户端上查看NFS的连通性(两台Harbor上都需进行此步骤)[root@localhost harbor]# showmount -e 172.16.70.90步骤7. 在Harbor服务器上挂载NFS共享存储(两台Harbor上都需进行此步骤)172.16.70.90:/data/harbor_data mnt/harbor_disk nfs defaults 0 0 综上:NFS客户端与服务端部署完成,稍后将配置其与Harbor关联。
1.2 PostgreSQL数据库安装
当前集群中Harbor的版本为v1.8.6,使用的数据库为PostgreSQL,以下将通过YUM的方式部署PostgreSQL数据库。
步骤1. 下载PostgreSQL官方YUM源配置文件包并安装[root@localhost ~]# wget https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7.6-x86_64/pgdg-centos96-9.6-3.noarch.rpm [root@localhost ~]# rpm -ivh pgdg-centos96-9.6-3.noarch.rpm
[root@localhost yum.repos.d]# yum -y install postgresql96-server postgresql96-contrib
[root@localhost ~]# usr/pgsql-9.6/bin/postgresql96-setup initdb
[root@localhost ~]# systemctl restart postgresql-9.6 [root@localhost ~]# systemctl enable postgresql-9.6
5.1 修改密码

5.2 开启远程访问
[root@localhost ~]# vi var/lib/pgsql/9.6/data/postgresql.conf
#listen_addresses = 'localhost' 为 listen_addresses='*'
[root@localhost ~]# vim var/lib/pgsql/9.6/data/pg_hba.confhost all all 172.16.70.91/32 trusthost all all 172.16.70.92/32 trusthost all all 172.16.70.90/32 trust步骤6. 重启PostgreSQL服务
[root@localhost pgsql]# systemctl restart postgresql-9.6
步骤7. 验证服务
[root@localhost data]# psql -h 172.16.70.90 -p 5432 -U postgres 综上:PostgreSQL服务器部署完成,稍后将配置其与Harbor关联。
1.3 Redis服务安装
步骤1. 安装redis
[root@localhost ]# yum install epel-release [root@localhost ]# yum -y install redis
步骤2. 修改配置参数
[root@localhost ~]# sed -i 's/bind 127.0.0.1/bind 0.0.0.0/g' etc/redis.conf [root@localhost ~]# sed -i 's/daemonize no/daemonize yes/g' etc/redis.conf 步骤3. 启动并测试redis连接
[root@localhost ~]# systemctl restart redis[root@localhost ~]# systemctl enable redis[root@localhost ~]# redis-cli -h 172.16.70.90综上:Redis服务部署完成,稍后将配置其与Harbor关联。
组成Harbor项目的容器是由docker-compose编排的,将Harbor的部署架构由单机变更为集群模式,需要对harbor目录下的docker-compose.yml和harbor.yml配置文件进行修改。
2.1 配置Harbor连接外部存储
修改docker-compose.yml配置文件,找到registry配置区块,按照下图方式进行修改,其中/mnt/harbor_disk/registry为NFS共享存储的本地挂载点。
2.1 配置Harbor连接外部数据库
[root@localhost harbor_disk]# docker-compose down
步骤1.
修改docker-compose.yml配置文件,找到PostgreSQL区块,由于使用了外部数据库作为集群多Harbor实例的共享数据库,所以可将该区块所有配置注释掉。

步骤2.
在配置文件中寻找依赖postgreSQL的配置区块并将其注释。

步骤3.
修改harbor.yml配置文件,添加PostgreSQL相关配置到external_database区块。

步骤4. 迁移数据库
4.1 进入harbor-db容器导出相关表及数据
[root@localhost harbor]# docker exec -it a0b1202b2fca /bin/bash

Harbor项目有3个数据库分别叫做 registry、notarysigner、notaryserver。
4.2 导出数据库
postgres [ ~ ]$ pg_dump -U postgres registry > tmp/registry.sql
postgres [ ~ ]$ pg_dump -U postgres notarysigner > tmp/notarysigner.sql
postgres [ ~ ]$ pg_dump -U postgres notaryserver > tmp/notaryserver.sql
[root@localhost ~]# docker cp a0b1202b2fca:/tmp/registry.sql ./
[root@localhost ~]# docker cp a0b1202b2fca:/tmp/notarysigner.sql ./
[root@localhost ~]# docker cp a0b1202b2fca:/tmp/notaryserver.sql ./
4.3 将数据导入至外部PostgreSQL数据库
postgres=# create database registry
postgres-# create database notarysigner
postgres-# create database notaryserver
-bash-4.2$ psql -U postgres registry < /tmp/registry.sql
-bash-4.2$ psql -U postgres notarysigner < /tmp/notarysigner.sql
-bash-4.2$ psql -U postgres notaryserver < /tmp/notaryserver.sql
4.4 配置Harbor连接外部redis
步骤1.
修改harbor.yml配置文件,添加redis相关配置到external_redis区块。

步骤2.
修改docker-compose.yml配置文件,删除redis相关区块配置并寻找依赖redis的区块,并将其注释。


4.5 启动Harbor
[root@localhost harbor_disk]# docker-compose up -d
4.6 同步配置
将HarborA主机上的docker-compose.yml和harbor.yml拷贝至HarborB,除了harbor.yml中的hostname配置有所区别外,其他配置两台主机需全部保持一致,启动Harbor。
验证集群:


综上两个Harbor实例中的项目与镜像完全一致!
如果本文可以对您的工作学习带来帮助,请扫描左侧赞赏码以资鼓励作者;文章勘误请扫描右侧二维码联系作者。
