千家信息网

Harbor多实例高可用共享存储该怎么搭建

发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,今天就跟大家聊聊有关Harbor多实例高可用共享存储该怎么搭建,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。多实例共享存储架构图本文 LB 不
千家信息网最后更新 2025年12月02日Harbor多实例高可用共享存储该怎么搭建

今天就跟大家聊聊有关Harbor多实例高可用共享存储该怎么搭建,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

多实例共享存储架构图


本文 LB 不使用 Nginx,使用阿里SLB。

本文架构需要考虑三个问题

1、共享存储的选取,Harbor的后端存储目前支持AWS S3、Openstack Swift, Ceph等。本文使用阿里云极速性NAS,磁盘IO性能比单块磁盘读写性能要好。使用 NFS V3 版本挂载。

2、Session 不能在不同的实例上共享,所以Harbor Redis 需要单独部署,并且多个实例连接相同的Redis。

3、Harbor多实例数据库问题,必须单独部署一个数据库,并且多个实例连接相同的数据库。

注意:生产环境如果使用阿里云NAS,推荐使用 极速性NAS,不推荐使用 通用型NAS。

阿里云NAS性能参考文档 https://help.aliyun.com/document_detail/124577.html?spm=a2c4g.11186623.6.552.2eb05ea0HJUgUB

部署资源

部署

Harbor 选择在线部署,使用 docker-compose 部署,docker-compose 和 Docker 部署环境本文不在介绍,网上可以搜索到相关文档。

1、挂载阿里云极速性NAS

harbor1 和 harbor2 机器都需要执行挂载 NAS

配置开机自动挂载,打开 /etc/fstab 配置文件,添加挂载命令。

# 创建 NAS 挂载目录 $ mkdir /data  # 提高同时发起的NFS请求数量 $ sudo echo "options sunrpc tcp_slot_table_entries=128" >>  /etc/modprobe.d/sunrpc.conf $ sudo echo "options sunrpc tcp_max_slot_table_entries=128" >>  /etc/modprobe.d/sunrpc.conf

挂载NFS v4文件系统,添加以下命令:

file-system-id.region.nas.aliyuncs.com:/ /data nfs vers=4,minorversion=0,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,_netdev,noresvport 0 0

如果您要挂载NFS v3文件系统,添加以下命令:

  1. file-system-id.region.nas.aliyuncs.com:/ /data nfs vers=3,nolock,proto=tcp,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,_netdev,noresvport 0 0


# 在 /etc/fstab 配置文件添加好挂载,并执行挂载 $ mount -a  # 检查挂载,如果结果中存在NFS文件系统的挂载地址,则说明挂载成功 $ df -h | grep aliyun

2、临时部署单机 Harbor

在 harbor1 机器上操作

# 在线部署Harbor $ cd /opt/ $ wget https://github.com/goharbor/harbor/releases/download/v2.2.1/harbor-online-installer-v2.2.1.tgz $ tar xf harbor-online-installer-v2.2.1.tgz $ cd /opt/harbor $ cp harbor.yml.tmpl harbor.yml  # 创建harbor数据存储 $ mkdir /data/harbor  # 添加域名证书,已有域名SSL证书 $ mkdir /data/harbor/cert  # 把SSL证书公钥和私钥上传到 /data/harbor/cert 目录中 $ scp harbor.example.pem root@192.168.10.10:/data/harbor/cert/ $ scp harbor.example.key root@192.168.10.10:/data/harbor/cert/  # 配置 harbor.yml 文件,下面是修改后文件与原文件比较结果 $ diff harbor.yml harbor.yml.tmpl  5c5 < hostname: harbor.example.com --- > hostname: reg.mydomain.com 17,18c17,18 <   certificate: /data/harbor/cert/harbor.example.pem <   private_key: /data/harbor/cert/harbor.example.key --- >   certificate: /your/certificate/path >   private_key: /your/private/key/path 29c29 < external_url: https://harbor.example.com --- > # external_url: https://reg.mydomain.com:8433  < data_volume: /data/harbor --- > data_volume: /data  # 生成配置文件 $ cd /opt/harbor  # harbor开启helm charts 和 镜像漏洞扫描 $ ./prepare --with-notary --with-trivy --with-chartmuseum  # 安装 $ ./install.sh --with-notary --with-trivy --with-chartmuseum  # 查看 $ docker-compose ps

3、单独部署Harbor数据库和Redis

  1. # 创建 postgres 和 redis 存储目录

  2. $ mkdir -p /data/harbor-redis /data/harbor-postgresql

  3. # 修改所属组

  4. $ chown -R 999.999 /data/harbor-redis /data/harbor-postgresql


# 创建 postgres 和 redis docker-compose.yml 文件 $ vim docker-compose.yml  version: '2.3'  services:   redis:     image: goharbor/redis-photon:v2.2.1     container_name: harbor-redis     restart: always     cap_drop:       - ALL     cap_add:       - CHOWN       - SETGID       - SETUID     volumes:       - /data/harbor-redis:/var/lib/redis     networks:       - harbor-db     ports:       - 6379:6379   postgresql:     image: goharbor/harbor-db:v2.2.1     container_name: harbor-postgresql     restart: always     cap_drop:       - ALL     cap_add:       - CHOWN       - DAC_OVERRIDE       - SETGID       - SETUID     environment:       POSTGRES_USER: postgres       POSTGRES_PASSWORD: test2021     volumes:       - /data/harbor-postgresql:/var/lib/postgresql/data:z     networks:       - harbor-db     ports:       - 5432:5432  networks:  harbor-db:    driver: bridge  # 部署 postgres 和 redis $ docker-compose up -d

4、导入 postgres 数据

# 进入临时harbor-db容器导出相关表及数据 $ docker exec -it -u postgres harbor-db bash  # 导出数据 $ pg_dump -U postgres registry > /tmp/registry.sql $ pg_dump -U postgres notarysigner > /tmp/notarysigner.sql $ pg_dump -U postgres notaryserver > /tmp/notaryserver.sql  # 将数据导入单独部署的PostgreSQL数据库 $ psql -h 192.168.10.10 -U postgres registry -W < /tmp/registry.sql $ psql -h 192.168.10.10 -U postgres notarysigner -W < /tmp/notarysigner.sql $ psql -h 192.168.10.10 -U postgres notaryserver -W < /tmp/notaryserver.sql

5、清理临时部署单机Harbor数据和相关配置文件

  1. # 清理harbr数据和配置文件

  2. $ cp -a /data/harbor/cert /tmp/

  3. $ rm -rf /data/harbor/*

  4. $ rm -rf /opt/harbor

  5. $ cp -a /tmp/cert /data/harbor/

  6. # 重新创建配置文件

  7. $ cd /opt/

  8. $ tar xf harbor-online-installer-v2.2.1.tgz

  9. $ cd /opt/harbor

  10. # 修改配置文件,连接单独部署postgres和redis,注释harbor自带的postgres和redis

  11. $ cp harbor.yml.tmpl harbor.yml

  12. $ diff harbor.yml harbor.yml.tmpl

  13. 5c5

  14. < hostname: harbor.example.com

  15. ---

  16. > hostname: reg.mydomain.com

  17. 17,18c17,18

  18. < certificate: /data/harbor/cert/harbor.example.pem

  19. < private_key: /data/harbor/cert/harbor.example.key

  20. ---

  21. > certificate: /your/certificate/path

  22. > private_key: /your/private/key/path

  23. 29c29

  24. < external_url: https://harbor.example.com

  25. ---

  26. > # external_url: https://reg.mydomain.com:8433

  27. 37c37

  28. < # database:

  29. ---

  30. > database:

  31. 39c39

  32. < # password: root123

  33. ---

  34. > password: root123

  35. 41c41

  36. < # max_idle_conns: 50

  37. ---

  38. > max_idle_conns: 50

  39. 44c44

  40. < # max_open_conns: 1000

  41. ---

  42. > max_open_conns: 1000

  43. 47c47

  44. < data_volume: /data/harbor

  45. ---

  46. > data_volume: /data

  47. 135,158c135,158

  48. < external_database:

  49. < harbor:

  50. < host: 192.168.10.10

  51. < port: 5432

  52. < db_name: registry

  53. < username: postgres

  54. < password: test2021

  55. < ssl_mode: disable

  56. < max_idle_conns: 50

  57. < max_open_conns: 1000

  58. < notary_signer:

  59. < host: 192.168.10.10

  60. < port: 5432

  61. < db_name: notarysigner

  62. < username: postgres

  63. < password: test2021

  64. < ssl_mode: disable

  65. < notary_server:

  66. < host: 192.168.10.10

  67. < port: 5432

  68. < db_name: notaryserver

  69. < username: postgres

  70. < password: test2021

  71. < ssl_mode: disable

  72. ---

  73. > # external_database:

  74. > # harbor:

  75. > # host: harbor_db_host

  76. > # port: harbor_db_port

  77. > # db_name: harbor_db_name

  78. > # username: harbor_db_username

  79. > # password: harbor_db_password

  80. > # ssl_mode: disable

  81. > # max_idle_conns: 2

  82. > # max_open_conns: 0

  83. > # notary_signer:

  84. > # host: notary_signer_db_host

  85. > # port: notary_signer_db_port

  86. > # db_name: notary_signer_db_name

  87. > # username: notary_signer_db_username

  88. > # password: notary_signer_db_password

  89. > # ssl_mode: disable

  90. > # notary_server:

  91. > # host: notary_server_db_host

  92. > # port: notary_server_db_port

  93. > # db_name: notary_server_db_name

  94. > # username: notary_server_db_username

  95. > # password: notary_server_db_password

  96. > # ssl_mode: disable

  97. 161,175c161,175

  98. < external_redis:

  99. < # support redis, redis+sentinel

  100. < # host for redis: :

  101. < # host for redis+sentinel:

  102. < # :,:,:

  103. < host: 192.168.10.10:6379

  104. < password:

  105. < # sentinel_master_set must be set to support redis+sentinel

  106. < #sentinel_master_set:

  107. < # db_index 0 is for core, it's unchangeable

  108. < registry_db_index: 1

  109. < jobservice_db_index: 2

  110. < chartmuseum_db_index: 3

  111. < trivy_db_index: 5

  112. < idle_timeout_seconds: 30

  113. ---

  114. > # external_redis:

  115. > # # support redis, redis+sentinel

  116. > # # host for redis: :

  117. > # # host for redis+sentinel:

  118. > # # :,:,:

  119. > # host: redis:6379

  120. > # password:

  121. > # # sentinel_master_set must be set to support redis+sentinel

  122. > # #sentinel_master_set:

  123. > # # db_index 0 is for core, it's unchangeable

  124. > # registry_db_index: 1

  125. > # jobservice_db_index: 2

  126. > # chartmuseum_db_index: 3

  127. > # trivy_db_index: 5

  128. > # idle_timeout_seconds: 30


# 部署第一个节点 harbor $ cd /opt/harbor  # harbor开启helm charts 和 镜像漏洞扫描 $ ./prepare --with-notary --with-trivy --with-chartmuseum  # 安装 $ ./install.sh --with-notary --with-trivy --with-chartmuseum  # 查看 $ docker-compose ps  # 拷贝配置到 harbor2 机器上 $ scp -r /opt/harbor 192.168.10.11:/opt/

在 harbor2 机器上操作

# 部署第二个节点 harbor $ cd /opt/harbor  # harbor开启helm charts 和 镜像漏洞扫描 $ ./prepare --with-notary --with-trivy --with-chartmuseum  # 安装 $ ./install.sh --with-notary --with-trivy --with-chartmuseum  # 查看 $ docker-compose ps

这里不具体介绍SLB配置方法,具体配置方法参考下面阿里云SLB配置文档,配置 443端口,使用 TCP 协议,后端映射到两台 harbor1 和 harbor2 443端口上。

看完上述内容,你们对Harbor多实例高可用共享存储该怎么搭建有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

0