美文网首页Techs
使用 tunasync 搭建开源镜像站

使用 tunasync 搭建开源镜像站

作者: 倒立摆 | 来源:发表于2018-12-13 22:40 被阅读0次

    Posted by WeYo. 转载请注明出处:http://weyo.me/pages/techs/how-to-make-a-mirror-site/

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

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

    1. 准备工作

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

    CPU: 8 核心 2.5GHz 以上
    内存: 64 GB以上
    硬盘: 3TB 以上
    网络: 千兆上下行带宽

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

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

    2. 同步源与架构选择

    在官方提供的源列表中选择最方便的同步源(最好是支持 rsync 的国内镜像源,但国内目前提供 rsync 服务的镜像源不多,以下是网络收集的部分 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 项目的目录结构如下:

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

    使用方法

    1. 完成上述第 1-4 章节环境准备工作;
    2. 将 tunasync 目录下的文件复制到服务器的 /home/mirrors/tunasync 目录中,本项目中已经配置好 CentOS,EPEL,Ubuntu,Pypi 四个镜像源的配置文件;
    3. 按照第 6 章节说明根据需要选择所需镜像启动 tunasync;
    4. 将 web 目录下的文件复制到服务器的 /mirrors 目录中,同样的,本项目中已经配置好 Web 页面中 CentOS,EPEL,Ubuntu,Pypi 四个镜像源以及相应的帮助文件,可根据需要增减;
    5. 配置并启动 apache 服务器;
    6. tunasync/scripts/updateTunasync.sh 文件配置成 crontab 定时任务,建议定时周期设置在 5-30min 之间。

    Reference & 致谢

    [1] 搭建开源镜像站
    [2] 清华大学开源软件镜像站
    [3] 网易开源镜像站
    [4] USTC open source software mirror

    相关文章

      网友评论

        本文标题:使用 tunasync 搭建开源镜像站

        本文链接:https://www.haomeiwen.com/subject/ahuihqtx.html