BBR、BBR2、BBRPLUS、FQ、CAKE如何选择

网上有不少BBR版本和测试文章,到底该选择哪个BBR是挺纠结。测试文章也都不严谨,弄个国外VPS+一键bbr脚本+一键测速脚本完事,这样测试结果肯定不准。VPS是虚拟机和共享带宽,本身性能就受到物理机资源分配的波动影响,以及VPS到本机这么远的不可控网络链接;一键测速脚本是点对点传输,而实际应用不管是网站还是提供什么服务,都是一对多,场景差别就很大。

较科学专业的文章,有:

BBR、BBR2、BBRPLUS、FQ、CAKE如何选择插图

拥塞控制算法

cubic

linux自带默认拥塞控制算法。

BBR

BBR(Bottleneck Bandwidth and Round-trip propagation time),是谷歌开发的一种TCP拥塞控制算法。简单粗暴的理解就是数据流量的交通管理:当公路不再塞车的时候,每辆车自然就能保持较快的车速了。

BBR2

谷歌未正式发布,仍处于预览版。TCP BBR v2 Alpha/Preview Release: https://github.com/google/bbr/tree/v2alpha

随着BBRv2的出现,Dropbox 已经在其Dropbox Edge Network上进行了试用。在这篇博客中深入讨论了BBRv2的实践,值得一读。

Evaluating BBRv2 on the Dropbox Edge Network

这篇文章的结论对于BBRv2有很高的评价,特摘录出来:

“在我们的测试中,BBRv2显示了以下特性:

  1. 对于网速较低的用户来说,带宽可以与CUBIC媲美。
  2. 对于网速较高的用户来说,带宽可以与BBRv1媲美。
  3. 丢包率比BBRv1低4倍;但仍然比CUBIC高2倍。
  4. 传输中的数据比BBRv1低3倍;但略低于CUBIC。
  5. RTTs较BBRv1低;但仍然比CUBIC高。
  6. 与BBRv1相比,RTT具有更高的公平性。

总的来说,BBRv2在BBRv1基础上有了很大的改进,而且在需要更高带宽的情况下,它更接近于成为Reno/CUBIC的完全替代品。添加实验性的ECN支持,我们甚至可以看到他可以成为Datacenter TCP (DCTCP)的完全替代者。”

https://aws.amazon.com/cn/blogs/china/talking-about-network-optimization-from-the-flow-control-algorithm/

BBRPLUS

CSDN 网友 dog250 针对原版 BBR 进行修改而来的加强版他的github最后更新是2021.08.21。

队列算法

pfifo_fast

linux系统自带默认先进先出队列算法。

CAKE

“CAKE (Common Applications Kept Enhanced) is a shaping queue discipline which uses both AQM and FQ. It combines COBALT, which is an AQM algorithm combining Codel and BLUE, a shaper which operates in deficit mode, and a variant of DRR for flow isolation.

https://portal.productboard.com/4khnb1asz4x5zdcj5edstax8/c/31-cake-and-fq-pie

“CAKE(Common Applications Kept Enhanced)是一种同时使用 AQM 和 FQ 的整形队列规则。它结合了 COBALT,COBALT 是一种结合了 Codel 和 BLUE 的 AQM 算法,一种以赤字模式运行的整形器,以及一种用于流隔离的 DRR 变体.

cake适合用在路由器上,会尽量抢占宽带,也会用队列系统帮路由器上的应用分配宽带,比如平衡下载与流媒体。

https://la4ji.blogspot.com/2020/12/xamod58-cakefq-pie.html

PIE

“Proportional Integral controller-Enhanced (PIE) is a control theoretic active queue management scheme. It is based on the proportional integral controller but aims to control delay.

The main design goals are

  • Low latency control
  • High link utilization
  • Simple implementation
  • Guaranteed stability and fast responsiveness”

https://portal.productboard.com/4khnb1asz4x5zdcj5edstax8/c/31-cake-and-fq-pie

“Proportional Integral controller-Enhanced (PIE) 是一种控制理论主动队列管理方案。它基于比例积分控制器,但旨在控制延迟。
主要设计目标是
低延迟控制
链路利用率高
简单实现
保证稳定性和快速响应”

FQ-PIE

FQ-PIE (Flow Queuing with Proportional Integral controller Enhanced) is a queuing discipline that combines Flow Queuing with the PIE AQM scheme. FQ-PIE uses a Jenkins hash function to classify incoming packets into different flows and is used to provide a fair share of the bandwidth to all the flows using the qdisc. Each such flow is managed by the PIE algorithm.

https://man7.org/linux/man-pages/man8/tc-fq_pie.8.html

FQ-PIE(Flow Queuing with Proportional Integral controller Enhanced)是一种将流队列与 PIE AQM 方案相结合的排队规则。 FQ-PIE 使用 Jenkins 哈希函数将传入的数据包分类到不同的流中,并用于为使用 qdisc 的所有流提供公平的带宽份额。每个这样的流都由 PIE 算法管理。

到底选哪个

追求稳定:BBR+FQ

追求性能:BBR2+FQ_PIE

CentOS 7 修改系统时间或时区

0x00 修改系统时间

安装在虚拟机上的CentOS7的时间分为系统时间和硬件时间。二者都修改,重启系统(init 6 )才会永久生效。

修改步骤如下

1.修改系统时间

查看当前系统时间

date

修改当前系统时间

date -s "2022-7-11 18:20:30“

 

2.修改硬件时间

查看硬件时间

hwclock --show

修改硬件时间

hwclock --set --date "2022-7-11 18:20:30"

同步系统时间和硬件时间

hwclock --hctosys

保存时钟

clock -w

重启系统(init 6)后便发现系统时间被修改了

 

0x01 修改时区

方法1

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

 

方法2

使用timedatectl命令

timedatectl list-timezones |grep Shanghai
timedatectl set-timezone Asia/Shanghai

 

CentOS 7 配置静态 IP 地址

在 CentOS 7 上配置静态 IP 地址需要编辑网络配置文件。请按照以下步骤进行操作:

  1. 打开终端或通过 SSH 连接到 CentOS 7 服务器。
  2. 使用文本编辑器打开网络配置文件。在 CentOS 7 上,网络配置文件位于 /etc/sysconfig/network-scripts/ 目录下,文件名通常以 ifcfg-ensX 的形式表示(X 为数字)。例如,编辑文件 ifcfg-ens33
    cd /etc/sysconfig/network-scripts/
    vi ifcfg-ens33
  3. 在编辑器中,您会看到类似以下的配置内容:
    TYPE=”Ethernet”
    PROXY_METHOD=”none”
    BROWSER_ONLY=”no”
    BOOTPROTO=”dhcp”
    DEFROUTE=”yes”
    IPV4_FAILURE_FATAL=”no”
    IPV6INIT=”yes”
    IPV6_AUTOCONF=”yes”
    IPV6_DEFROUTE=”yes”
    IPV6_FAILURE_FATAL=”no”
    IPV6_ADDR_GEN_MODE=”stable-privacy”
    NAME=”ens33”
    UUID=”xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”
  4. BOOTPROTO 的值从 dhcp 修改为 static,表示使用静态 IP 地址。在 BOOTPROTO 行下方添加以下配置项,以设置静态 IP 地址、子网掩码、网关地址和 DNS 服务器的值:
    IPADDR=”192.168.31.66”
    NETMASK=”255.255.255.0”
    GATEWAY=”192.168.31.1”
    DNS1=”8.8.8.8”
  5. 保存并关闭文件。在 vi 编辑器中,按下 Esc 键,然后输入 :wq 并按回车键保存退出。
  6. 重启网络服务使配置生效。在终端中执行以下命令:
    systemctl restart network
  7. 检查 IP 地址是否已生效。您可以使用以下命令之一来验证 IP 地址是否已设置为静态:
    ip addr show ens33 # 或者 ip addr show eth0(取决于您的网络接口名称)
  8. 如果一切正常,您应该能够看到您设置的静态 IP 地址已应用于相应的网络接口。
    请注意,这些步骤仅适用于 CentOS 7。如果您使用的是其他 Linux 发行版或操作系统,请参考相应的文档或手册进行配置。另外,在进行任何网络配置更改之前,请确保您具有足够的权限,并备份相关的网络配置文件以防意外情况发生。

DMIT 美西最便宜CN2 GIA套餐,1核1G/20G SSD/500M带宽/500G流量/年付$36.9

DMIT 美国洛杉矶CN2 GIA特惠VPS套餐补货,套餐全名:“PVM.LAX.Pro.WEE”,年付仅$36.9,是DMIT目前最便宜的美西CN2 GIA网络VPS主机,配置为:1核1G/10G SSD/500M带宽/500G流量/年付$36.9。

官方网站:https://www.dmit.io

PVM.LAX.Pro.WEE

  • CPU:1 vCPU(AMD EPYC 7002/7003)
  • 内存:1G
  • 硬盘:20G SSD
  • 流量:每月500GB流量
  • 速率:500Mbps
  • IP:1 IPv4 & 1 IPv6 /64
  • 价格:$36.9/年
  • 链接

PVM.LAX.Pro.MALIBU

  • CPU:1 vCPU(AMD EPYC 7002/7003)
  • 内存:1G
  • 硬盘:20G SSD(可增加)
  • 流量:每月1000GB流量
  • 速率:1Gbps
  • IP:1 IPv4 & 1 IPv6 /64
  • 价格:$49.9/年
  • 链接

PVM.LAX.Pro.PalmSpring

  • CPU:2 vCPU
  • 内存:2G
  • 硬盘:40G SSD
  • 流量:2000G/月
  • 带宽:2Gbps
  • IP:1*IPv4+ IPv6 /64
  • 价格:$39/季 $100/年
  • 链接

网络测试

  • 测试IP:154.17.6.1

 

PVM.LAX.EB.CORONA(新品)

  • CPU:1 vCPU(AMD EPYC 7002/7003/9004)
  • 内存:1G
  • 硬盘:20G SSD
  • 流量:1500GB/月 2000GB/月
  • 速率:1Gbps
  • IP:1 IPv4 & 1 IPv6 /64
  • 价格:$49.9/年
  • 链接

PVM.LAX.EB.FONTANA(新品)

  • CPU:2 vCPU(AMD EPYC 7002/7003/9004)
  • 内存:2G
  • 硬盘:40G SSD
  • 流量:2000GB/月 4000GB/月
  • 带宽:4Gbps
  • IP:1*IPv4+ IPv6 /64
  • 价格:$100/年
  • 链接

网络测试

  • 测试IP:154.17.226.2,2605:52c0:1:3:2c2a:59ff:fe05:65c2

Linux 服务器一键测试、测速脚本 SuperBench,支持CentOS 8

SuperBench是一个测试linux服务器性能的脚本,让你快速方便了解一台服务器的综合性能,支持硬件基本信息、流媒体解锁检测、磁盘IO检测、CPU性能测试、以及国内和国外网络测速、网络路由追踪。

使用:

代码语言:javascript
bash <(wget -qO- https://down.vpsaff.net/linux/speedtest/superbench.sh)或
wget -qO- https://down.vpsaff.net/linux/speedtest/superbench.sh | sudo bash

Hetzner 独服重装系统并配置 RAID 0

前言

Hetzner在购买的时候只显示硬盘默认是RAID 1模式,发了Ticket也没有回复我,无奈只好先开台机器尝试了。
买的芬兰机器,网络非常差,建议选德国的吧,可能会好点,但会贵一些。

安装

进入后台,点击Rescue选项卡,选择Linux64Bit,然后点击Activate rescue system

接着点击Reset选项卡,选择Execute an automatic hardware reset,然后点击Send,之后下面会显示一串英文,记录下登录密码即可。

此时系统会重启进入Rescue模式,用之前记录的密码登录后输入以下命令开始重装系统:

installimage

Hetaner_Install_Tool.png

选择自己需要安装的系统,点击OK下一步。
之后会出现一系列的确认问题,选择OK即可。

最后进入配置编辑页面,修改成如下即可:

  1. SWRAID 1 #默认即可不用修改
  2. SWRAIDLEVEL 0 #默认是1
  3. PART swap swap 32G #默认
  4. PART /boot ext3 512M #默认
  5. PART / ext4 all #修改成 all
  6. #刪除 PART /home ext4 all

改完,按Esc保存退出,执行reboot重启即可进入新系统。

自用VPS一键脚本工具箱,一个脚本搞定大部分需求

自用VPS一键脚本工具箱,一个脚本搞定大部分需求,废话不多说,上脚本

curl -fsSL https://raw.githubusercontent.com/eooce/ssh_tool/main/ssh_tool.sh -o ssh_tool.sh && chmod +x ssh_tool.sh && ./ssh_tool.sh

wget -qO ssh_tool.sh https://raw.githubusercontent.com/eooce/ssh_tool/main/ssh_tool.sh && chmod +x ssh_tool.sh && ./ssh_tool.sh

部分功能展示图如下,更多功能自行查看,最近会陆续添加更多实用功能,使用时自行更新脚本
自用VPS一键脚本工具箱,一个脚本搞定大部分需求插图

自用VPS一键脚本工具箱,一个脚本搞定大部分需求插图1

自用VPS一键脚本工具箱,一个脚本搞定大部分需求插图2

若提示curl或wget未找到,说明vps上未安装此依赖,安装后再运行即可,对应系统安装命令如下:

Ubuntu/Debian:apt-get install -y curl wget

Alpine:apk add curl wget

Fedora:dnf install -y curl wget

CentOS/Rocky/Almalinux/Oracle-linux/Amazon-linux:yum install -y curl wget

 

from:https://www.nodeseek.com/post-58421-1

Debian 12 / Ubuntu 24.04 安装 Nginx

Nginx (Engine X) 是一个高性能的 HTTP 和反向代理 Web 服务器(软件),它占有内存少,并发能力强,驱动了超过 1/3 的互联网网站。

在本文中,我们将介绍如何在 Debian 12 和 Ubuntu 24.04 系统上安装 Nginx。

准备

适用系统

本教程适用于以下 Linux 发行版:

  • Debian 12
  • Debian 11
  • Debian 10
  • Ubuntu 24.04
  • Ubuntu 22.04
  • Ubuntu 20.04

IDC 防火墙

一些服务器提供商可能为服务器预装了防火墙、有网络访问限制,例如国外的 Google Cloud,国内的阿里云、腾讯云等等,此类情况需要去管理面板放行 Nginx 暴露的端口 80、443。

系统

确保当前用户有 sudo 执行权限;且 80、443 端口没有被其它程序(如 Apache) 占用、或者防火墙工具(如 UFW)屏蔽。

安装 Nginx

1. 更新系统

运行以下命令更新一下系统,

apt update && apt upgrade

2. 安装 Nginx

Nginx 在 Debian / Ubuntu 的默认软件仓库中,可以使用 apt 一键安装,

apt install nginx

3. 检查 Nginx 运行状态

在安装完成后,系统会自动启动 Nginx,使用以下命令检查 Nginx 运行状态,

systemctl status nginx
Debian 12 / Ubuntu 24.04 安装 Nginx插图

表示 Nginx 安装成功。在浏览器输入、访问服务器 IP,

Debian 12 / Ubuntu 24.04 安装 Nginx插图1

会看到默认的 Nginx 欢迎页面,这个页面是 Nginx 自带的,用来告诉用户 Web 服务器已经正确运行。

Nginx 基础管理

下面介绍 Nginx 作为一个 Linux 系统上的软件,如何进行基础的管理。

停止 Nginx,

systemctl stop nginx

启动 Nginx,

systemctl start nginx

重启 Nginx,

systemctl restart nginx

重载配置,

systemctl reload nginx

默认情况下,服务器启动时会自动启动 Nginx。如果不希望这样,可以输入:

systemctl disable nginx

重新允许 Nginx 在启动时自动启动,

systemctl enable nginx

在实际使用的时候,修改配置后,使用重载配置或重启命令;Nginx 因为各种原因停止,使用启动命令,这些情况比较常见。

卸载 Nginx

首先停止正在运行中的 Nginx,

systemctl stop nginx

如果要删除 Nginx 服务,保留配置文件,运行

apt remove nginx

要删除 Nginx 服务以及配置文件,运行

apt purge nginx

删除与 Nginx 相关的依赖包,

apt autoremove

删除 Nginx 相关的文件或目录(如果存在),

rm -rf /etc/nginx /etc/nginx/

检查是否卸载完成,

nginx -v

aws linux命令合集

AWS (Amazon Web Services) 是亚马逊公司提供的一系列云计算服务。AWS Linux 是AWS基于Linux内核开发的操作系统。下面我将介绍一些常用的 AWS Linux 命令。

1. ls:列出当前目录下的文件和文件夹。
2. cd:切换目录。例如,cd /home 将进入 home 目录。
3. pwd:显示当前所在的目录。
4. mkdir:创建一个新目录。例如,mkdir newdir 将在当前目录下创建一个名为 newdir 的文件夹。
5. touch:创建一个新文件。例如,touch newfile 将在当前目录下创建一个名为 newfile 的文件。
6. cp:复制文件或文件夹。例如,cp file1 file2 将文件 file1 复制到 file2。
7. mv:移动文件或文件夹。例如,mv file1 file2 将文件 file1 移动到 file2。
8. rm:删除文件或文件夹。例如,rm file 将删除名为 file 的文件。
9. cat:显示文件的内容。例如,cat file 将显示名为 file 的文件的内容。
10. grep:在文件中查找指定的模式。例如,grep “pattern” file 将在文件中查找包含 pattern 的行。
11. chmod:修改文件的权限。例如,chmod 755 file 将文件 file 的权限设置为 rwxr-xr-x。
12. chown:修改文件的所有者。例如,chown user file 将文件 file 的所有者设置为 user。
13. top:显示系统的实时进程信息。
14. free:显示系统的内存使用情况。
15. df:显示系统的磁盘空间使用情况。

以上是一些常用的 AWS Linux 命令,它们可以帮助您在 AWS Linux 环境中进行文件和目录操作,以及查看系统的运行情况和资源使用情况。希望这些命令对您有所帮助!

AWS Linux是亚马逊网络服务(Amazon Web Services)推出的一种基于Linux操作系统的云服务器操作系统,专门用于在AWS云平台上运行和管理云服务器实例。以下是一些常用的AWS Linux命令:

1. ls:列出目录内容。可以使用不同的选项来显示文件和目录的详细信息,例如使用-l选项来显示更多信息,或使用-a选项来显示隐藏文件。

2. cd:切换目录。使用cd命令可以进入到指定目录或返回上一级目录。

3. pwd:显示当前工作目录的路径。

4. mkdir:创建目录。可以使用mkdir命令创建新的目录。

5. rm:删除文件或目录。可以使用rm命令删除指定的文件或目录。使用-r选项可以递归地删除目录。

6. cp:复制文件或目录。可以使用cp命令复制指定的文件或目录。使用-r选项可以递归地复制目录。

7. mv:移动文件或目录。可以使用mv命令将文件或目录移动到指定的位置。

8. touch:创建空文件或修改文件的访问和修改时间。

9. cat:显示文件内容。可以使用cat命令将文件的内容显示在终端上。

10. grep:搜索文件内容。可以使用grep命令搜索指定文件中的文本。

11. top:显示系统资源使用情况。top命令可以显示CPU、内存等资源的使用情况,以及正在运行的进程。

12. ps:显示进程信息。可以使用ps命令显示当前系统中运行的进程。

13. yum:包管理器。使用yum命令可以安装、更新和删除软件包。

14. systemctl:系统服务管理器。可以使用systemctl命令管理系统服务,如启动、停止和重启服务。

15. ssh:远程登录。可以使用ssh命令通过网络连接到远程服务器。

这只是AWS Linux中一些常用的基本命令,还有很多其他命令可以用于系统配置、网络管理、安全设置等方面。根据具体的需求和使用场景,还可以通过学习和实践来熟悉更多的AWS Linux命令。

 

AWSLinux是使用Amazon Web Services(AWS)构建和部署应用程序的一种操作系统。它是基于Amazon Machine Image(AMI)构建的,具有与AWS服务无缝集成的优势。通过使用AWSLinux,用户可以更轻松地管理和调度应用程序,提高应用程序的可靠性和性能。

AWSLinux具有很多强大的功能和命令,下面将介绍一些常用的AWSLinux命令,并且提供详细的操作流程。

1. ec2-run-instances

“`
ec2-run-instances
–key
–instance-type
–image-id
[–region ]
“`

这个命令用于启动一个EC2实例。在命令中,需要指定ssh_key(SSH密钥对的名称),instance_type(实例类型)和ami_id(AMI ID)。可选地,还可以指定region(实例所在的AWS区域)。

2. ec2-describe-instances

“`
ec2-describe-instances
[–region ]
“`

这个命令用于列出当前AWS账户下的所有EC2实例。在命令中,可以通过指定region来过滤只列出某个特定区域的实例。

3. ec2-start-instances

“`
ec2-start-instances

[–region ]
“`

这个命令用于启动一个或多个已停止的EC2实例。在命令中,需要指定instance_id(一个或多个实例的ID)。可选地,还可以指定region(实例所在的AWS区域)。

4. ec2-stop-instances

“`
ec2-stop-instances

[–region ]
“`

这个命令用于停止一个或多个运行中的EC2实例。在命令中,需要指定instance_id(一个或多个实例的ID)。可选地,还可以指定region(实例所在的AWS区域)。

5. ec2-terminate-instances

“`
ec2-terminate-instances

[–region ]
“`

这个命令用于终止一个或多个EC2实例。在命令中,需要指定instance_id(一个或多个实例的ID)。可选地,还可以指定region(实例所在的AWS区域)。

6. ec2-create-volume

“`
ec2-create-volume
–size
[–availability-zone ]
[–region ]
“`

这个命令用于创建一个新的EBS卷。在命令中,需要指定size(卷的大小,以GB为单位)。可选地,还可以指定availability_zone(卷所在的可用区域)和region(卷所在的AWS区域)。

7. ec2-describe-volumes

“`
ec2-describe-volumes
[–region ]
“`

这个命令用于列出当前AWS账户下的所有EBS卷。在命令中,可以通过指定region来过滤只列出某个特定区域的卷。

8. ec2-attach-volume

“`
ec2-attach-volume

–instance-id
–device
[–region ]
“`

这个命令用于将一个EBS卷附加到一个EC2实例。在命令中,需要指定volume_id(卷的ID),instance_id(实例的ID)和device(附加的设备名称)。可选地,还可以指定region(实例和卷所在的AWS区域)。

9. ec2-detach-volume

“`
ec2-detach-volume

[–region ]
“`

这个命令用于将一个附加到EC2实例的EBS卷从该实例上分离。在命令中,需要指定volume_id(卷的ID)。可选地,还可以指定region(卷所在的AWS区域)。

10. ec2-delete-volume

“`
ec2-delete-volume

[–region ]
“`

这个命令用于删除一个或多个EBS卷。在命令中,需要指定volume_id(一个或多个卷的ID)。可选地,还可以指定region(卷所在的AWS区域)。

以上是一些常用的AWSLinux命令及其操作流程,可以根据实际需求选择合适的命令进行操作。请注意,执行这些命令需要使用AWS凭证,并且需要正确配置AWS CLI才能正常运行。

CentOS7.9 搭建内部yum源服务器同步阿里yum源

环境说明:

1、企业内网需求:企业内部许多服务器是不能连接互联网,但每台centos主机安装软件包时都配置本地yum源很麻烦,也缺少第三方yum源,因此在内网搭建一台yum源服务器满足这一需求,同时网络层面策略只允许此yum源服务器每周日晚限时联网同步阿里云的yum源。

参考连接:http://blog.itpub.net/70004783/viewspace-2790196/

2、准备两台测试主机,一台用作yum源服务器(能连互联网),一台用作客户端。

3、系统版本:CentOS 7.9

 

实操步骤:

一、添加阿里云yum

备份原系统的repo

[root@yumserver ~]# mkdir /etc/yum.repos.d/backup
[root@yumserver ~]# mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup

添加阿里云yum源并缓存(Centos-7.repo是软件仓库配置文件,epel-7.repo是扩展源、提供额外的软件包)

[root@yumserver ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
[root@yumserver ~]# curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@yumserver ~]# yum makecache
[root@yumserver ~]# yum repolist

 二、安装相关软件

[root@yumserver ~]# yum install -y wget make cmake gcc gcc-c++ pcre-devel zlib-devel openssl openssl-devel httpd yum-utils createrepo

备注:

yum-utils:yum-utils是yum的工具包集合,reposync一个同步工具。
createrepo:createrepo是一个对rpm文件进行索引建立的工具,就是对指定目录下的rpm文件进行检索,把每个rpm文件的信息存储到指定的索引文件中,这样方便远程yum命令在安装更新时进行检索。
httpd:通过Apache软件提供web服务,也可以使用nginx。

三、同步阿里云yum源软件包到本地服务器指定目录/mirror(自定义目录)

创建存放软件包目录/mirror,(chown设置文件所有者和文件关联组,chmod控制用户对文件的权限)

[root@yumserver ~]# mkdir -p /mirror
[root@yumserver ~]# chown -R apache:apache /mirror
[root@yumserver ~]# chmod -R 755 /mirror

同步阿里云yum源软件包

###参数-n指下载最新软件包,-p指定目录,指定本地的源--repoid(如果不指定就同步本地服务器所有的源),下载过程比较久(10个小时左右)
[root@yumserver ~]# reposync -n --repoid=extras --repoid=updates --repoid=base --repoid=epel -p /mirror

[root@yumserver ~]# du -sh /mirror/*
9.0G    /mirror/base
16G     /mirror/epel
323M    /mirror/extras
3.3G    /mirror/updates

四、创建仓库索引

createrepo -po /mirror/base/ /mirror/base/
createrepo -po /mirror/extras/ /mirror/extras/
createrepo -po /mirror/updates/ /mirror/updates/
createrepo -po /mirror/epel/ /mirror/epel/

五、更新数据源

createrepo --update /mirror/base/
createrepo --update /mirror/extras/
createrepo --update /mirror/updates/
createrepo --update /mirror/epel/

六、启动并配置Apache服务

6.1、启动Apache(httpd)服务(如果没有httpd,需要yum install -y httpd 安装一下)

[root@yumserver ~]# systemctl start httpd
[root@yumserver ~]# systemctl enable httpd
[root@yumserver ~]# systemctl status httpd

6.2、系统防火墙放行80端口(apache服务使用的是80端口)

[root@yumserver ~]# firewall-cmd --permanent --zone=public --add-port=80/tcp
success
[root@yumserver ~]# firewall-cmd --reload
success

 备注:必要时可以运行 systemctl restart httpd 重启一下服务。

6.3、关闭selinux(SELINUX=disabled)

[root@yumserver ~]# vi /etc/selinux/config 

CentOS7.9 搭建内部yum源服务器同步阿里yum源插图

6.4、配置httpd.conf文件

[root@yumserver ~]# vi /etc/httpd/conf/httpd.conf
DocumentRoot "/mirror/"
<Directory "/mirror/">
    Options Indexes FollowSymLinks
    AllowOverride  None
    Order allow,deny
    Allow from all
    Require all granted
</Directory>

 注意:上面配置的httpd.conf文件,需要找到如下图DocumentRoot字样的行进行更改,而不是直接复制粘贴插入。

CentOS7.9 搭建内部yum源服务器同步阿里yum源插图1

6.5、修改web界面的 index.html 文件

###修改Apache默认首页index.html,直接复制粘贴执行
cat << EOF > /usr/share/httpd/noindex/index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CentOS 7 镜像</title>

<script>document.createElement("myHero")</script>
<style>
myHero {
        display: block;
        background-color: #ddd;
        padding: 10px;
        font-size: 20px;
} 
</style> 

</head>
<body>
    <h1>简介</h1>
    <hr>
    <p>CentOS,是基于 Red Hat Linux 提供的可自由使用源代码的企业级 Linux 发行版本,是一个稳定,可预测,可管理和可复制的免费企业级计算平台。</p>
    <hr>
    <br>
    <br>

        <h1>CentOS 7 配置内部YUM源</h1>
    <br>
        <h2>1、备份</h2>
        <myHero>mkdir /etc/yum.repos.d/backup</myHero>
        <myHero>mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/</myHero>
    <br>
        <h2>2、下载新的 CentOS-Base.repo 到 /etc/yum.repos.d/ </h2>
        <myHero>curl -o /etc/yum.repos.d/CentOS-Base.repo http://xx.xx.xx.xx/repo/CentOS-Base.repo</myHero>
    <br>
        <h2>3、运行 yum makecache 生成缓存</h2>
    <br>
        <h2>4、运行 yum repolist   查看已经生成缓存</h2>
    <br>
    <br>

</body>
</html>
EOF

注意: 上文中的 http://xx.xx.xx.xx 填写自身yum源服务器的ip地址。

七、编写yum源客户端配置文件

创建repo文件夹

[root@yumserver ~]# mkdir -p /mirror/repo/
###复制粘贴执行,注意:xx.xx.xx.xx需要更改为服务器ip地址。

[root@yumserver ~]# cat << EOF > /mirror/repo/CentOS-Base.repo

[base]
name=CentOS- Base - xx.xx.xx.xx
failovermethod=priority
baseurl=http://xx.xx.xx.xx/base/
enable=1
gpgcheck=0
 
#released updates 
[updates]
name=CentOS- Updates - xx.xx.xx.xx
failovermethod=priority
baseurl=http://xx.xx.xx.xx/updates/
enable=1
gpgcheck=0
 
#additional packages that may be useful
[extras]
name=CentOS- Extras - xx.xx.xx.xx
failovermethod=priority
baseurl=http://xx.xx.xx.xx/extras/
enable=1
gpgcheck=0
 
#additional packages that may be useful
[epel]
name=CentOS- Epel - xx.xx.xx.xx
failovermethod=priority
baseurl=http://xx.xx.xx.xx/epel/
enable=1
gpgcheck=0
EOF

八、客户端配置yum

登录客户端操作系统执行以下命令(注意:xx.xx.xx.xx为yum源服务器的ip地址)

[root@client ~]# mkdir /etc/yum.repos.d/backup/
[root@client ~]# mv /etc/yum.repos.d/* /etc/yum.repos.d/backup/
[root@client ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo http://xx.xx.xx.xx/repo/CentOS-Base.repo
[root@client ~]# yum makecache

用户也可以用浏览器访问 http://xx.xx.xx.xx 查看配置客户端yum源的方法

CentOS7.9 搭建内部yum源服务器同步阿里yum源插图2

 九 、设置定时同步yum源的任务

编辑脚本

[root@yumserver ~]# cat  /mirror/script/centos_yum_update.sh
#!/bin/bash
echo 'Updating Aliyum Source'
DATETIME=`date +%F_%T`
exec > /var/log/aliyumrepo_$DATETIME.log
reposync -np /mirror
if [ $? -eq 0 ];then
 createrepo --update /mirror/base
  createrepo --update /mirror/extras
   createrepo --update /mirror/updates
   createrepo --update /mirror/epel
    echo "SUCESS: $DATETIME aliyum_yum update successful"
    else
     echo "ERROR: $DATETIME aliyum_yum update failed"
    fi

添加定时任务,每周一凌晨1点执行

[root@yumserver ~]# crontab -l
0 1 * * 1 /bin/bash /mirror/script/centos_yum_update.sh

至此,结束。。。

 

问题:有时服务器端的yum源仓库索引没有更新成功。
手动更新:
[root@yumserver ~]# createrepo --update /mirror/base/
[root@yumserver ~]# createrepo --update /mirror/extras/
[root@yumserver ~]# createrepo --update /mirror/updates/
[root@yumserver ~]# createrepo --update /mirror/epel/