网站集群架构介绍与基础优化

集群架构

网站由来

  • 想法/需求—>开发程序app/网站
  • 网站/app运行环境—>运行在Linux中

一篇图解带你快速的了解Web历史_网站技术发展历史-优快云博客

集群

网站集群:一堆机器

通用网站集群架构

img

开发人员

image-20251016185537570

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

用户角度

image-20251016185639976

CDN

image-20251016190214039

CDN工作原理

  1. 用户向浏览器输入www.a.com这个域名,浏览器第一次发现本地没有dns环境(/etc/hosts也没有),则向网站的DNS服务器(管理该域名的权威服务器)请求
  2. 网站的DNS域名解析器设置了CNAME,指向了www.a.tbcdn.com,请求指向了CDN网络中的智能DNS负载均衡系统,
  3. 智能DNS负载均衡系统解析域名,把对应用户响应最快的IP节点(北京CDN节点)返回给用户
  4. 用户设备拿到 IP 2.2.2.2(对应北京节点设备,属于 CDN 边缘服务器)后,向该节点请求 www.a.com 的网页内容
  5. 如果北京CDN节点有缓存(比如其他北京用户已访问过,内容已被缓存),则直接将 “缓存的网页内容” 返回给用户,快速完成访问
  6. 如果北京节点无缓存,则会向源站请求内容。拿到内容后,会缓存到北京节点,再返回给用户。后续北京用户访问时,可直接从本地 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好处

  • 缓存网站集群的带宽压力
  • 智能调度系统,可以让用户就近访问,用户根据速度提高了
  • 能防御一些攻击

运维角度

image-20251016190703194

先通过 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)
AIDeepseek(自建,调取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`)。

它能把多台虚拟机分组隔离,模拟 “只有虚拟机之间通信” 的场景(比如测试集群、内网应用,又不想被外界网络干扰)

image-20251016215335486

链接克隆和完整克隆区别

本质区别

类型核心定义本质特点
链接克隆基于 “父虚拟机” 创建的 “增量复制”,仅保存 “克隆机与父机的差异数据”(如后续安装的软件、修改的配置)。依赖父机,共享父机的基础数据
完整克隆对 “父虚拟机” 进行 “完全复制”,克隆机包含父机的所有数据(系统、软件、配置等),与父机完全独立。不依赖父机,数据 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
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值