本文由开源摘星打算反对我的项目 Harbor 的贡献者「勾永彪」投稿。
开源摘星打算(WeOpen Star) 是由腾源会 2022 年推出的全新我的项目,旨在为开源人提供成长激励,为开源我的项目提供成长反对,助力开发者更好地理解开源,更快地逾越鸿沟,参加到开源的具体奉献与实际中。
流动详情请见:https://github.com/weopenproj...
【摘要】 基于Harbor离线装置形式的高可用方案设计及部署。一、环境阐明1.1 架构图
Harbor高可用架构图
【架构解析】:将Harbor的redis缓存组件、PostgreSQL数据库组件迁徙到零碎内部做高可用,应用内部共享存储实现多个Harbor实例的数据共享,Harbor实例可横向扩大。1.2 主机清单IP地址主机名形容192.168.2.107harbor1Harbor实例1,8021端口192.168.2.108harbor2Harbor实例2,8021端口192.168.2.110harbor-data部署Harbor实例的共享存储、内部数据库、内部缓存服务192.168.2.111/负载平衡VIP,8121端口
1.3 服务版本服务版本要求装置版本Harbor/2.3.5Docker17.06.0+19.03.8Docker-compose1.18.0+v2.2.3Redis6.0.166.2.7PostgreSQLv13.213.5二、主机初始化Harbor实例进行初始化
装置docker装置docker-compose配置内核参数2.1 装置docker$ wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo$ yum install -y docker-ce$ systemctl enable --now docker$ systemctl status docker$ cat <<EOF > /etc/docker/daemon.json{ "registry-mirrors": ["https://xcg41ct3.mirror.aliyuncs.com"], "exec-opts": ["native.cgroupdriver=systemd"], "registry-mirrors": ["https://3hjcmqfe.mirror.aliyuncs.com"], "log-driver": "json-file", "log-opts": { "max-size": "500m", "max-file": "2" }}EOF $ systemctl daemon-reload$ systemctl restart dockerexec-opts": ["native.cgroupdriver=systemd"], #驱动器 registry-mirrors: 镜像减速地址,可多个 max-file: log最多保留数量 live-restore: 重启docker不重启容器,多用于k8s上2.2 装置docker-compose装置docker-compose 1.18.0以上的版本,本处装置v2.2.3版本。
$ wget https://github.com/docker/compose/releases/download/v2.2.3/docker-compose-linux-x86_64$ mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose$ chmod +x /usr/local/bin/docker-compose$ docker-compose versionDocker Compose version v2.2.32.3 配置内核参数$ modprobe br_netfilter$ cat >> /etc/sysctl.conf << EOFnet.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1net.ipv4.ip_forward = 1 #路由转发EOF$ sysctl -p三、应用NFS提供内部共享存储在192.168.2.110部署NFS服务提供共享存储给Harbor1实例、Harbor2实例应用。192.168.2.110作为NFS服务端,harbor实例为客户端。
3.1 部署NFS服务端1)装置并启动nfs$ yum install -y nfs-utils $ systemctl start nfs && systemctl enable nfs && systemctl status nfs$ chkconfig nfs on #设置为开机自启2)创立共享目录客户端的数据将近程存入到共享目录下。
$ mkdir -p /data/harbor_data3)批改配置$ cat /etc/exports /data/harbor_data 192.168.2.0/24(rw,no_root_squash) #容许哪个网段的客户端应用指定共享目录$ exportfs -arv #使配置文件失效exporting 192.168.2.0/24:/data/harbor_data
4)重启nfs服务$ systemctl restart nfs 5)查看共享目录信息$ showmount -e localhost export list for localhost:/data/harbor_data3.2 部署客户端在harbor1和harbor2上操作
$ yum -y install nfs-utils$ systemctl start nfs-utils && systemctl enable nfs-utils && systemctl status nfs-utils3.3 客户端挂载NFS共享存储在harbor1和harbor2节点操作,创立实例的存储目录,而后挂载到NFS。
$ mkdir -p /data/harbor_data $ cat <<EOF >> /etc/fstab192.168.2.110:/data/harbor_data /data/harbor_data nfs defaults 0 0EOF $ mount -a挂载格局:NFSIP:共享目录 本地目录 nfs defaults 0 0测试是否能够失常应用:[root@harbor2 ~]# touch /data/harbor_data/test.txt [root@harbor1 ~]# ls /data/harbor_data/test.txt四、部署Redis缓存服务(源码)
本处为演示环境,理论生产环境请对Redis服务做高可用及数据备份。在192.168.2.110部署Redis缓存服务,为harbor1和harbor2实例提供内部redis缓存服务。
4.1 下载安装包$ wget https://download.redis.io/releases/redis-6.2.7.tar.gz4.2 装置依赖包$ yum install -y gcc gcc-c++4.3 源码编译$ mkdir -p /app/$ tar zxvf redis-6.2.7.tar.gz -C /app$ cd /app/redis-6.2.7/$ make #编译$ make install #装置4.4 批改配置文件redis默认只反对本地应用,本处须要批改几个参数:
内部可连贯;redis启动形式;redis近程连贯明码;$ vim /app/redis-6.2.7/redis.conf #bind 127.0.0.1 -::1 #75行,正文掉bind的行,容许任何主机连贯;daemonize yes #259行,将no批改为yes,使redis能够应用守护过程形式启动;requirepass lidabai666 #903行,设置redis连贯的auth明码(lidabai666)4.5 启动Redis服务后面配置了应用守护过程形式启动,所以间接应用systemctl则能够启动redis服务。
$ pwd/app/redis-6.2.7$ redis-server redis.conf4.6 服务验证1)查看Redis服务版本$ redis-cli -vredis-cli 6.2.72)查看端口redis默认监听6379端口
$ ps aux | grep 6379root 6200 0.1 0.2 162416 10020 ? Ssl 17:59 0:00 redis-server *:6379root 6231 0.0 0.0 112720 984 pts/0 R+ 18:01 0:00 grep --color=auto 63793)客户端连贯Redisharbor1和harbor2作为redis客户端
$ which redis-cli #查看redis-cli工具地位/usr/local/bin/redis-cli[root@harbor-data redis-6.2.7]# scp /usr/local/bin/redis-cli 192.168.2.107:/usr/local/bin/[root@harbor-data redis-6.2.7]# scp /usr/local/bin/redis-cli 192.168.2.108:/usr/local/bin/客户端应用redis-cli工具连贯Redis服务器
[root@harbor1 ~]# redis-cli -h 192.168.2.110 -p 6379 -a lidabai666-a 参数指定redis连贯明码五、部署PostgreSQL内部存储服务(源码)在192.168.2.110主机以源码的形式装置PostgreSQL数据库服务,为harbor1和harbor2实例提供共享存储。
5.1 新建postgres用户默认超级用户(root)不能启动postgresql,须要手动建用户postgres。
$ useradd postgres$ id postgresuid=1000(postgres) gid=1000(postgres) 组=1000(postgres)5.2 装置依赖包$ yum -y install readline-devel zlib-devel gcc zlib5.3 下载解压源码包$ wget https://ftp.postgresql.org/pub/source/v13.5/postgresql-13.5.tar.gz --no-check-certificate$ tar zxvf postgresql-13.5.tar.gz -C /app/5.4 编译装置$ cd /app/postgresql-13.5/$ ./configure --prefix=/usr/local/postgresql$ make && make install5.5 创立数据目录$ mkdir -p /data/postgresql/data$ chown -R postgres:postgres /usr/local/postgresql/$ chown -R postgres:postgres /data/postgresql/data/5.6 设置postgres环境变量[root@harbor-data postgresql-13.5]# su - postgres[postgres@harbor-data ~]$ vim + .bash_profilePGHOME=/usr/local/postgresql #psql装置目录export PGHOMEPGDATA=/data/postgresql/data #数据库目录export PGDATAPATH=$PATH:$HOME/bin:$HOME/.local/bin:$PGHOME/binexport PATH[postgres@harbor-data ~]$ source ./.bash_profile[postgres@harbor-data ~]$ which psql/usr/local/postgresql/bin/psql查看版本 [postgres@harbor-data ~]$ psql -V psql (PostgreSQL) 13.5
...