文章目录
集群架构
网站由来
- 想法/需求—>开发程序app/网站
- 网站/app运行环境—>运行在Linux中
一篇图解带你快速的了解Web历史_网站技术发展历史-优快云博客
集群
网站集群:一堆机器
通用网站集群架构

开发人员

开发人员编写代码后,先在开发测试、正式测试等 “多种测试环境” 中验证;测试通过的代码提交至 “发布平台集群”;再由发布平台将代码发送到服务器,最终实现 “网站更新”。
用户角度

CDN

CDN工作原理
- 用户向浏览器输入www.a.com这个域名,浏览器第一次发现本地没有dns环境(/etc/hosts也没有),则向网站的DNS服务器(管理该域名的权威服务器)请求
- 网站的DNS域名解析器设置了CNAME,指向了www.a.tbcdn.com,请求指向了CDN网络中的智能DNS负载均衡系统,
- 智能DNS负载均衡系统解析域名,把对应用户响应最快的IP节点(北京CDN节点)返回给用户
- 用户设备拿到 IP
2.2.2.2(对应北京节点设备,属于 CDN 边缘服务器)后,向该节点请求www.a.com的网页内容 - 如果北京CDN节点有缓存(比如其他北京用户已访问过,内容已被缓存),则直接将 “缓存的网页内容” 返回给用户,快速完成访问
- 如果北京节点无缓存,则会向源站请求内容。拿到内容后,会缓存到北京节点,再返回给用户。后续北京用户访问时,可直接从本地 CDN 节点获取,无需再 “回源”,大幅提升速度。
范例:CDN工作原理就近返回服务器地址
[root@kylinv10sp3-csq ~]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 54.252.183.4
[root@kylinv10sp3-csq ~]# ping -c1 www.jd.com
PING jd-abroad.cdn20.com (163.171.197.110) 56(84) bytes of data.
64 bytes from 163.171.197.110 (163.171.197.110): icmp_seq=1 ttl=128 time=331 ms
--- jd-abroad.cdn20.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 331.248/331.248/331.248/0.000 ms
[root@kylinv10sp3-csq ~]# vim /etc/resolv.conf
[root@kylinv10sp3-csq ~]# ping -c1 www.jd.com
PING wwwv6.jcloudimg.com (125.36.9.73) 56(84) bytes of data.
64 bytes from no-data (125.36.9.73): icmp_seq=1 ttl=128 time=6.45 ms
--- wwwv6.jcloudimg.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 6.448/6.448/6.448/0.000 ms
CDN好处
- 缓存网站集群的带宽压力
- 智能调度系统,可以让用户就近访问,用户根据速度提高了
- 能防御一些攻击
运维角度

先通过 DNS 解析定位 VPN / 堡垒机入口 IP,经防火墙过滤合规流量后,用 VPN 建立远程加密通道进入内部网络,再登录堡垒机完成二次认证与权限校验,最后通过堡垒机转发请求,合规访问目标服务器
网站集群架构(多维度)——可用的服务
开发维度
| 开发维度 | 软件服务 |
|---|---|
| 发布平台 | jenkins、argo |
用户维度
| 用户维度 | 服务 |
|---|---|
| DNS解析 | 云解析DNS |
| CDN | 云厂商的CDN产品(阿里、腾讯、华为) |
| 防火墙 | 硬件防火墙 firewalld/iptables/ufw 云产品防火墙:安全组 |
| 负载均衡 | 硬件负载均衡:F5 开源软件:nginx、lvs、haproxy 云产品 |
| web服务器(中间件) | 开源软件:nginx、tomcat、php、apache |
| 数据库缓存 | 开源软件:redis(首选)/memcached |
| 数据库 | 数据库: MySQL,PostgreSQL、MariaDB,Oracle(甲骨文) 国产数据库:高斯(opengause 华为) ob(oceanbase 案例),达梦,tidb |
| 存储服务 | 硬件:各种厂商都有.浪潮,华为 开源产品:NFS,ceph,minio |
运维维度
| 运维维度 | 服务 |
|---|---|
| 批量管理 | Ansible/Terraform |
| VPN | 硬件 开源软件:openvpn 云产品 |
| 堡垒机 | 硬件 开源产品:jumpserver 云产品 |
| 监控 | 硬件 开源产品:Zabbix,Grafana,Prometheus… 云产品 |
| 日志 | ELK(Elatc Stack)… |
| 安全与审计 | AWVS,Nessus扫描 |
| 大数据 | Hadoop系列 |
| 登录 | 统一登陆系统:AD(windows),OpenLDAP(Linux) |
| AI | Deepseek(自建,调取api接口),ChatGPT(API),ChatGLM |
综合架构模板机准备
模板机准备
- 创建全新虚拟机
- 2c2g
- 2块网卡(nat模式,lan网段172.16.1.0/24)
- 100G硬盘,手动分区(/boot、swap、/,3个分区即可)
Vmware虚拟机安装麒麟、ubuntu、Rocky并使用xshell远程连接_vmware虚拟机安装red hat-优快云博客
LAN区段设置
VMware 的 “LAN 区段(LAN Segment)” 是一种虚拟网络配置方式,核心作用是让多台虚拟机组成隔离的 “专属内网”
同一 LAN 区段内的虚拟机可以互相通信,但默认无法与宿主机(你的物理电脑)、外部网络(如互联网、公司局域网)交互,相当于把这些虚拟机 “关在一个独立的小局域网里”
LAN 区段没有 “自动分配 IP 的 DHCP 服务器”,因此要给虚拟机手动指定 IP 地址(需保证同一区段内的虚拟机 IP 在 “同一网段”,比如都设为172.16.1.xxx`)。
它能把多台虚拟机分组隔离,模拟 “只有虚拟机之间通信” 的场景(比如测试集群、内网应用,又不想被外界网络干扰)

链接克隆和完整克隆区别
本质区别
| 类型 | 核心定义 | 本质特点 |
|---|---|---|
| 链接克隆 | 基于 “父虚拟机” 创建的 “增量复制”,仅保存 “克隆机与父机的差异数据”(如后续安装的软件、修改的配置)。 | 依赖父机,共享父机的基础数据 |
| 完整克隆 | 对 “父虚拟机” 进行 “完全复制”,克隆机包含父机的所有数据(系统、软件、配置等),与父机完全独立。 | 不依赖父机,数据 100% 独立 |
关键差异对比
| 对比维度 | 链接克隆(Linked Clone) | 完整克隆(Full Clone) |
|---|---|---|
| 存储占用 | 极小(仅存差异数据)。例如:父机 100GB,克隆机仅占 5-20GB(取决于后续修改量)。 | 极大(与父机相当)。例如:父机 100GB,克隆机也占 100GB 左右(完整复制所有数据)。 |
| 创建速度 | 极快(仅生成差异文件),通常几十秒到几分钟。 | 极慢(完整复制所有数据),通常几分钟到几十分钟(取决于父机大小和硬盘速度)。 |
| 独立性 | 完全依赖父机:1. 父机删除 / 损坏 / 移动,克隆机直接无法使用;2. 克隆机不能单独迁移到其他 VMware 环境。 | 完全独立:1. 与父机无任何关联,父机删除 / 修改不影响克隆机;2. 可单独迁移到其他 VMware 环境(如复制到另一台电脑)。 |
| 数据安全性 | 较低:父机数据损坏,克隆机也会受影响;且克隆机的差异数据依赖父机基础数据,无法单独恢复。 | 较高:数据完全独立,克隆机损坏不影响父机,且可单独备份 / 恢复(如克隆机中毒,父机不受牵连)。 |
| 使用场景 | 适合 “临时、短期、多台相似虚拟机” 场景:教学 / 培训(给学生分配临时虚拟机,用完可删除);测试环境(快速创建多台测试机,共享父机基础配置)。 | 适合 “长期、稳定、需要独立环境” 场景:- 正式工作环境(如部署独立的服务器虚拟机);- 个性化配置(克隆机需单独安装软件、修改系统,且长期使用)。 |
模板机优化
(1)防火墙SELinux
#防火墙
systemctl disable --now firewalld
systemctl is-active firewalld.service
systemctl is-enabled firewalld.service
#SELinux
#麒麟系统,ubt已经关闭
setenforce 0
sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
(2)配置yum源
kylin
#kylin默认有自己的源能有,只用添加一个epel源
#配置base源
#curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
#1.增加epel源
curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
#2.安装常用工具
yum install -y vim tree wget bash-completion bash-completion-extras lrzsz net-tools sysstat iotop iftop htop unzip nc nmap telnet bc psmisc httpd-tools bind-utils nethogs expect ntpdate
yum install -y sl cowsay
ubuntu
#方法1
sed -i_bak "s/cn.archive.ubuntu.com/mirrors.aliyun.com/g" /etc/apt/sources.list
sed -i 's/security.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list
#更新索引
apt update
#方法2
cp /etc/apt/sources.list{,.bak}
cat >/etc/apt/sources.list<<EOF
deb https://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
# deb https://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
# deb-src https://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
EOF
#更新索引
apt update
(3)ssh远程连接加速
关闭ssh远程连接反向解析功能,加速ssh远程连接
修改ssh服务端配置文件
#1.注释掉已有的配置
sed -i '/^GSSAPIAuthentication/s@^@#@g' /etc/ssh/sshd_config
#2.关闭对应功能
cat >>/etc/ssh/sshd_config<<EOF
UseDNS no
GSSAPIAuthentication no
#关闭dns反向解析 ip-->域名
EOF
#3.重启sshd
systemctl restart sshd
#4.检查
egrep '^(GSSAPIAuthentication|UseDNS)' /etc/ssh/sshd_config
结果有2个no即可.
(4)配置定时时间同步
cat >>/etc/crontab<<EOF
*/3 * * * * /sbin/ntpdate ntp.aliyun.com >/dev/null 2>&1
EOF
(5)配置命令行颜色
#kylin
echo "export PS1='[\[\e[34;1m\]\u@\[\e[0m\]\[\e[32;1m\]\H\[\e[0m\]\[\e[31;1m\] \w\[\e[0m\]]\\$ '">> /etc/profile
#ubuntu
echo "export PS1='[\[\e[34;1m\]\u@\[\e[0m\]\[\e[32;1m\]\H\[\e[0m\]\[\e[31;1m\] \w\[\e[0m\]]\\$ '">> ~/.bashrc
(6)写个快速修改主机名和ip的脚本
mkdir -p /server/scripts/
cat > /server/scripts/modify_ip_hostname.sh <<'EOF'
#!/bin/bash
##############################################################
# File Name:modify_ip_hostname.sh
# Version:V1.0
# Author:csq
# Organization: www.chenshiquan.xyz
# Desc:
##############################################################
host_name=$1 #获取主机名
ip=$2 #获取IP
#判断/etc/release是否存在
check_os_file (){
os=/etc/os-release
if [ -f $os ];then
echo "已经初始化这个文件"
source /etc/os-release
else
echo "没有${os}文件"
fi
}
#判断参数
judge_args(){
if [ $# -ne 2 ];then
if [ -z $ip ] && [ -z $host_name ];then
echo "help: $0 hostname ip"
exit 1
fi
else
echo "help: $0 hostname ip"
exit 1
fi
}
#修改主机名
modify_hostname(){
if hostnamectl set-hostname $host_name;then
echo "modify host ok"
else
echo "modify host not ok"
exit 1
fi
}
#修改网卡
modify_ip(){
#判断输入IP的网段
if [ "${ip%%.*}" = "10" ];then
case $ID in
kylin|rocky|centos )
nmcli connection modify ens33 connection.autoconnect yes ipv4.method manual ipv4.addresses $ip/24 ipv4.gateway 10.0.0.2 ipv4.dns 223.6.6.6
nmcli connection down ens33
nmcli connection up ens33
;;
ubuntu )
ubuntu_net_file="/etc/netplan/00-installer-config.yaml"
ip_ens33=`hostname -I | awk '{print $1}'`
sed -i "s/${ip_ens33}/${ip}/g" ${ubuntu_net_file}
netplan apply
;;
* )
echo "not system"
;;
esac
elif [ "${ip%%.*}" = "172" ];then
case $ID in
kylin|rocky|centos )
nmcli connection modify ens34 connection.autoconnect yes ipv4.method manual ipv4.addresses $ip/24
nmcli connection down ens34
nmcli connection up ens34
;;
ubuntu )
ubuntu_net_file="/etc/netplan/00-installer-config.yaml"
ip_ens34=`hostname -I | awk '{print $2}'`
sed -i "s/${ip_ens34}/${ip}/g" ${ubuntu_net_file}
netplan apply
;;
esac
else
echo "not IP"
exit 1
fi
#选择系统修改网卡
}
main(){
judge_args
check_os_file
modify_hostname
modify_ip
}
main $*
EOF
#配置脚本命令行运行
chmod +x /server/scripts/modify_ip_hostname.sh
mv /server/scripts/{modify_ip_hostname.sh,modify_ip_hostname}
ln -s /server/scripts/modify_ip_hostname /bin/
(7)host解析
根据需求配置
ip 别名,别名...
(8)配置别名
#1.写入别名到/etc/profile中
alias rm='echo pls do not use rm'
#2.回收站别名
cat 07.recyle-rm.sh
#!/bin/bash
##############################################################
# File Name:07.recyle-rm.sh
# Version:V1.0
# Author:oldboy csq
# Desc:
##############################################################
#1.vars
files="$@"
dir=/recyle/
#2.判断
if [ $# -eq 0 ];then
echo "Help: $0 file dir ...."
exit
fi
#3.创建临时目录
#后期可以加入判断 目录不存在则创建
mkdir -p $dir
tmp_dir=`mktemp -d -p ${dir}`
#4.把文件,目录...移动到临时目录
#这里未来可以加入更多的判断.
mv -t ${tmp_dir} ${files}
#5.文件,目录已经移动到回收站
echo "文件,目录已经移动到回收站:${tmp_dir}"
alias rm='bash /server/scripts/07.recyle-rm.sh'
#2.注释掉已有的rm别名
sed -i '/rm/s@^@#@g' ~/.bashrc
sed -i 's@alias.*rm@#&@g' ~/.bashrc
cat >>/etc/profile<<EOF
alias grep='grep --color=auto'
alias egrep='egrep --color=auto'
EOF
#3.重新登录系统检查(ctrl + D)
(9)tmp,kdump
关闭kdump
占用系统内存1G
#1.命令关闭
systemctl disable --now kdump
#2.修改启动配置文件
sed -i 's#crashkernel=1024M,high##g' /boot/grub2/grub.cfg
#3.重启linux系统
reboot
#4.查看内存
free -h
tmpfs处理
#1.命令关闭
systemctl mask tmp.mount
#2.取消挂载
umount /tmp
#3.重启检查结果
(10)vimrc
cat >> /etc/vimrc << 'EOF'
set ignorecase
autocmd BufNewFile *.py,*.cc,*.sh,*.java,*.bash exec ":call SetTitle()"
func SetTitle()
if expand("%:e") =~ 'sh\|bash'
call setline(1, "#!/bin/bash")
call setline(2,"##############################################################")
call setline(3, "# File Name:".expand("%"))
call setline(4, "# Version:V1.0")
call setline(5, "# Author:csq")
call setline(6, "# Organization: www.chenshiquan.xyz")
call setline(7, "# Desc:")
call setline(8,"##############################################################")
endif
endfunc
EOF
1141

被折叠的 条评论
为什么被折叠?



