【摘要】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.250 | 80 | 2.3.5 | Harbor服务器 |
| 192.168.2.43 | 5432 | 13.5 | PostgreSQL服务器 |
二、创建外部数据库
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数据库查看每个库下的表信息了。