哈喽!大家好,我是李大白!
本篇文章主要分享将Harbor的数据库组件放置到外部,在Harbor高可用中提供了良好的基础,实操性强,建议收藏~~~
前言
Harbor作为目前最受欢迎的镜像仓库,其Helm部署的方式因kubernetes的因素才可以实现高可用,其它的安装方式(在线安装、离线安装)官方并不提供高可用的服务,需要自行设计高可用方案。
而harbor高可用设计,其最重要的一环即是如何实现数据的共享。
本篇文章主要是讲Harbor的数据库组件(harbor-db)放到Harbor外面,即使用外部的PostgreSQL数据库存放Harbor的数据。
1-环境说明
本篇文章以Harbor 2.3.5版本为演示环境,对应的PostgreSQL版本为13.5,其它的版本对应关系需要注意,因为是演示环境,为减少操作,Harbor并没有使用HTTPS安全加密端口。
IP
端口
服务版本
Harbor服务器
192.168.2.250
80
2.3.5
PostgreSQL服务器
192.168.2.43
5432
13.5
2-创建外部数据库
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 安装依赖包
yum -y install readline-devel zlib-devel gcc zlib2.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 postgres2.5 创建数据目录
mkdir -p /data/postgresql/datachown -R postgres:postgres /usr/local/postgresql/
chown -R postgres:postgres /data/postgresql/data/
2.6 设置postgres环境变量
- | 切换用户
- | .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
- l使配置立即生效
- l查看安装路径
/usr/local/postgresql/bin/psql
- l查看版本
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 startwaiting for server to start.... done
server started
3-设置(修改)Postgresql密码
默认psql本地登录是不需要密码的,即使我们设置了密码,也不需要密码就能登录。应为配置文件pg_hba.conf中的local设置为trust , 为了安全我们修改为 password,就是使用密码才能登陆,(当我们忘记密码的时间,也可以使用这用方式,先设置为trust之后,修改密码,然后在设置为password。)
3.1 设置密码
[postgres@ceph3 ~]$ psqlpsql (13.5)
Type "help" for help.
postgres=# \password
Enter new password: //密码(Sx703…
Enter it again: //确认密码
3.2设置可以远程登录
[postgres@ceph3 ~]$ vim /data/postgresql/data/postgresql.conflisten_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 restartwaiting for server to shut down.... done
server stopped
waiting for server to start.... done
server started
4-创建数据库
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 | | {}
5-停止Harbor服务
停止期间Harbor将无法提供服务,生产环境需要注意评估对业务的影响。
[root@Over harbor]# docker-compose down如图表示停止Harbor服务成功,如果停止失败需要根据报错来排查了。
6-修改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