一、环境说明
1.1 架构图
Harbor高可用架构图
【架构解析】:将Harbor的redis缓存组件、PostgreSQL数据库组件迁移到系统外部做高可用,使用外部共享存储实现多个Harbor实例的数据共享,Harbor实例可横向扩展。
1.2 主机清单
IP地址 | 主机名 | 描述 |
192.168.2.107 | harbor1 | Harbor实例1,8021端口 |
192.168.2.108 | harbor2 | Harbor实例2,8021端口 |
192.168.2.110 | harbor-data | 部署Harbor实例的共享存储、外部数据库、外部缓存服务 |
192.168.2.111 | / | 负载均衡VIP,8121端口 |
1.3 服务版本
服务 | 版本要求 | 安装版本 |
Harbor | / | 2.3.5 |
Docker | 17.06.0+ | 19.03.8 |
Docker-compose | 1.18.0+ | v2.2.3 |
Redis | 6.0.16 | 6.2.7 |
PostgreSQL | v13.2 | 13.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 docker
exec-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 version Docker Compose version v2.2.32.3 配置内核参数
$ modprobe br_netfilter $ cat >> /etc/sysctl.conf << EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.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_data
3)修改配置
$ 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_data
3.2 部署客户端
在harbor1和harbor2上操作
$ yum -y install nfs-utils $ systemctl start nfs-utils && systemctl enable nfs-utils && systemctl status nfs-utils
3.3 客户端挂载NFS共享存储
在harbor1和harbor2节点操作,创建实例的存储目录,然后挂载到NFS。
$ mkdir -p /data/harbor_data $ cat <<EOF >> /etc/fstab 192.168.2.110:/data/harbor_data /data/harbor_data nfs defaults 0 0 EOF $ 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.gz
4.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.conf
4.6 服务验证
1)查看Redis服务版本
$ redis-cli -v redis-cli 6.2.7
2)查看端口
redis默认监听6379端口
$ ps aux | grep 6379 root 6200 0.1 0.2 162416 10020 ? Ssl 17:59 0:00 redis-server *:6379 root 6231 0.0 0.0 112720 984 pts/0 R+ 18:01 0:00 grep --color=auto 6379
3)客户端连接Redis
harbor1
和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连接密码