第二阶段综合架构准备(day32)

安装centos7用于测试

系统语言英文
选择常用的软件包(最小安装即可,软件包看情况选)
硬盘50/100G

添加额外网卡,选择手动配置ip,网关,dns等等
ip:
eth0:10.0.0.210
eth1:172.16.1.210

添加网卡/xshell优化

第一块网卡:nat模式,eth0 10.0.0.210,模拟公网

第二块网卡:eth1   172.16.1.210 ,局域网

eth1: lan区段网卡(添加1次即可,所有虚拟机都可以使用此区段)

进系统后配置

网卡配置文件

添加eth1网卡配置文件
NAME=eth1
DEVICE=eth1
IPADDR=172.16.1.210
PREFIX=24
ONBOOT=YES
BOOTPROTO=static
#不需要配置网关(局域网)
#没有联网需求,不用配置DNS

systemctl restart network重启网卡生效

eth0配置文件(需要安装系统时填写)
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
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=eth0
UUID=29196157-491b-4907-85f3-ed9e6ba006d5
DEVICE=eth0
ONBOOT=yes
IPADDR=10.0.0.210
PREFIX=24
GATEWAY=10.0.0.2
DNS1=223.5.5.5
DNS2=223.6.6.6
IPV6_PRIVACY=no

系统优化

关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
关闭selinux
vim /etc/selinux
vim /etc/selinux/config
enforcing改成disabled
配置yum源–适用centos7
#epel源
wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
#base源
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
下载完成后yum makecache生成缓存,

yum安装常用工具

yum install -y vim tree wget bash-completion  lrzsz net-tools sysstat iotop iftop htop unzip nc nmap telnet bc psmisc httpd-tools bind-utils nethogs expect

#测试epel源
yum install -y cowsay sl

优化ssh连接速度

vim /etc/ssh/sshd_config
UseDNS no#关闭ip反向解析为域名
GSSAPIAuthentication yes#关闭GSS认证

systemctl restart sshd

时间同步
#修改时区(如果不对)
timedatectl status #查看时区 time zone部分
timedatectl set-timezone Asia/Shanghai #如果时区不对再修改.

#配置定时时间同步.
yum install -y ntpdate
vim /var/spool/cron/root
[root@localhost ~]# crontab -l
2/* * * * /sbin/ntpdate ntp1.aliyun.com &>/dev/null
每30秒同步一次时间

修改命令行颜色,显示绝对路径(oh-my-zsh)

export PS1='[\[\e[34;1m\]\u@\[\e[0m\]\[\e[32;1m\]\H\[\e[0m\]\[\e[31;1m\] \w\[\e[0m\]]\$ ‘

写入/etc/profile或者~/.bashrc

source /etc/profile

#写入rm别名到/etc/profile中
alias rm=’echo pls do not use rm’
#注释掉已有的别名
sed -i ‘/rm/s@^@#@g’ ~/.bashrc
#重新登录系统检查

追加到/etc/vimrc
#写脚本自动加作者信息
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:zhangpeng”)
call setline(6, “# 0rganization:linuxjk.cn” )
call setline(7, “# Desc:”)
call setline(8, “###########################################”)
endif
endfunc

主机名与host文件

修改模板机主机名
hostnamectl set-hostname muban
hosts解析(方便使用主机名进行互相访问)

cat <</etc/hosts <<EOF
172.16.1.5 lb01
172.16.1.6 lb02
172.16.1.7 web01
172.16.1.8 web02
172.16.1.9 web03
172.16.1.10 web04
172.16.1.31 nfs01
172.16.1.41 backup
172.16.1.51 db01
172.16.1.61 m01
EOF

一键修改主机名和ip地址的脚本

针对centos7的脚本

#!/bin/bash
#author: lidao996
#desc: change ip and hostname
#version: v7.0 final
 
eth0=/etc/sysconfig/network-scripts/ifcfg-eth0
eth1=/etc/sysconfig/network-scripts/ifcfg-eth1
 
# 1.检查参数个数
if [ $# -ne 2 ]; then
    echo “Usage: $0 <hostname> <new_ip>”
    echo “Example: $0 myhost 10.0.0.100”
    exit 1
fi
#2.模板机ip地址(最后一位)
ip=`hostname -I | awk ‘{print $1}’ | sed ‘s#.*\.##g’`
#3.新的ip
ip_new=`echo $2 | sed ‘s#^.*\.##g’`
#4.新的主机名
hostname=$1
#5.修改ip
if [ -f $eth0 ];then
sed -i “s#10.0.0.$ip#10.0.0.$ip_new#g” $eth0
else
echo “eth0网卡不存在,修改失败”
fi
if [ -f $eth1 ];then
sed -i “s#172.16.1.$ip#172.16.1.$ip_new#g” $eth1
else
echo “eth1网卡不存在,修改失败”
fi
 
#6.重启网卡生效ip更改
systemctl restart network
#nmcli connection down “$eth0” && nmcli connection up “$eth0”
#nmcli connection down “$eth1” && nmcli connection up “$eth1”
 
#7修改主机名
hostnamectl set-hostname $hostname
echo “主机名已修改为: $hostname”
 
# 8.验证结果
echo -e “\n=== 修改结果 ===”
echo “当前主机名: $(hostname)”
echo “eth0 IP: $(ip -4 addr show $eth0 | grep -oP ‘(?<=inet\s)\d+(\.\d+){3}’)”
echo “eth1 IP: $(ip -4 addr show $eth1 | grep -oP ‘(?<=inet\s)\d+(\.\d+){3}’)”

针对麒麟v10系统的脚本

#!/bin/bash
#author: deepseek
#desc: change ip and hostname
#version: v2.0

# 检查是否为root用户
if [ $(id -u) -ne 0 ]; then
echo “必须使用root权限运行此脚本!”
exit 1
fi

# 定义网卡名称(需通过 `ip a` 确认实际名称)
eth0=”eth0″ # 替换为实际网卡名
eth1=”eth1″ # 替换为实际网卡名

# 1.检查参数个数
if [ $# -ne 2 ]; then
echo “Usage: $0 “
echo “Example: $0 myhost 10.0.0.100”
exit 1
fi

# 2.提取新IP地址(假设格式为 10.0.0.100)
new_ip_full=”$2″
ip_new=$(echo “$new_ip_full” | awk -F ‘.’ ‘{print $NF}’) # 提取最后一位

# 3.从当前IP提取最后一位(假设原IP为 10.0.0.X)
current_ip_full=$(hostname -I | awk ‘{print $1}’)
current_ip=$(echo “$current_ip_full” | awk -F ‘.’ ‘{print $NF}’)

# 4.新的主机名
hostname=”$1″

# 5.修改eth0的IP配置(静态IP模式)
if [ -f “/etc/sysconfig/network-scripts/ifcfg-$eth0” ]; then
sed -i “s/10.0.0.$current_ip/10.0.0.$ip_new/g” “/etc/sysconfig/network-scripts/ifcfg-$eth0”
echo “eth0 IP已修改为: 10.0.0.$ip_new”
else
echo “错误:/etc/sysconfig/network-scripts/ifcfg-$eth0 文件不存在”
exit 1
fi

# 6.修改eth1的IP配置(静态IP模式)
if [ -f “/etc/sysconfig/network-scripts/ifcfg-$eth1” ]; then
sed -i “s/172.16.1.$current_ip/172.16.1.$ip_new/g” “/etc/sysconfig/network-scripts/ifcfg-$eth1”
echo “eth1 IP已修改为: 172.16.1.$ip_new”
else
echo “错误:/etc/sysconfig/network-scripts/ifcfg-$eth1 文件不存在”
exit 1
fi

# 7.重启NetworkManager服务并重载连接
systemctl restart NetworkManager
nmcli connection reload
nmcli connection down “$eth0” && nmcli connection up “$eth0”
nmcli connection down “$eth1” && nmcli connection up “$eth1”
#7.可以用ifup和ifdown
eth0_name=eth0
eth1_name=eth1
eth0=/etc/sysconfig/network-scripts/ifcfg-$eth0_name
eth1=/etc/sysconfig/network-scripts/ifcfg-$eth1_name
ifdown $eth0_name && ifup $eth0_name
ifdwn $eth1_name && ifup $eth1_name

# 8.修改主机名
hostnamectl set-hostname “$hostname”
echo “主机名已修改为: $hostname”

# 9.验证结果(直接使用网卡名,而非文件路径)
echo -e “\n=== 修改结果 ===”
echo “当前主机名: $(hostname)”
echo “eth0 IP: $(ip -4 addr show $eth0 | grep -oP ‘(?<=inet\s)\d+(\.\d+){3}’ || echo ‘获取失败’)”
echo “eth1 IP: $(ip -4 addr show $eth1 | grep -oP ‘(?<=inet\s)\d+(\.\d+){3}’ || echo ‘获取失败’)”

主要改进点:

使用nmcli命令直接管理网络连接,更可靠
明确区分eth0和eth1的修改逻辑
正确处理IP地址的CIDR格式
更安全的IP段修改方式

这个修正版脚本可以更可靠地完成以下操作:
将eth0的IP从10.0.0.110改为10.0.0.112
将eth1的IP从192.168.1.110改为192.168.1.112
修改主机名为xx
避免出现多个IP地址的问题

虚拟机克隆操作

链接克隆相对完整克隆占用空间小,共用模板机,但是有依赖关系,克隆都不能转移系统,模板机不能删除

不要把一个模板机克隆出来的所有虚拟机都放在同一个文件夹里,有概率无法启动,为所有克隆单独建立文件夹

安装麒麟V10-SP3–对标centos8

语言英文
安装位置(先自定义分区)
/boot 1G
/swap 2G
/剩下的给根

软件选择最小安装
标准,调试,开发,系统工具

网络:
网卡ens33:
10.0.0.210/24 10.0.0.2 223.5.5.5,223.6.6.6
ens34: 172.16.1.210/24这个不开网关
DNS也不配置
主机名麒麟模板机
时区上海
麒麟策略:root密码必须8位包含大小写
加个管理员用户

麒麟系统不用配置yum源–默认链接国内源,未来有需要再配置,默认关闭selinux

综合架构

一般网站通用的结构,就是综合架构
综合架构也是个参考,每个公司都有有自己特别的结构或需求.

此阶段的要求

第一阶段要求:(基操,能讲出来,看懂报错提示)
运维基操,故障及故障提示,一些知识点的掌握

第二阶段要求:
掌握整个网站集群架构与结构,遇到故障提示尝试解决,解决之后总结
不断完善:用户访问网站流程
对于服务核心掌握:服务作用,排查流程,对于服务的配置做好记录即可,总结笔记

综合架构详解

网站背后:(中小型架构)
对于用户角度,只开放80/443端口–经过DNS解析获取目标网站ip地址–经过互联网–进入CDN(CDN解决不了)–进入防火墙–负载均衡–web服务器–反馈数据给用户

1.CDN–分布式缓存,用于缓存静态资源,图片,视频,js,html文件
作用:缓冲网站压力,加速用户访问
2.防火墙:物理机可以用硬件防火墙,云上企业用安全组
3.负载均衡:分配请求,先挑一个合适的服务器处理访问网站的请求
使得多台web服务器相对平均的承担所有的网站压力,防止某台服务器过于繁忙或者太空闲造成系统资源分配不均

关于负载均衡:

  1. 核心目的 ✔️
    • 确实通过分配请求实现多服务器间的流量均衡
    • 避免单点过载(防止雪崩效应)
    • 提升整体资源利用率(消除资源闲置)

需要补充的要点

  1. 智能分配策略 🔄
    • 轮询(Round Robin):依次分发,适合同配置服务器
    • 加权轮询(Weighted RR):根据服务器性能差异化分配
    • 最少连接(Least Connections):优先给当前连接数最少的服务器
    • 响应时间优先:选择响应最快的节点
    • IP哈希(IP Hash):固定用户会话到特定服务器
  2. 健康监测机制 🩺
    • 主动心跳检测(如每30秒检查服务器状态)
    • 被动健康检查(监控响应成功率)
    • 自动剔除故障节点,恢复后重新加入集群
  3. 会话保持(Session Persistence) 🔐
    • 通过Cookie/Session绑定用户到特定服务器
    • 避免分布式环境下的会话丢失问题
  4. 多维度负载考量 📊
    • 不只是请求数均衡,还需考虑:
      CPU利用率(不超过70%阈值)
      内存使用率
      网络I/O负载
      磁盘读写压力
  5. 架构优势扩展 🏗️
    • 水平扩展能力:随时增减后端服务器
    • 灰度发布支持:可定向分流部分流量
    • DDoS防御:分散攻击流量

示例场景
当用户访问https://example.com时:

  1. 负载均衡器(如Nginx)接收请求
  2. 根据预设算法(如最小响应时间)选择Web服务器A
  3. 监测到服务器B的CPU达到85%,自动减少其分配权重
  4. 将用户请求路由到最健康的服务器C
  5. 记录本次分配日志供后续分析优化

技术演进
现代云负载均衡(如AWS ALB)还具备:

  • 七层协议解析(HTTP/HTTPS)
  • 基于内容的智能路由(URL路径分流)
  • 自动弹性伸缩(Auto Scaling)联动
  • 全链路HTTPS加密

服务器中的数据

数据库在众多服务中,承担的访问量较低,但是连接最慢

连接慢 ≠ 查询慢 🔍
连接建立慢:可能由DNS解析延迟、TCP握手耗时、SSL协商时间长、数据库连接池配置不当导致
认证延迟:数据库用户权限验证过程耗时(如LDAP集成认证)
网络链路问题:跨机房/跨云连接、路由跳数过多、MTU不匹配

访问量低但延迟高 📉
长连接未复用:每次请求都新建连接(而非复用连接池)
冷数据访问:低频访问导致数据库缓存(如InnoDB Buffer Pool)命中率低
锁竞争:即使QPS低,但存在表锁/行锁等待

解决方案:可以给数据库设计缓存(数据库缓存服务器),阻挡一部分进入数据库的请求,加快整体访问速度

1.数据库:网站核心,存放用户信息

2.存储:存放用户上传的内容

3.备份:服务器本地crond备份,再整合起来放到备份服务器中

 

4.缓存:缓存数据库内容,加快用户访问速度,相当于缓存里有的数据不用进入数据库进行查询操作

技术栈

开发角度:

  • 存放代码:Gitlab,Github,Gogs,Gitee(码云)
  • 集成,发布 Jenkins
  • 代码检查 Sonarqube
  • 私服,软件包仓库(Java) Nexus

用户角度:

  • DNS解析 DNS云解析(阿里),Bind9,DNSmasq,CoreDNS…
  • CDN缓存:各种厂商的CDN服务,CDN(阿里云),蓝汛(专做CDN)…,七牛CND
  • 防火墙:硬件防火墙:深信服,奇安信,华为。软件:firewalld,iptables
  • 公有云:安全组(免费),态势感知|云安全中心(收费)
  • 负载均衡:硬件:F5(厂商)…软件:nginx,tengine(淘宝基于nginx二次开发的),openResty,,,前面两个都是基于nginx开发的,haproxy,lvs(功能强大,可以承担几十万的访问量)..公有云
  • WEB网站服务器  基本:nginx/tengine,openResty

架构:LNMP(php),linux+nginx+Mysql+php;数据库可以单独放置一台服务器上

LNMT(java)      linux+nginx+mysql+Tomcat

LNMP(python)linux+nginx+mysql+Python

LNMP(Golang)linux+nginx+mysql+Golang

等等很多很多

  • 缓存服务器:Redis(重要),kafka,xxxMQ(RabbitMQ),RocketMQ
  • 数据库服务器:分为开源/商业
  • 商业:Oracle–按照cpu核心数收费(甲骨文)–国企/金融,MySQL;国产数据库:TiDb,openGauss(华为),OcenBase(阿里)

MySQL被收购,作者又写了一个Mariadb,去IOE运动(IBM服务器,Oracle数据库,EMC存储(现在被dell收购))—-导致国内企业用这种比较少,但是数据库不好换

  • 存储:硬件存储,软件存储:NFS(开源),分布式存储,阿里云OSS对象存储,七牛云对象存储,腾讯云cos对象存储…
  • 备份:定时任务,脚本,打包压缩,Rsync(在不同机器之间传输数据)

运维角度:

  • Vpn :为了连接公司服务器:硬件,开源OpenVPN
  • 堡垒机:开源:Teleprot,Jumpserver;商业:硬件,软件
  • 批量管理:Ansible(核心),SaltStack,Puppet,Chef,Farbic
  • VPN   硬件/开源软件openvpn
  • 堡垒机 开源:teleprot,Jumpserver(功能更完善)。商业:硬件/软件
  • 批量管理(自动化运维) ansible,Saltstrak,puppet,chef,farbic
  • 监控:zabbix(历史悠久–20多年),grafa(图形展示),prometheus–监控容器
    • 日志收集平台 Elasticstack(ELK,EBLK)。ElasticSearch,Filebeat,Logstash,kibana

把服务器系统日志+服务软件日志收集起来,生产环境不给开发任何权限

  • 审计(一般给开发用) SQL审计(执行语句前先测试一下),Yearning,Archery(操作审计,行为审计)–堡垒机
  • 安全(杀毒软件)商业:Appscan,OWASP,Nessus开源:ClamAV,,Linux版360,火绒

截止到目前阶段—掌握流程,在用户角度从后往前学习

工作种拿到服务器先检查有没有所有机器的备份数据,然后看备份能不能用

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部