ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

harbor高可用方案

2022-06-09 16:00:07  阅读:224  来源: 互联网

标签:10.20 方案 postgres 可用 harbor redis tmp data


高可用架构:多实例共享后端存储

方案说明

共享后端存储算是一种比较标准的方案,就是多个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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有