当前位置:首页 > 行业动态 > 正文

harbor高可用部署

Harbor简介

Harbor 是一个企业级的 Docker 镜像仓库,提供安全的存储、交付和运行 Docker 镜像,它具有高可用性、多实例支持以及共享存储等功能,可以帮助企业更好地管理 Docker 镜像,本文将介绍如何搭建 Harbor 多实例高可用共享存储。

环境准备

1、硬件环境

部署 Harbor 需要至少两台服务器,一台作为负载均衡器(Master),另一台作为数据节点(Node),这两台服务器都需要满足以下要求:

CPU:4核及以上

内存:8G及以上

磁盘空间:至少20G

网络:千兆以太网或更高

2、软件环境

Docker:版本 17.09 及以上

Harbor:版本 2.3.0 及以上

etcd:版本 3.4.12 及以上

MySQL:版本 5.7.16 及以上

Python:版本 3.6 及以上

Nginx:版本 1.13.0 及以上

搭建步骤

1、安装并配置 etcd

etcd 是 Harbor 的核心组件,用于存储集群元数据,首先在 Master 服务器上安装 etcd:

wget https://github.com/etcd-io/etcd/releases/download/v3.4.12/etcd-v3.4.12-linux-amd64.tar.gz
tar xvf etcd-v3.4.12-linux-amd64.tar.gz
cd etcd-v3.4.12-linux-amd64
sudo mv etcd* /usr/local/bin/

在 Node 服务器上安装 etcd:

wget https://github.com/etcd-io/etcd/releases/download/v3.4.12/etcd-v3.4.12-linux-amd64.tar.gz
tar xvf etcd-v3.4.12-linux-amd64.tar.gz
cd etcd-v3.4.12-linux-amd64
sudo mv etcd* /usr/local/bin/

在两台服务器上分别创建 etcd 配置文件 /etc/etcd/etcd.conf,内容如下:

ETCD_NAME="default"
ETCD_DATA_DIR="/var/lib/etcd"
ETCD_LISTEN_PEER_URLS="http://localhost:2380"
ETCD_LISTEN_CLIENT_URLS="http://localhost:2379"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://localhost:2380"
ETCD_INITIAL_CLUSTER="default=http://localhost:2380"
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_INITIAL_CLUSTER_TOKEN="my-etcd-token"
ETCD_ADVERTISE_CLIENT_URLS="http://localhost:2379"

启动 etcd 服务:

sudo systemctl enable --now etcd

2、安装并配置 MySQL

在 Master 服务器上安装 MySQL:

wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.26-linux-glibc2.12-x86_64.tar.gz
tar xvf mysql-8.0.26-linux-glibc2.12-x86_64.tar.gz
cd mysql-8.0.26-linux-glibc2.12-x86_64/usr/local/bin/ && sudo install mysqld --prefix=/usr/local/mysql --sysconfdir=/etc/mysql --datadir=/var/lib/mysql --librarydir=/usr/local/mysql/lib --with-extra-charset=utf8mb4 --with-ssl --with-zlib --with-plugin-dir=/usr/local/mysql/plugin --skip-testdb --basedir=/usr/local/mysql --user=mysql --bind-address=localhost --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --default-authentication-plugin=mysql_native_password --default-storage-engine=InnoDB --default-tmpdir=/tmp --log_error=FILE --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306 --skip-networking &> /var/log/mysqld.log & tail -f /var/log/mysqld.log & wait $! || echo "MySQL installation failed!" && exit 1;

在 Node 服务器上安装 MySQL:

wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.26-linux-glibc2.12-x86_64.tar.gz
tar xvf mysql-8.0.26-linux-glibc2.12-x86_64.tar.gz
cd mysql-8.0.26-linux-glibc2.12-x86_64/usr/local/bin && sudo install mysqld --prefix=/usr/local/mysql --sysconfdir=/etc/mysql --datadir=/var/lib/mysql --librarydir=/usr/local/mysql/lib --with-extra-charset=utf8mb4 --with-ssl --with-zlib --with-plugin-dir=/usr/local/mysql/plugin --skip-testdb --basedir=/usr/local/mysql --user=mysql --bind-address=localhost --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --default-authentication-plugin=mysql_native_password --default-storage-engine=InnoDB --default-tmpdir=/tmp --log_error=FILE --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306 --skip-networking &> /var/log/mysqld.log & tail -f /var/log/mysqld.log & wait $! || echo "MySQL installation failed!" && exit 1;

在两台服务器上分别创建 MySQL 配置文件 ~/my.cnf,内容如下:

Master 服务器:

[mysqld]
datadir=//var//lib//mysql//master//data//home//root//data//haproxy//master//data//haproxy//master//data//haproxy//master//data//haproxy//master//data//haproxy//master//data//haproxy//master//data//haproxy//master//data//haproxy//master//data//haproxy//master//data//haproxy//master//data//haproxy//master//data//haproxy//master//data//haproxy//master//data//haproxy//master//data//haproxy//master//data//haproxy//master//data//haproxy//master//data//haproxy//master//data//haproxy//master//data//haproxy//master//data//haproxy//master//data//haproxy//master//data//haproxy//master//data//haproxy//master//data//haproxy//master//data//haproxy//master//data//haproxy//master//data//haproxy//master\
socket=\\
     //var\
     //lib\
     //mysql\
     //master
     //socket\
     //home\
     //root\
     //data
     //haproxy\
     //master\
     port=\
        3306\
     datadir=\
        \\
        //var\
        //lib\
        //mysql
        //master\
        //data\
        //home\
        //root
        //data\
        //haproxy\
        //master\
        //data\
        //haproxy
        //master\
        //data\
        //haproxy\
        //master\
        //data\
        //haproxy\
        //master\
        //data\
        //haproxy\
        //master\
        //data\
        //haproxy
0