harbor高可用方案
作者:互联网
高可用架构:多实例共享后端存储
方案说明
共享后端存储算是一种比较标准的方案,就是多个Harbor实例共享同一个后端存储,任何一个实例持久化到存储的镜像,都可被其他实例中读取。通过前置LB进来的请求,可以分流到不同的实例中去处理,这样就实现了负载均衡,也避免了单点故障。
搭建以NFS作为共享存储存放Harbor相关data,并分离PostgreSQL与Redis为多个Harbor共同连接使用,使用Nginx做负载均衡。
架构图
如果最终生产环境集群中服务器较多,依赖做完LB的Harbor也无法完全达到需求时,可以使用如下架构,部署下级Harbor节点从主节点同步镜像,然后再分发给生产服务器。
这个方案在实际生产环境中部署需要考虑三个问题:
1. 共享存储的选取,Harbor的后端存储目前支持AWS S3、Openstack Swift, Ceph等,在下面的实验环境里,暂且直接使用nfs。
2. Session在不同的实例上共享,这个现在其实已经不是问题了,在最新的harbor中,默认session会存放在redis中,只需要将redis独立出来即可。可以通过redis sentinel或者redis cluster等方式来保证redis的可用性。在下面的实验环境里,暂且使用单台redis。
3. Harbor多实例数据库问题,这个也只需要将harbor中的数据库拆出来独立部署即可。让多实例共用一个外部数据库,数据库的高可用也可以通过数据库的高可用方案保证。
环境说明
资源规划
NFS安装
Nfs-server 安装
# 安装 NFS server(10.20.1.186) yum -y install nfs-utils rpcbind #配置 NFS 目录与权限 vi /etc/exports #增加 /data/nfsdata 10.20.1.0/24(rw,sync,no_root_squash) #启动服务 systemctl enable rpcbind.service systemctl enable nfs-server.service systemctl start rpcbind.service systemctl start nfs-server.service # 查看信息 showmount -e 10.20.1.186 Export list for 10.20.1.186 /data/nfsdata 10.20.1.186/24
Nfs-client 客户端安装
# 10.20.1.181/182 yum -y install nfs-utils
Postgresql 安装
1下载PostgreSQL官方YUM源配置文件包并安装
#10.20.1.183 wget https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm rpm -ivh pgdg-redhat-repo-latest.noarch.rpm
2 安装postgresql
# postgresql14安装有问题。。。 yum -y install postgresql13-server postgresql13-contrib
3 初始化数据库
/usr/pgsql-13/bin/postgres-13-setup initdb
4. 启动数据库
systemctl enable postgresql-13 ; systemctl start postgresql-13
5 Postgresql 修改密码
# su - postgres -bash-4.2$ psql psql (13.7) Type "help" for help. postgres=# ALTER USER postgres WITH PASSWORD 'postgres'; ALTER ROLE
6 postgresql 开启远程访问
vim /var/lib/pgsql/13/data/postgresql.conf listen_addresses = 'localhost' 修改成 listen_addresses = '*'
7 Postgresql 修改信任远程链接
Vim /var/lib/pgsql/13/data/pg_hba.conf 最后添加 host all all 10.20.1.181/32 trust host all all 10.20.1.182/32 trust host all all 10.20.1.183/32 trust
8 重启postgresql
systemctl restart postgresql-13
9 验证服务
psql -h 10.20.1.183 -p 5432 -U postgres
10 迁移数据库
先用docker-compose 启动一套harbor镜像仓库,从harbor-db容器中导出数据库表结构,再导入到外部postgresql 中
#例如: 10.20.1.181上操作 cd /data/tools tar -zxvf harbor-offline-installer-v2.5.0.tgz cd harbor cp harbor.yml.tmpl harbor.yml #修改 hostname 为 使用的域名 hostname: harbor.superman.com #注释掉https ./prepare ./install
11 进入harbor-db container中导出表结构
# docker exec -it harbor-db /bin/bash pg_dump -U postgres registry > /tmp/registry.sql pg_dump -U postgres notarysigner > /tmp/notarysigner.sql pg_dump -U postgres notaryserver > /tmp/notaryserver.sql
12 拷贝出sql
docker cp harbor-db:/tmp/registry.sql /tmp docker cp harbor-db:/tmp/notarysigner.sql /tmp docker cp harbor-db:/tmp/notaryserver.sql /tmp
13 拷贝postgresql 到外置服务器中,并且导入
scp /tmp/*.sql root@10.20.1.183:/tmp/ #导入数据库 # psql -h 10.20.1.183 -U postgres postgres=# create database registry; CREATE DATABASE postgres=# create database notarysigner; CREATE DATABASE postgres=# create database notaryserver; CREATE DATABASE psql -h 10.20.1.183 -U postgres registry < /tmp/registry.sql psql -h 10.20.1.183 -U postgres notarysigner < /tmp/notarysigner.sql psql -h 10.20.1.183 -U postgres notaryserver < /tmp/notaryserver.sql
14 删除harbor
docker-compose down -v rm /data/tools/harbor -rf
Redis 安装
1. 下载
wget https://download.redis.io/releases/redis-5.0.14.tar.gz
2. 编译
tar -zxvf redis-5.0.14.tar.gz cd redis-5.0.14/ make make install
3. 修改redis.conf 配置文件
sed -i 's/bind 127.0.0.1/bind 0.0.0.0/g' redis.conf sed -i 's/daemonize no/daemonize yes/g' redis.conf
4. 启动redis
./redis-server ../redis.conf
harbor安装
1 harbor解压缩
#10.20.1.181/182 安装 tar -zxvf harbor-offline-installer-v2.5.0.tgz -C /data
2 挂载共享目录
mkdir /data/harbor/data mount -t nfs 10.20.1.186:/data/nfsdata /data/harbor/data
3 修改harbor.yml配置文件
- hostname修改为本机ip
- 注释掉https
- 修改harbor默认的admin账号密码
- 数据存储位置,改为nfs挂载目录,我们本来就挂载到了data目录下,所以不用 动
- 注释掉database
- 注释掉clair
- 打开external_database和external_redis块的注释,并改为刚刚部署的地址
hostname: harbor.superman.com http: port: 80 harbor_admin_password: Harbor12345 database: password: root123 max_idle_conns: 100 max_open_conns: 900 data_volume: /data trivy: ignore_unfixed: false skip_update: false offline_scan: false insecure: false jobservice: max_job_workers: 10 notification: webhook_job_max_retry: 10 chart: absolute_url: disabled log: level: info local: rotate_count: 50 rotate_size: 200M location: /var/log/harbor _version: 2.5.0 proxy: http_proxy: https_proxy: no_proxy: components: - core - jobservice - trivy upload_purging: enabled: true age: 168h interval: 24h dryrun: false
4 执行prepare,生成docker-compose.yml文件
./prepare
5 安装harbor
./install.sh
6 测试
登陆 10.20.1.181 dashboard, 新建项目 登陆10.20.1.182 dashboard,查看项目是否创建 10.20.1.181 操作上传镜像 docker tag goharbor/harbor-exporter:v2.5.0 harbor.superman.com/source/harbor-exporter:v2.5.0 docker push harbor.superman.com/source/harbor-exporter:v2.5.0 10.20.1.182 pull镜像 docker push harbor.superman.com/source/harbor-exporter:v2.5.0
参考:
https://zhuanlan.zhihu.com/p/346697757
标签:10.20,方案,postgres,可用,harbor,redis,tmp,data 来源: https://www.cnblogs.com/fengjian2016/p/16359637.html