Dragonfly安装部署文档
Dragonfly 作为龙蜥社区的镜像加速标准解决方案,是一款基于 P2P 的智能镜像和文件分发工具。它旨在提高大规模文件传输的效率和速率,最大限度地利用网络带宽。在应用分发、缓存分发、日志分发和镜像分发等领域被大规模使用。
现阶段 Dragonfly 基于 Dragonfly1.x 演进而来,在保持 Dragonfly1.x 原有核心能力的基础上,Dragonfly 在系统架构设计、产品能力、使用场景等几大方向上进行了全面升级。
Dragonfly 架构主要分为三部分 Manager、Scheduler、Seed Peer 以及 Peer 各司其职组成 P2P 下载网络,Dfdaemon 可以作为 Seed Peer 和 Peer。详细内容可以参考架构文档(链接见文末),下面是各模块功能:
Manager:维护各 P2P 集群的关联关系、动态配置管理、用户态以及权限管理等功能。也包含了前端控制台,方便用户进行可视化操作集群;
Scheduler:为下载节点选择最优下载父节点。异常情况控制 Dfdaemon 回源。
Peer:通过 Dfdaemon 部署,基于 C/S 架构提供 dfget 命令行下载工具,以及 dfget daemon 运行守护进程,提供任务下载能力。
Dragonfly github地址:https://github.com/dragonflyoss/Dragonfly2
Dragonfly技术架构图
本文介绍如何以docker的方式部署Dragonfly,所需环境:linux,docker,3台机器部署如下节点
192.168.197.140 部署manager、scheduler、seed peer
192.168.197.151 部署dfdaemon
192.168.197.152 部署dfdaemon
以上三台机器都准备有docker环境,且防火墙关闭
docker脚本准备
官方文档准备的是docker-compose运行环境的脚本,且是将所有服务部署在一台机器上,现在需要去github上找到脚本,转为docker run命令脚本来分开部署。
脚本位置:https://github.com/dragonflyoss/Dragonfly2/tree/main/deploy/docker-compose
在192.168.197.140上部署manager、scheduler等
下载manager、scheduler等配置文件
从github deploy/docker-compose/temlate/ 下载配置文件,并重命名
[root@harbor ~]# mkdir -p /etc/dragonfly/config
[root@harbor config]# cd /etc/dragonfly/config
[root@harbor config]# mv manager.template.yaml /etc/dragonfly/config/manager.yaml
[root@harbor config]# mv scheduler.template.yaml /etc/dragonfly/config/scheduler.yaml
[root@harbor config]# mv seed-peer.template.yaml /etc/dragonfly/config/seed-peer.yaml
docker启动redis、mysql
# 启动docker
[root@harbor config]# docker run -d --name dragonfly-redis --restart=always -p 6379:6379 redis:6-alpine --requirepass "dragonfly"
# 启动mysql
[root@harbor config]# docker run -d --name dragonfly-mysql --restart=always -p 3306:3306 --env MARIADB_USER="dragonfly" --env MARIADB_PASSWORD="dragonfly" --env MARIADB_DATABASE="manager" --env MARIADB_ALLOW_EMPTY_ROOT_PASSWORD="yes" mariadb:10.6
# 检查redis、mysql等容器是否成功启动
[root@harbor config]# docker ps | grep redis
[root@harbor config]# docker ps | grep mysql
1、在启动redis和mysql前请确保6379和3306端口没被占用
2、如果采用现有的mysql,则需要初始化mysql数据库、表,否则后续manager无法启动
docker 启动manager
编辑manager.yaml配置,正确填写redis、mysql相关配置,另外部署manager console会占用8080端口,确保8080端口没被占用或者修改rest的8080端口
[root@harbor config]# vim /etc/dragonfly/config/manager.yaml
[root@harbor config]# docker run -d --name dragonfly-manager --restart=always --net=host -v /tmp/log/dragonfly:/var/log/dragonfly -v /etc/dragonfly/config/manager.yaml:/etc/dragonfly/manager.yaml dragonflyoss/manager:latest
# 检查manager是否成功部署
[root@harbor config]# docker ps | grep manager
# 查看日志
[root@harbor config]# docker logs <manager_container_id>
manager部署成功后,访问http://192.168.197.140:8080 可以登录console 账号密码:root/dragonfly,此步骤需要关闭防火墙
docker启动scheduler
编辑scheduler.yaml配置,正确配置redis、manager等配置,确保相关端口没被占用
[root@harbor config]# vim /etc/dragonfly/config/scheduler.yaml
# 启动scheduler
[root@harbor config]# docker run -d --name dragonfly-scheduler --restart=always --net=host -v /tmp/log/dragonfly:/var/log/dragonfly -v /etc/dragonfly/config/scheduler.yaml:/etc/dragonfly/scheduler.yaml dragonflyoss/scheduler:latest
# 检查scheduler是否正确启动
[root@harbor config]# docker ps | grep scheduler
# 查看日志
[root@harbor config]# docker logs <scheduler_container_id>
docker启动seed-peer
编辑seed-peer.yaml配置,正确配置manager等配置,确保相关端口没被占用
[root@harbor config]# vim /etc/dragonfly/config/seed-peer.yaml
# 启动seed-peer
[root@harbor config]# docker run -d --name dragonfly-seed-peer --restart=always --net=host -v /tmp/log/dragonfly:/var/log/dragonfly -v /etc/dragonfly/config/seed-peer.yaml:/etc/dragonfly/dfget.yaml dragonflyoss/dfdaemon:latest
# 检查seed-peer是否正确启动
[root@harbor config]# docker ps | grep seed-peer
# 查看日志
[root@harbor config]# docker logs <seed-peer_container_id>
以上操作都是192.168.197.140节点上完成
接下来在其他节点配置peer,即dfdaemon
以下操作分别在192.168.197.151、192.168.197.152上执行
下载dfmaemon配置
从github deploy/docker-compose/temlate/ 下载配置文件,并重命名
[root@harbor ~]# mkdir -p /etc/dragonfly/config
[root@harbor config]# cd /etc/dragonfly/config
[root@harbor config]# mv dfget.template.yaml /etc/dragonfly/config/dfget.yaml
docker启动dfmaemon
编辑dfget.yaml配置,正确填写manager和host相关的配置以及确保相关端口没被占用
[root@node1 config]# vim /etc/dragonfly/config/dfget.yaml
# 启动dfdaemon
[root@harbor config]# docker run -d --name dragonfly-dfdaemon --restart=always --net=host -v /tmp/log/dragonfly:/var/log/dragonfly -v /etc/dragonfly/config/dfget.yaml:/etc/dragonfly/dfget.yaml dragonflyoss/dfdaemon:latest
# 检查是否正确启动
[root@harbor config]# docker ps | grep dfdaemon
验证
验证从dfmaemon节点拉取镜像是否经过了dragonfly,编辑/etc/docker/daemon.json文件新增如下配置
[root@node1 config]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["http://127.0.0.1:65001"]
}
重启docker服务
[root@node1 config]# systemctl restart docker
拉取镜像
[root@node1 config]# docker pull nginx:latest
# 查看日志
[root@node1 config]# tail -f /tmp/log/dragonfly/daemon/core.log -n 500
如果有类似如下格式的日志,则证明是通过dragonfly来拉取镜像的
{"level":"debug","ts":"2023-02-10 08:00:42.529","caller":"transport/transport.go:202","msg":"round trip directly, method: GET, url: https://index.docker.io/v2/library/nginx/manifests/latest"}
{"level":"debug","ts":"2023-02-10 08:00:43.767","caller":"transport/transport.go:202","msg":"round trip directly, method: GET, url: https://index.docker.io/v2/library/nginx/manifests/sha256:7f797701ded5055676d656f11071f84e2888548a2e7ed12a4977c28ef6114b17"}
{"level":"debug","ts":"2023-02-10 08:00:44.800","caller":"transport/transport.go:198","msg":"round trip with dragonfly: https://index.docker.io/v2/library/nginx/blobs/sha256:3f8a00f137a0d2c8a2163a09901e28e2471999fde4efc2f9570b91f1c30acf94"