「开源摘星计划」Harbor高可用设计,使用外部数据库-详细到爆的操作步骤

424 阅读5分钟

【摘要】Harbor 使用外部数据库,实现多节点数据一致性。
【文章来源】《Harbor进阶实战》公众号
开源摘星计划(WeOpen Star) 是由腾源会 2022 年推出的全新项目,旨在为开源人提供成长激励,为开源项目提供成长支持,助力开发者更好地了解开源,更快地跨越鸿沟,参与到开源的具体贡献与实践中。
不管你是开源萌新,还是希望更深度参与开源贡献的老兵,跟随“开源摘星计划”开启你的开源之旅,从一篇学习笔记、到一段代码的提交,不断挖掘自己的潜能,最终成长为开源社区的“闪亮之星”。
我们将同你一起,探索更多的可能性!
项目地址: WeOpen-Star:github.com/weopenproje…


前言

Harbor作为目前最受欢迎的镜像仓库,其Helm部署的方式因kubernetes的因素才可以实现高可用,其它的安装方式(在线安装、离线安装)官方并不提供高可用的服务,需要自行设计高可用方案。

而harbor高可用设计,其最重要的一环即是如何实现数据的共享。

本篇文章主要是讲Harbor的数据库组件(harbor-db)放到Harbor外面,即使用外部的PostgreSQL数据库存放Harbor的数据。

一、环境说明

本篇文章以Harbor 2.3.5版本为演示环境,对应的PostgreSQL版本为13.5,其它的版本对应关系需要注意,因为是演示环境,为减少操作,Harbor并没有使用HTTPS安全加密端口。

IP端口服务版本描述
192.168.2.250802.3.5Harbor服务器
192.168.2.43543213.5PostgreSQL服务器

二、创建外部数据库

2.1 下载源码包

[root@ceph3 postgresql]# wget https://ftp.postgresql.org/pub/source/v13.5/postgresql-13.5.tar.gz
[root@ceph3 postgresql]# tar zxvf postgresql-13.5.tar.gz
[root@ceph3 postgresql]# cd postgresql-13.5/
[root@ceph3 postgresql-13.5]# pwd
/app/postgresql/postgresql-13.5
[root@ceph3 postgresql-13.5]# ls
aclocal.m4   config   configure   configure.in   contrib   COPYRIGHT   doc   GNUmakefile.in 
  HISTORY   INSTALL   Makefile   README   src

2.2 安装依赖包

[root@ceph3 postgresql-13.5]# yum -y install readline-devel  zlib-devel  gcc zlib

2.3 编译安装

[root@ceph3 postgresql-13.5]# ./configure  --prefix=/usr/local/postgresql
[root@ceph3 postgresql-13.5]# make && make install

2.4 新建用户

默认超级用户(root)不能启动postgresql,需要手动建用户postgres。

[root@ceph3 postgresql-13.5]# useradd postgres

2.5 创建数据目录

mkdir -p /data/postgresql/data
chown -R postgres:postgres /usr/local/postgresql/
chown -R postgres:postgres /data/postgresql/data/

2.6 设置postgres环境变量

切换用户

[root@ceph3 postgresql-13.5]# su - postgres

 .bash_profile添加环境变量

[postgres@ceph3 ~]$ vim + .bash_profile   在末尾添加以下几行
PGHOME=/usr/local/postgresql   #psql安装目录
export PGHOME
PGDATA=/data/postgresql/data    #数据库目录
export PGDATA
PATH=$PATH:$HOME/bin:$HOME/.local/bin:$PGHOME/bin
export PATH

使配置立即生效

[postgres@ceph3 ~]$ source ./.bash_profile
  • 查看安装路径
[postgres@ceph3 ~]$ which psql
/usr/local/postgresql/bin/psql
  • 查看版本
[postgres@ceph3 ~]$ psql  -V
psql (PostgreSQL) 13.5

2.7 初始化数据库

由于 Red Hat 系列发行版的政策,PostgreSQL 安装不会启用自动启动或自动初始化数据库。要完成数据库安装,您需要根据您的发行版执行以下步骤:

[postgres@ceph3 ~]$ initdb
......
You can change this by editing pg_hba.conf or using the option -A, or
--auth-local and --auth-host, the next time you run initdb.
Success. You can now start the database server using:    //表示初始化成功
    pg_ctl -D /data/postgresql/data -l logfile start

2.8 启动PostgreSQL

启动命令即为刚才初始化成功后的提示!

[postgres@ceph3 ~]$ pg_ctl -D /data/postgresql/data -l logfile start
waiting for server to start.... done
server started

三、设置(修改)Postgresql密码

    默认psql本地登录是不需要密码的,即使我们设置了密码,也不需要密码就能登录。应为配置文件pg_hba.conf中的local设置为trust , 为了安全我们修改为 password,就是使用密码才能登陆,(当我们忘记密码的时间,也可以使用这用方式,先设置为trust之后,修改密码,然后在设置为password。)

3.1 设置密码

[postgres@ceph3 ~]$ psql
psql (13.5)
Type "help" for help.
postgres=# \password

Enter new password:    #密码(Sx703…
Enter it again:      #确认密码

3.2设置可以远程登录

[postgres@ceph3 ~]$ vim /data/postgresql/data/postgresql.conf
listen_addresses = '*'          # what IP address(es) to listen on;

[postgres@ceph3 data]$ vim /data/postgresql/data/pg_hba.conf
local   all       all          password     #默认trust,本地登录不要密码,设置为password使用密码登录。
host    all       all          ::1/128          password
host    all       all          0.0.0.0/0        password  #ip地址修改为0.0.0.0/0

3.3 重启PostgreSQL

[postgres@ceph3 data]$ pg_ctl -D /data/postgresql/data -l /data/postgresql/data/postgres.log restart
waiting for server to shut down.... done
server stopped
waiting for server to start.... done
server started

四、创建数据库

Harbor 2.3.5需要创建的数据库:notaryserver、notarysigner、registry ;目前Harbor仅支持PostgraSQL数据库,需要手动在外部的PostgreSQL上创建harbor、notary_signer、notary_servers三个数据库,Harbor启动时会自动在对应数据库下生成表。

因为本文主要是演示环境,PostgreSQL数据库的用户就以超级管理员- postgres为例,如果是生产环境,建议新建用户,并授予harbor、notary_signer、notary_servers三个数据库相对应的权限。

postgres=# create database  registry;
CREATE DATABASE
postgres=# create database notary_signer;
CREATE DATABASE
postgres=# create database notary_servers;
CREATE DATABASE
postgres=# \l

创建用户

postgres=# create user  server with  password  '123456';
postgres=# create user  signer  with  password  '123456'
postgres=# \du
                                   List of roles
 Role name |                         Attributes                         | Member of 
-----------+------------------------------------------------------------+-----------
 postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
 server    |                                                            | {}
 signer    |                                                            | {}

五、停止Harbor服务

停止期间Harbor将无法提供服务,生产环境需要注意评估对业务的影响。

[root@Over harbor]# docker-compose down

如图表示停止Harbor服务成功,如果停止失败需要根据报错来排查了。


六、修改Harbor配置文件

Harbor默认使用本地数据库,要使用外部数据库,则需要对配置文件进行修改。在配置文件中启用外部数据库。

6.1 启用外部数据库

[root@Over harbor]# vim harbor.yml
...
external_database:
   harbor:
     host: 192.168.2.43   # 数据库主机地址
     port: 5432    # 数据库端口
     db_name: registry    # 数据库名称
     username: postgres   # 连接该数据库的用户名
     password: Sx703826   # 连接数据库的密码
     ssl_mode: disable
     max_idle_conns: 2
     max_open_conns: 0
   notary_signer:   
     host: 192.168.2.43
     port: 5432
     db_name: notary_signer
     username: postgres
     password: Sx703826
     ssl_mode: disable
   notary_server:
     host: 192.168.2.43
     port: 5432
     db_name: notary_server
     username: postgres
     password: Sx703826
     ssl_mode: disable

注意external_database左边是没有空格的,其它行配置对其方式也得注意下。否则在执行./prepare会出现报错。


七、将配置文件注入到组件中

  • 将harbor.yml配置文件的内容注入到各组件的配置文件中。
[root@Over harbor]# ./prepare 
prepare base dir is set to /app/harbor
………
Clean up the input dir

八、install Harbor

安装前可以查看安装的参数

[root@Over harbor]# ./install.sh  --help
Please set --with-notary if needs enable Notary in Harbor, and set ui_url_protocol/ssl_cert/ssl_cert_key in harbor.yml bacause notary must run under https. 
Please set --with-trivy if needs enable Trivy in Harbor
Please set --with-chartmuseum if needs enable Chartmuseum in Harbor
  • 执行./install.sh安装
[root@Over harbor]# ./install.sh
[Step 0]: checking if docker is installed ...
Note: docker version: 19.03.8
[Step 1]: checking docker-compose is installed ...
Note: docker-compose version: 1.29.2
  • 查看组件状态
[root@Over harbor]# docker-compose ps
  • 登录Harbor UI 在浏览器输入harbor的IP地址即可访问。

用户名:admin 密码: Harbor12345 然后点击【登录】

成功!

最后就可以从PosqlgreSQL数据库查看每个库下的表信息了。