使用 tunasync 搭建开源镜像站

栏目: 服务器 · Apache · 发布时间: 5年前

内容简介:公司的企业私有云平台建立之后,为了便于云主机操作系统与软件快速更新,需要搭建企业内网的开源镜像站。调研了国内各大开源镜像站点的技术之后,最终决定使用清华大学开源软件镜像站开发的镜像管理器本文介绍了从0开始搭建一个内网开源镜像站并为用户提供 web 访问服务的全过程,希望对有构建内网镜像站服务需求的同学有所帮助。镜像站需要一台服务器,如果有条件,建议准备一台专用的X86物理服务器作为镜像站的服务器。服务器推荐配置:

公司的企业私有云平台建立之后,为了便于云主机操作系统与软件快速更新,需要搭建企业内网的开源镜像站。调研了国内各大开源镜像站点的技术之后,最终决定使用清华大学开源软件镜像站开发的镜像管理器 tunasync 来构建云平台的软件镜像服务,毕竟使用成熟的镜像管理器比从头造轮子还是方便了许多,镜像站不是云的核心服务也不需要投入太多人力去做开发。

本文介绍了从0开始搭建一个内网开源镜像站并为用户提供 web 访问服务的全过程,希望对有构建内网镜像站服务需求的同学有所帮助。

1. 准备工作

镜像站需要一台服务器,如果有条件,建议准备一台专用的X86物理服务器作为镜像站的服务器。服务器推荐配置:

CPU: 8 核心 2.5GHz 以上

内存: 64 GB以上

硬盘: 3TB 以上

网络: 千兆上行带宽及以上

当然,如果条件不具备,以上配置可以无视,选择自己最好配置的机器即可,毕竟服务器配置还是取决于最终用户的需求。

特别说要说明的是,硬盘大小要求必须超过需要同步的源文件大小,比如需要同时同步 CentOS 与 Ubuntu,就需要准备一块 1.6T 以上大小的硬盘。每个镜像的具体大小可以在清华大学开源软件镜像站 同步状态 页面查到。

2. 同步源与架构选择

在官方提供的源列表中选择最方便的同步源(支持rsync的国内镜像源)。 Ubuntu 源列表: https://launchpad.net/ubuntu/+archivemirrors

rsync://mirrors.shuosc.org/ubuntu/
rsync://mirrors.sohu.com/ubuntu/
rsync://mirrors.tuna.tsinghua.edu.cn/ubuntu/
rsync://mirrors.ustc.edu.cn/ubuntu/
rsync://mirrors.yun-idc.com/ubuntu/

CentOS 源列表: https://www.centos.org/download/mirrors/

rsync://mirrors.tuna.tsinghua.edu.cn/centos/
rsync://mirror.es.its.nyu.edu/centos/
rsync://centos.sonn.com/CentOS/

EPEL 源列表: https://admin.fedoraproject.org/mirrormanager/mirrors/EPEL

rsync://mirrors.yun-idc.com/epel
rsync://rsync.mirrors.ustc.edu.cn/epel

3. 同步工具

同步原理是使用 rsync 做增量同步。“ 搭建开源镜像站 ”一文介绍了几种同步工具,经过验证,还是 清华大学开源软件镜像站 开发的 tunasync 最方便易用,所以这里使用 tunasync 来做同步。

环境与配置

tunasync 使用 Golang 开发,如果使用项目源码编译程序,需要配置 Golang 环境。

tunasync 项目提供预编译版程序,为了简化操作(偷懒),可以直接从 Github releases 下载使用预编译版本。

4. 系统配置

在操作系统中做如下配置初始化镜像服务器环境。

创建用户及用户组

groupadd -g 2001 mirrorgroup
useradd -u 2101 -g mirrorgroup mirrors
passwd mirrors

注意,以下所有操作如无特殊声明均使用mirrors用户。

建立应用及数据目录

建立程序目录:

mkdir /home/mirrors/tunasync
mkdir /home/mirrors/tunasync/conf
mkdir /home/mirrors/tunasync/db

建立镜像数据目录(使用root用户创建):

mkdir /mirrors

修改数据目录用户(使用root用户):

chown -R mirrors:mirrorgroup /mirrors

部署 tunasync

下载 tunasync-linux-bin.tar.gz 到 /home/mirrors/tunasync 目录,随后解压缩,生成 tunasync 可执行文件。

配置环境变量

编辑 ~/.bash_profile 文件,增加 TUNAPATH:

TUNAPATH=/home/mirrors/tunasync
PATH=$PATH:$TUNAPATH

并执行

source ~/.bash_profile

使得环境变量生效。

5. 同步应用配置

接下来就是最关键的步骤,配置 tunasync 的同步服务端与客户端。为便于操作管理,tunasync 的所有配置文件统一放置在 /home/mirrors/tunasync/conf/ 目录下。

manager 配置

创建服务端配置文件 /home/mirrors/tunasync/conf/manager.conf ,内容如下:

debug = false

[server]
addr = "127.0.0.1"
port = 14242
ssl_cert = ""
ssl_key = ""

[files]
db_type = "bolt"
db_file = "/home/mirrors/tunasync/db/manager.db"
ca_cert = ""

配置说明

  • port:监听端口,由于我下载的预编译版 tunasync 的一个小 bug,这里的 port 需固定配置为 14242

  • ssl_cert与ssl_key:ssl 配置,不需要 ssl 的同学不用配置

  • db_file:数据库文件,目前统一放在 /home/mirrors/tunasync/db/ 目录

worker 配置

根据需要创建需同步的镜像配置文件。以 CentOS 镜像为例,同步 CentOS 需要创建 /home/mirrors/tunasync/conf/worker-centos.conf ,文件内容如下:

[global]
name = "centos_worker"
log_dir = "/mirrors/log/tunasync/{{.Name}}"
mirror_dir = "/mirrors"
concurrent = 10
interval = 1440

[manager]
api_base = "http://localhost:14242"
token = "some_token"
ca_cert = ""

[cgroup]
enable = false
base_path = "/sys/fs/cgroup"
group = "tunasync"

[server]
hostname = "localhost"
listen_addr = "127.0.0.1"
listen_port = 16010
ssl_cert = ""
ssl_key = ""

[[mirrors]]
name = "centos"
provider = "rsync"
upstream = "rsync://mirrors.tuna.tsinghua.edu.cn/centos/"
use_ipv6 = false

配置说明

  • global name:worker 进程名称,用于程序识别

  • log_dir:tunasync 的日志路径

  • mirror_dir:镜像下载地址

  • concurrent:并发线程数

  • interval:rsync 同步周期,以分钟为单位

  • api_base:manager 地址,注意此处需与 manager 所在服务器配置保持一致

  • server listen_port:该 worker 自身的监听端口,如果同一台服务器上有多个 worker,各个 worker 的配置文件中务必配置不同端口

  • mirrors name:镜像名称,tunasync 会在镜像根目录下建立一个该名称的目录用于下载镜像

  • upstream:同步地址,注意,参数最后需要有“/”,否则启动 tunasync 时会报错

6. 启动同步应用

启动 tunasync 需开启 manager 进程与 worker 进程,先启动 manager,后启动 worker。为了便于监控系统进程情况,建立 /mirrors/log/plog/ 目录,所有进程的工作日志在该目录中(注意,此处日志为系统终端输出日志,与 tunasync 自身工作日志不同)。同样的,以下命令由 mirrors 用户操作。

  • 开启manager服务(后台进程):
tunasync manager --config /home/mirrors/tunasync/conf/manager.conf >> /mirrors/log/plog/manager.log &
  • 开启 worker 服务(根据需要同步的镜像开启,这里以 CentOS 为例):
tunasync worker --config /home/mirrors/tunasync/conf/worker-centos.conf >> /mirrors/log/plog/worker-centos.log &

7. 提供 http 服务

镜像下载完成之后可以为内网用户开放 web 访问服务。理论上可以根据需要提供各种 ftp/http/rsync 服务,不过从用户友好性角度考虑,这里提供最常见的 http 服务。

http 服务需要搭建 apache 服务器,可能有些同学不了解 apache 的操作配置,这里也一并介绍下 apache 的搭建过程(基于 CentOS 7 环境),熟悉 apache 的同学可以跳过本章节。

7.1 配置 yum 源

/etc/yum.repos.d 目录下,备份 CentOS-Base.repo,随后下载某个源服务器的 repo 文件(这里以网易的源为例)

mv CentOS-Base.repo CentOS-Base.repo.bak
mv CentOS-Media.repo CentOS-Media.repo.bak
wget http://mirrors.163.com/.help/CentOS7-Base-163.repo

随后运行以下命令生成yum缓存

yum clean all
yum makecache

7.2 安装 apache 服务器

运行 yum install httpd 安装 apache。

7.3 配置apache服务器

编辑 /etc/httpd/conf/httpd.conf 文件,将web目录指向提供的镜像目录(这里以“/mirrors”目录为例。在 httpd.conf 中修改以下配置内容:

DocumentRoot "/mirrors"

添加目录访问权限:

<Directory "/mirrors">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

并根据需要补充 index.html 和配置的 web 文件到 /mirrors 目录。

7.4 防火墙配置

CentOS 7 系统打开http服务端口:

firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --reload

7.5 配置访问权限

镜像目录权限设置(DocumentRoot 参数对应的所有层级目录均设置为 755 权限)

chmod 755 /mirrors

SELINUX权限设置

chcon -R -t httpd_sys_content_t /home/mirrors/mirror/

7.6 设置启动项

开启 apache 服务器并设置开机启动项

systemctl start httpd.service
systemctl enable httpd.service

个人网易开源镜像站的样式基础上创建了一个简单的 web 程序,大家可以在 Github/weyo/mirrors 上下载使用(所有 web 文件放到 /mirrors 目录即可)。

至此,同步服务以及 web 访问服务全部搭建完成,内网的小伙伴们可以通过浏览器访问镜像站了 http://服务器IP/

8. 运行维护

tunasync 还提供了一个管理工具 tunasynctl,可以用于对镜像服务做更多维度的管理。

  • 更新镜像信息
tunasynctl set-size -w <worker-id> <mirror> <size>
  • 获取任务状态信息并保存为 json 文件
wget -c http://localhost:14242/jobs -O /mirrors/jobs.json -o /mirrors/log/plog/wget.log

以上任务可以整合为crontab定时任务,并同步到 web 前端页面中。

9. mirrors 项目说明

以上镜像站搭建过程中所使用的脚本、配置、html 文件等源码已经整合到 Github 的 mirrors 项目中,可以直接应用该项目文件搭建镜像站。该项目目录结构如下:

mirrors
├─ ─ ─ tunasync              # tunasync 相关文件
│       ├─ ─ conf            # tunasync 配置文件
│       └─ ─ scripts         # 用于获取同步状态的定时脚本
└─ ─ ─ web                   # web 文件
        ├─ ─ index.html
        ├─ ─ .help           # 帮助文件
        └─ ─ .resource       # css/img/js 等资源文件
               ├─ css
               ├─ img
               └─ js

使用方法

/home/mirrors/tunasync
/mirrors
tunasync/scripts/updateTunasync.sh

以上是关于镜像站搭建的全部内容,关于镜像站搭建的问题欢迎感兴趣的同学交流反馈,最后,特别感谢以下站点为本文提供的 工具 或思路或方法,Thanks!

Reference & 致谢

[1] 搭建开源镜像站

[2] 清华大学开源软件镜像站

[3] 网易开源镜像站

[4] USTC open source software mirror


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Lean Analytics

Lean Analytics

Alistair Croll、Benjamin Yoskovitz / O'Reilly Media / 2013-3-18 / USD 29.99

If you're involved with a startup, analytics help you find your way to the right product and market before the money runs out. But with a flood of information available, where do you start? This book ......一起来看看 《Lean Analytics》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具