zoukankan      html  css  js  c++  java
  • 18.docker harbor高可用

    docker harbor 高可用

    我们简要说明了单机版本harbor的配置。然而这种单机部署显然无法满足在生产中需求,必须要保证应用的高可用性。

    目前有两种主流的方案来解决这个问题:

    • 双主复制
    • 多harbor实例共享后端存储

    双主复制

    harbor官方默认提供主从复制的方案来解决镜像同步问题,通过复制的方式,我们可以实时将测试环境harbor仓库的镜像同步到生产环境harbor,类似于如下流程:

    在实际生产运维的中,往往需要把镜像发布到几十或上百台集群节点上。这时,单个Registry已经无法满足大量节点的下载需求,因此要配置多个Registry实例做负载均衡。手工维护多个Registry实例上的镜像,将是十分繁琐的事情。Harbor可以支持一主多从的镜像发布模式,可以解决大规模镜像发布的难题:

    双主复制说明

    所谓的双主复制其实就是复用主从同步实现两个harbor节点之间的双向同步,来保证数据的一致性,然后在两台harbor前端顶一个负载均衡器将进来的请求分流到不同的实例中去,只要有一个实例中有了新的镜像,就是自动的同步复制到另外的的实例中去,这样实现了负载均衡,也避免了单点故障,在一定程度上实现了Harbor的高可用性:

    实现harbor高可用

    docker-分布式镜像仓库Harbor插图(10)

    Harbor支持基于策略的Docker镜像复制功能,这类似于MySQL的主从同步,其可以实现不同的数据中心、不同的运行环境之间同步镜像,并提供友好的管理界面,大大简化了实际运维中的镜像管理工作,已经有用很多互联网公司使用harbor搭建内网docker仓库的案例,并且还有实现了双向复制功能

    安装第二台harbor主机

    在第二台主机上安装部署好harbor,并登录系统

    docker-分布式镜像仓库Harbor插图(11)

    第二台harbor上新建项目

    参考第一台harbor服务器的项目名称,在第二台harbor服务器上新建与之同名的项目

    docker-分布式镜像仓库Harbor插图(12)

    第二台harbor上仓库管理中新建目标

    参考第一台主机新建复制(同步)目标信息

    docker-分布式镜像仓库Harbor插图(13)

    输入第一台harbor服务器上的用户信息

    docker-分布式镜像仓库Harbor插图(14)

    docker-分布式镜像仓库Harbor插图(15)

    第二台harbor上新建复制规则

    docker-分布式镜像仓库Harbor插图(16)
    docker-分布式镜像仓库Harbor插图(17)

    在第一台harbor主机上重复上面操作

    以上操作,只是实现了从10.0.0.1到10.0.102的单向同步,再执行下面操作,才实现双向同步

    docker-分布式镜像仓库Harbor插图(18)

    docker-分布式镜像仓库Harbor插图(19)

    确认同步成功

    在第二台harbor主机上可以查看到从第一台主机同步过来的镜像

    docker-分布式镜像仓库Harbor插图(20)

    也可以查看到同步日志

    docker-分布式镜像仓库Harbor插图(21)

    上传镜像观察是否可以双高同步
    [root@ubuntu1804 ~]#docker tag tomcat-web:app1 10.0.0.101/example/tomcat-web:app1
    [root@ubuntu1804 ~]#docker push 10.0.0.101/example/tomcat-web:app1
    [root@ubuntu1804 ~]#docker tag tomcat-web:app2 10.0.0.102/example/tomcat-web:app2
    [root@ubuntu1804 ~]#docker push 10.0.0.102/example/tomcat-web:app2
    

    docker-分布式镜像仓库Harbor插图(22)
    docker-分布式镜像仓库Harbor插图(23)

    删除镜像观察是否可自动同步

    docker-分布式镜像仓库Harbor插图(24)

    docker-分布式镜像仓库Harbor插图(25)

    docker-分布式镜像仓库Harbor插图(26)

    docker-分布式镜像仓库Harbor插图(27)

    多harbor实例共享后端存储

    方案说明

    共享后端存储算是一种比较标准的方案,就是多个Harbor实例共享同一个后端存储,任何一个实例持久化到存储的镜像,都可被其他实例中读取。通过前置LB进来的请求,可以分流到不同的实例中去处理,这样就实现了负载均衡,也避免了单点故障:

    这个方案在实际生产环境中部署需要考虑三个问题:

    1. 共享存储的选取,Harbor的后端存储目前支持AWS S3、Openstack Swift, Ceph等,在我们的实验环境里,就直接使用nfs
    2. Session在不同的实例上共享,这个现在其实已经不是问题了,在最新的harbor中,默认session会存放在redis中,我们只需要将redis独立出来即可。可以通过redis sentinel或者redis cluster等方式来保证redis的可用性。在我们的实验环境里,仍然使用单台redis
    3. Harbor多实例数据库问题,这个也只需要将harbor中的数据库拆出来独立部署即可。让多实例共用一个外部数据库,数据库的高可用也可以通过数据库的高可用方案保证。

    环境说明

    实验环境:

    ip role
    192.168.198.133 harbor
    192.168.198.135 harbor
    192.168.198.136 redis、mysql、nfs

    需要强调的是,我们的环境中,不包括负载均衡器的配置,请自行查阅负载均衡配置相关文档

    配置说明

    安装nfs

    # 安装nfs
    apt install nfs-kernel-server nfs-common
    
    # 编辑/etc/exports文件
    /data	*(rw,no_root_squash)
    
    chmod 777 -R /data
    
    systemctl start nfs-server
    

    安装redis和mysql

    这里我们就直接通过docker安装,docker-compose.yml文件内容如下:

    version: '3'
    services:
      mysql-server:
        hostname: mysql-server
        container_name: mysql-server
        image: mysql:5.7
        network_mode: host
        volumes:
          - /mysql57/data:/var/lib/mysql
        command: --character-set-server=utf8
        environment:
          MYSQL_ROOT_PASSWORD: 123456
      redis:
        hostname: redis-server
        container_name: redis-server
        image: redis:3
        network_mode: host
    

    启动:

    docker-compose up -d
    

    导入registry数据库

    配置好了mysql以后,还需要往mysql数据库中导入harbor registry库。我们安装了一个单机版harbor,启动了一个mysql,里面有一个registry数据库,直接导出来,然后再导入到新数据库中:

    # 导出数据库:
    
    docker exec -it harbor_db /bin/bash
    mysqldump -uroot -p --databases registry > registry.dump
    
    # 在宿主机上将registry.dump复制出来
    docker cp  harbor_db:/registry.dump ./
    
    # 将宿主机上的registry.dump复制到独立的mysql容器中
    
    docker cp ./registry.dump <mysql-server-container>:/registry.dump
    
    # 在独立的mysql容器将将registry数据库导入
    
    docker exec -it <mysql-server-container> /bin/bash
    
    mysql -uroot -p
    
    mysql> source /registry.dump
    

    配置harbor

    挂载nfs目录

    在harbor节点上挂载nfs目录:

    mount -t nfs 192.168.198.136:/data /data
    

    修改harbor.cfg配置

    在harbor节点上,下载好harbor的安装包,生成好自签名证书,修改prepare文件,可直接参考《企业级镜像管理系统Harbor》,不同的是,harbor.cfg文件需要修改数据库及redis配置如下:

    db_host = 192.168.198.136
    db_password = 123456
    db_port = 3306
    db_user = root
    redis_url = 192.168.198.136:6379
    

    修改docker-compose.yml配置

    与单机版harbor相比,集群配置不再需要启动mysql和redis,所以docker-compose.yml也需要作相应修改。事实上,在harbor的安装目录中,有个ha的目录,里面已经提供了我们需要的docker-compose.yml文件,只需要复制出来即可。实际上,在这个目录中,还提供了使用lvs作为负载均衡器时,keepalived的配置。

    cp ha/docker-compose.yml
    ./prepare
    ./install.sh
    
    

    在两个harbor节点上完成安装以后,我们可以通过绑定hosts到不同的节点来验证两个节点的负载均衡效果。

    https://www.cnblogs.com/wn1m/p/11284818.html
    https://zhuanlan.zhihu.com/p/112865546
    http://www.yunweipai.com/

  • 相关阅读:
    谷歌在外贸中的实战解析
    关于外贸淡季的几点看法
    如何打造完美报价单
    bbs
    你身上的所有光环,同样是套在你身上的枷锁
    Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一
    用C#生成随机中文汉字验证码的基本原理
    必须根据不同的数据内容来套用不同的编码或是译码函式,以便取得对应的字节或是字符串数据
    锁和多线程:5种锁介绍(三)
    锁和多线程:3种锁的使用(二)
  • 原文地址:https://www.cnblogs.com/Gmiaomiao/p/14265246.html
Copyright © 2011-2022 走看看