rhel9 修改ip地址的脚本
#!/bin/bash
ifconfig $1 &> /dev/null || {
echo "net device $1 is not exist"
exit
}
ping -c1 -w1 $2 &> /dev/null && {
echo "$2 is exist"
exit
}
grep $1 -r /etc/NetworkManager/system-connections/ | awk -F : '{system("rm -rf " $1)}'
cat >/etc/NetworkManager/system-connections/$1.nmconnection<<EOF
[connection]
id=$1
type=ethernet
interface-name=$1
[ipv4]
method=manual
address1=$2/24,172.25.254.2
DNS=8.8.8.8
EOF
chmod 600 /etc/NetworkManager/system-connections/$1.nmconnection
nmcli connection reload
nmcli connection up $1
hostnamectl set-hostname $3
grep -e "$2\t$3" /etc/hosts || {
echo -e "$2\t$3" >> /etc/hosts
}
网关配置 nmtui
Activate a connection
一. lvs(Linux virtual server)运行原理
1.1 lvs简介
LVS:Linux Virtual Server,负载调度器,内核集成,章文嵩,阿里的四层SLB(Server LoadBalance)是基于LVS+keepalived实现。
使用 LVS 可以达到的技术目标是:通过 LVS 达到的负载均衡技术和 Linux 操作系统实现一个高性能高可用的 Linux 服务器集群,具有良好的可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的性能。LVS 是一个实现负载均衡集群的开源软件项目,LVS 架构从逻辑上可分为调度层、Server 集群层和共享存储层。
1.2 LVS概念
VS: Virtual Server,负责调度
RS:RealServer,负责真正提供服务
工作原理: VS根据请求报文的目标IP和目标协议及端口将其调度转发至某RS,根据调度算法来挑选RS
CIP:Client IP
VIP: Virtual serve IP VS外网的IP
DIP: Director IP VS内网的IP
RIP: Real server IP
访问流程:CIP <--> VIP == DIP <--> RIP
LVS 与 Nginx 功能对比
- LVS 比 Nginx 具有更强的抗负载能力,性能高,对内存和 CPU 资源消耗较低;
- LVS 工作在网络层,具体流量由操作系统内核进行处理,Nginx 工作在应用层,可针对 HTTP 应用实施一些分流策略;
- LVS 安装配置较复杂,网络依赖性大,稳定性高。Nginx 安装配置较简单,网络依赖性小;
- LVS 不支持正则匹配处理,无法实现动静分离效果。
- LVS 适用的协议范围广。Nginx 仅支持 HTTP、HTTPS、Email 协议,适用范围小
Nginx :支持 4 层 / 7 层负载均衡,支持 HTTP、E-mail 协议;
LVS :纯 4 层负载均衡,运行在内核态,性能是软件负载均衡中最高的;
HAproxy :是 7 层负载均衡软件,支持 7 层规则的设置,性能也不错;
1.3 lvs集群的类型
lvs-nat: 修改请求报文的目标IP,多目标IP的DNAT
lvs-dr: 操纵封装新的MAC地址
lvs-tun: 在原请求IP报文之外新加一个IP首部
lvs-fullnat: 修改请求报文的源和目标IP
1.4 LVS 集群的通用体系结构
第一层:负载调度器:Load Balancer,它是访问整个群集系统的唯一入口,对外使用所有服务器共有的虚拟 IP 地址
,也成为群集 IP 地址。
负载均衡器:是服务器群集系统的单个入口点,可运行 IPVS,该 IPVS 在 Linux 内核或 KTCPVS 内部实现 IP 负载均衡技术,在 Linux 内核中实现应用程序级负载平衡。使用 IPVS 时,要求所有服务器提供相同的服务和内容,负载均衡器根据指定的调度算法和每个服务器的负载将新的客户端请求转发到服务器。无论选择哪个服务器,客户端都应获得相同的结果。使用 KTCPVS 时,服务器可以具有不同的内容,负载均衡器可以根据请求的内容将请求转发到其他服务器。由于 KTCPVS 是在 Linux 内核内部实现的,因此中继数据的开销很小,因此仍可以具有较高的吞吐量。
第二层:服务器池:Server Pool,群集所提供的应用服务,比如:HTTP、FTP服务器池来承担,每个节点具有独立的真实 IP 地址
,只处理调度器分发过来的客户机请求。
服务器群集的节点可根据系统所承受的负载进行分担。当所有服务器过载时,可添加多台服务器来处理不断增加的工作负载。对于大多数 Internet 服务(例如Web),请求通常没有高度关联,并且可以在不同服务器上并行运行。因此,随着服务器群集的节点数增加,整体性能几乎可以线性扩展。
第三层:共享存储:Shared Storage,为服务器池中的所有节点提供稳定、一致的文件存储服务,确保整个群集的统一性,可使用 NAS 设备或提供 NFS (Network File System)网络文件系统共享服务的专用服务器。
共享存储:可以是数据库系统,网络文件系统或分布式文件系统。服务器节点需要动态更新的数据应存储在基于数据的系统中,当服务器节点并行在数据库系统中读写数据时,数据库系统可以保证并发数据访问的一致性。静态数据通常保存在网络文件系统(例如 NFS 和 CIFS)中,以便可以由所有服务器节点共享数据。但是,单个网络文件系统的可伸缩性受到限制,例如,单个 NFS / CIFS 只能支持 4 到 8 个服务器的数据访问。对于大型集群系统,分布式/集群文件系统可以用于共享存储,例如 GPFS,Coda 和 GFS,然后共享存储也可以根据系统需求进行扩展。
1.5 LVS 的组成及作用
LVS 由两部分程序组成,包括 ipvs 和 ipvsadm。
1、 ipvs
(ip virtual server):LVS 是基于内核态的 netfilter 框架实现的 IPVS 功能,工作在内核态。用户配置 VIP 等相关信息并传递到 IPVS 就需要用到 ipvsadm 工具。
2、 ipvsadm
:ipvsadm 是 LVS 用户态的配套工具,可以实现 VIP 和 RS 的增删改查功能,是基于 netlink 或 raw socket 方式与内核 LVS 进行通信的,如果 LVS 类比于 netfilter,那 ipvsadm 就是类似 iptables 工具的地位。
作用:
- 主要用于多服务器的负载均衡;
- 工作在网络层,可实现高性能,高可用的服务器集群技术;
- 廉价,可把许多低性能的服务器组合在一起形成一个超级服务器;
- 易用,配置简单,有多种负载均衡的方法;
- 稳定可靠,即使在集群的服务器中某台服务器无法正常工作,也不影响整体效果;
- 可扩展性好;
1.6 LVS 负载均衡的基本原理
netfilter 的基本原理
在介绍 LVS 负载均衡基本原理之前,先说一下 netfilter 的基本原理。因为 LVS 是基于 Linux 内核中 netfilter 框架实现的负载均衡系统,netfilter 其实很复杂也很重要,平时说的 Linux 防火墙就是 netfilter,不过我们操作的还是 iptables,iptables 和 netfilter 是 Linux 防火墙组合工具,是一起来完成系统防护工作的。
iptables 是位于用户空间,而 Netfilter 是位于内核空间。iptables 只是用户空间编写和传递规则的工具而已,真正工作的还是 netfilter。
两者间的区别:
Netfilter 是内核态的 Linux 防火墙机制,它作为一个通用、抽象的框架,提供了一整套的 hook 函数管理机制,提供数据包过滤、网络地址转换、基于协议类型的连接跟踪的功能,可在数据包流经过程中,根据规则设置若干个关卡(hook 函数)来执行相关操作,共设置了 5 个点,包括:PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING。
- prerouting: 在对数据包做路由选择之前,将应用此链中的规则;
- input: 当收到访问防火墙本机地址的数据包时,将应用此链中的规则;
- forward: 当收到需要通过防火中转发给其他地址的数据包时,将应用此链中的规则;
- output: 当防火墙本机向外发送数据包时,将应用此链中的规则;
- postrouting: 在对数据包做路由选择之后,将应用此链中的规则;
iptable 是用户层的工具,提供命令行接口,能够向 Netfilter 中添加规则策略,从而实现报文过滤,修改等功能。
当数据包通过网络接口进入时,经过链路层之后进入网络层到达PREROUTING
,然后根据目标 IP 地址进行查找路由。
如目标 IP 是本机,数据包会传到INPUT
上,经过协议栈后根据端口将数据送到相应的应用程序;应用程序将请求处理后把响应数据包发送至OUTPUT里,最终通过
POSTROUTING`后发送出网络接口。
如目标 IP 不是本机,并且服务器开启了FORWARD
参数,这时会将数据包递送给 FORWARD
,最后通过POSTROUTING
后发送出网络接口。
LVS 的基本原理
LVS 基于 netfilter 框架,工作在 INPUT 链上,在 INPUT 链上注册 ip_vs_in HOOK 函数,进行 IPVS 相关主流程,详细原理概述如下:
1、 当客户端用户访问 www.baidu.com 网站时,用户访问请求通过层层网络,最终通过交换机进入 LVS 服务器网卡进入内核空间层。
2、 进入PREROUTING
后通过查找路由,确定访问目的 VIP 是本机 IP 地址的话,数据包将进入INPUT
链中。
3、 因为 IPVS 工作在 INPUT 链上,会根据访问的VIP
和端口
判断请求是否为 IPVS 服务,是的情况下,则调用注册的IPVS HOOK 函数
,进行IPVS
相关流程,并强制修改数据包的相关数据,并将数据包发往POSTROUTING
链中。
4、 POSTROUTING
链收到数据包后,将根据目标 IP 地址服务器,通过路由选路,将数据包最终发送至后端真实服务器中。
上面就是我们所介绍的 LVS 的工作原理,那么 LVS 负载均衡还包括三种工作模式,且每种模式工作原理都有所不同,适用于不同应用场景,其最终目的都是能实现均衡的流量调度和良好的扩展性。
2.1 nat模式
lvs-nat:
本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和
PORT实现转发
RIP和DIP应在同一个IP网络,且应使用私网地址;RS的网关要指向DIP
请求报文和响应报文都必须经由Director转发,Director易于成为系统瓶颈
支持端口映射,可修改请求报文的目标PORT
VS必须是Linux系统,RS可以是任意OS系统
1、 客户端发出的请求数据包经过网络到达 LVS 网卡,数据包源 IP 为 CIP,目的 IP 为 VIP。
2、然后进入 PREROUTING 链中,根据目的 IP 查找路由,确定是否为本机 IP 地址,随后将数据包转发至 INPUT 链中,源 IP 和 目的 IP 不变。
3、 到达 LVS 后,通过目的 IP 和目的 PORT 查找是否为 IPVS 服务,如是 IPVS 服务,将会选择一个 RS 来作为后端服务器,数据包的目的 IP 地址将会修改为 RIP,这时并以 RIP 为目的 IP 去查找路由,确定下一跳及 PORT 信息后,数据包将会转发至 OUTPUT 链中。
4、 被修改过的数据包经过 POSTROUTING 链后,到达 RS 服务器,数据包源 IP 为 CIP,目的 IP 为 RIP。
5、 RS 服务器经过处理后,将会把数据包发送至用户空间的应用程序,待处理完成后,发送响应数据包,RS 服务器的默认网关为 LVS 的 IP,应用程序将会把数据包转发至下一跳 LVS 服务器,数据包源 IP 为 RIP,目的 IP 为 CIP。
6、 LVS 服务器收到 RS 服务器响应的数据包后,查找路由,目的 IP 不是本机 IP并且 LVS 服务器开启了 FORWARD 模式,会将数据包转发给它,数据包不变。
7、 LVS 服务器收到响应数据包后,根据目的 IP 和 目的 PORT 查找相应的服务,这时,源 IP 为 VIP,通过查找路由,确定下一跳信息并将数据包发送至网关,最终回应给客户端用户。
客户请求到达vip后进入PREROUTING,在没有ipvs的时候因该进入本机INPUT,当IPVS存在后访问请求在通 过PREROUTING后被ipvs结果并作nat转发
因为ipvs的作用点是在PREROUTING和INPUT链之间,所以如果在prerouting中设定规则会干扰ipvs的工 作。所以在做lvs时要把iptables的火墙策略全清理掉。
3.1 DR模式
DR:Direct Routing,直接路由,LVS默认模式,应用最广泛,通过为请求报文重新封装一个MAC首部进行 转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源 IP/PORT,以及目标IP/PORT均保持不变
3.2 DR模式数逻辑
在DR模式中,RS接收到访问请求后不需要回传给VS调度器,直接把回传数据发送给client,所以RS和vs 上都要有vip
3.3 DR模式数据传输过程
1.客户端发送数据帧给vs调度主机帧中内容为客户端IP+客户端的MAC+VIP+VIP的MAC
2.VS调度主机接收到数据帧后把帧中的VIP的MAC该为RS1的MAC,此时帧中的数据为客户端IP+客户端的MAC+VIP+RS1的MAC
3.RS1得到2中的数据包做出响应回传数据包,数据包中的内容为VIP+RS1的MAC+客户端IP+客户端IP的MAC
DR 实现原理过程
1、 当客户端用户发送请求给 www.baidu.com 网站时,首先经过 DNS 解析到 IP 后并向百度服务器发送请求,数据包经过网络到百度 LVS 负载均衡服务器,这时到达 LVS 网卡时的数据包包括:源 IP 地址(客户端地址)、目的 IP 地址(百度对外服务器 IP 地址,也就是 VIP)、源 MAC 地址(CMAC / LVS 连接路由器的 MAC 地址)、目标 MAC 地址(VMAC / VIP 对应的 MAC 地址)。
2、 数据包到达网卡后,经过链路层到达 PREROUTING 链,进行查找路由,发现目的 IP 是 LVS 的 VIP,这时就会发送至 INPUT 链中并且数据包的 IP 地址、MAC 地址、Port 都未经过修改。
3、 数据包到达 INPUT 链中,LVS 会根据目的 IP 和 Port(端口)确认是否为 LVS 定义的服务,如是定义过的 VIP 服务,会根据配置的服务信息,从 RealServer 中选择一个后端服务器 RS1,然后 RS1 作为目标出方向的路由,确定下一跳信息及数据包通过具体的哪个网卡发出,最好将数据包通过 INET_HOOK 到 OUTPUT 链中。
4、 数据包通过 POSTROUTING 链后,目的 MAC 地址将会修改为 RealServer 服务器 MAC 地址(RMAC)源 MAC 地址修改为 LVS 与 RS 同网段的 IP 地址的 MAC 地址(DMAC)此时,数据包将会发至 RealServer 服务器。
5、 数据包到达 RealServer 服务器后,发现请求报文的 MAC 地址是自己的网卡 MAC 地址,将会接受此报文,待处理完成之后,将响应报文通过 lo 接口传送给 eth0 网卡然后向外发出。 此时的源 IP 地址为 VIP,目标 IP 为 CIP,源 MAC 地址为 RS1 的 RMAC,目的 MAC 地址为下一跳路由器的 MAC 地址(CMAC),最终数据包通过 RS 相连的路由器转发给客户端。
3.4 DR模式的特点
1.Director和各RS都配置有VIP
2.确保前端路由器将目标IP为VIP的请求报文发往Director
3.在前端网关做静态绑定VIP和Director的MAC地址
在RS上使用arptables工具
在RS上修改内核参数以限制arp通告及应答级别
4.RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络;
5.RIP的网关不能指向DIP,以确保响应报文不会经由Director
6.RS和Director要在同一个物理网络
7.请求报文要经由Director,但响应报文不经由Director,而由RS直接发往Client
8.不支持端口映射(端口不能修败)
arptables -A IN -d $VIP -j DROP
arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP
/proc/sys/net/ipv4/conf/all/arp_ignore
/proc/sys/net/ipv4/conf/all/arp_announce9.RS可使用大多数OS系统
4.1 部署NAT模式集群案例
主机名 | ip | vip | 角色 |
---|---|---|---|
lvs | 192.168.116.100 | 172.25.254.100 | 调度器 (VS) |
RS1 | 192.168.116.101,GW 192.168.116.100 | null | 真实服务器 (RS) |
RS2 | 192.168.116.102,GW 192.168.116.100 | null | 真实服务器 (RS) |
client | 172.25.254.200 | 测试机 |
4.2 Nat-node
[root@ens192 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.25.254.100 0.0.0.0 UG 100 0 0 ens192
172.25.254.0 0.0.0.0 255.255.255.0 U 100 0 0 ens192
4.3 lvs
5.1.2.配置命令
1.在node1中启用内核路由功能
2.在node1中安装ipvsadm
3.在node1中添加调度策略
echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/ip_forward.conf
sysctl --system
yum install ipvsadm -y
ipvsadm -Ln
ipvsadm -A -t 172.25.254.100:80 -s rr
ipvsadm -a -t 172.25.254.100:80 -r 192.168.116.11:80 -m -w 1
ipvsadm -a -t 172.25.254.100:80 -r 192.168.116.12:80 -m -w 1
4.查看策略
5.保存规则
ipvsadm -R < /etc/sysconfig/ipvsadm-config
6.删除所有规则
7.重新加载规则
for N in {1..6};do curl 172.25.254.100;done
[root@ens224 sysconfig]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:95:35:4b brd ff:ff:ff:ff:ff:ff
altname enp11s0
inet 192.168.116.100/24 brd 192.168.116.255 scope global noprefixroute ens192
valid_lft forever preferred_lft forever
inet6 fe80::35e9:44:3598:7bb7/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: ens224: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:95:35:55 brd ff:ff:ff:ff:ff:ff
altname enp19s0
inet 172.25.254.100/24 brd 172.25.254.255 scope global noprefixroute ens224
valid_lft forever preferred_lft forever
inet6 fe80::3c8:830f:84ea:9d48/64 scope link noprefixroute
valid_lft forever preferred_lft forever
4.4 rs1
ip 192.168.116.11
4.5 rs2
ip 192.168.116.12
4.6 测试
[root@ens192 ~]# for N in {1..6};do curl 172.25.254.100;done
5.1 部署DR模式集群案例
实验环境
主机名 | ip 信息 | vip 信息 | 角色 |
---|---|---|---|
client | 172.25.254.200 vmware NAT | null | 测试主机 |
router | NAT-eth0:172.25.254.100,仅主机 - eth1:192.168.116.100 | null | 路由器 |
lvs | 192.168.116.188,GW 192.168.116.100 仅主机VIP192.168.116.201 | lo:192.168.116.201 | 调度器 |
RS1 | 192.168.116.101,GW 192.168.116.100 仅主机 VIP192.168.116.201 |
lo:192.168.116.201 | web 服务器 1 |
RS2 | 192.168.116.102, GW 192.168.116.100 仅主机 VIP192.168.116.201 |
lo:192.168.116.201 | web 服务器 2 |
5.6 配置实验环境
外网172.25.254.200
ip 配置
#在客户端主机中为nat模式网卡
[root@client ~]# vim/etc/NetworkManager/system-connections/ens160.nmconnection
[connection]
id=ens160
type=ethernet
interface-name=ens160
[ipv4]
method=manual
address1=172.25.254.200/24,172.25.254.100
[root@client ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.25.254.100 0.0.0.0 UG 100 0 0 eth0
172.25.254.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
route
#在路由主机中设定双网卡,ens224为nat网卡,ens160为仅主机网卡
#对于ens160的设定
[root@ens224]# vim /etc/NetworkManager/system-connections/ens160.nmconnection
[connection]
id=ens160
uuid=d2975348-e208-38df-9b76-2314670fb475
type=ethernet
interface-name=ens160
timestamp=1752565833
[ethernet]
[ipv4]
address1=172.25.254.200/24
method=manual
[ipv6]
addr-gen-mode=default
method=auto
[proxy]
[root@ens224 system-connections]# vi ens224.nmconnection
[connection]
id=ens224
type=ethernet
interface-name=ens224
[ipv4]
method=manual
address1=172.25.254.100/24
DNS=8.8.8.8
lvs
#对于dr调度器设定网卡为仅主机模式
[root@ens192 system-connections]# vi ens192.nmconnection
[connection]
id=ens192
uuid=bf5c3e39-1f0e-3378-8dd7-fbb41fa659af
type=ethernet
interface-name=ens192
timestamp=1752586619
[ethernet]
[ipv4]
address1=192.168.116.188/24,192.168.116.100
address2=192.168.116.201/24
method=manual
[ipv6]
addr-gen-mode=default
method=auto
[proxy]
[root@ens192 system-connections]# vi ens160.nmconnection
[connection]
id=ens160
type=ethernet
interface-name=ens160
[ipv4]
method=manual
address1=172.25.254.200/24,172.25.254.2
DNS=8.8.8.8
rs1
#对于RS1的设定网卡为仅主机模式
[root@ens192 system-connections]# vi lo.nmconnection
[connection]
id=lo
type=loopback
interface-name=lo
[ethernet]
[ipv4]
address1=127.0.0.1/8
address2=192.168.116.201/32
method=manual
[root@ens192 system-connections]# vi ens192.nmconnection
[connection]
id=ens192
uuid=bf5c3e39-1f0e-3378-8dd7-fbb41fa659af
type=ethernet
interface-name=ens192
timestamp=1752567546
[ethernet]
[ipv4]
address1=192.168.116.101/24,192.168.116.100
method=manual
[ipv6]
addr-gen-mode=default
method=auto
[proxy]
rs2
#对于RS2中的网络设定
[root@ens192 system-connections]# vi ens192.nmconnection
[connection]
id=ens192
type=ethernet
interface-name=ens192
[ipv4]
method=manual
address1=192.168.116.102/24,192.168.116.100
DNS=8.8.8.8
[root@ens192 system-connections]# vi lo.nmconnection
[connection]
id=lo
type=loopback
interface-name=lo
[ethernet]
[ipv4]
address1=127.0.0.1/8
address2=192.168.116.201/32
method=manual
ipvsadm规则设置以及关闭防火墙
5.7 解决vip响应问题
DR模型中各主机上均需要配置VIP,解决地址冲突的方式有三种:
(1)在前端网关做静态绑定
(2)在各RS使用arptables
(3)在各RS修改内核参数,来限制arp响应和通告的级别
限制响应级别:arp_ignore
0:默认值,表示可使用本地任意接口上配置的任意地址进行响应
1:仅在请求的目标IP配置在本地主机的接收到请求报文的接口上时,才给予响应
限制通告级别:arp_announce
0:默认值,把本机所有接口的所有信息向每个接口的网络进行通告
1:尽量避免将接口信息向非直接连接网络进行通告
2:必须避免将接口信息向非本网络进行通告
5.8 配置要点
1.Director服务器采用双IP桥接网络,一个是VIP,一个DIP
2.Web服务器采用和DIP相同的网段和Director连接
3.每个Web服务器配置VIP
4.每个web服务器可以出外网
配置内容如下:
在lvs 和 rs 中设定vip
[root@lvs ~]# ip addr add dev lo 192.168.116.201/32
[root@rs1 ~]# ip addr add dev lo 192.168.116.201/32
[root@rs2 ~]# ip addr add dev lo 192.168.116.201/32
在RS1和RS2中解决响应问题
在RS1和RS2中分别配置
[root@rs1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@rs1 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@rs1 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@rs1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
在lvs中配置策略
[root@lvs ~]# ipvsadm -A -t 192.168.0.100:80 -s rr
[root@lvs ~]# ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.101:80 -g
[root@lvs ~]# ipvsadm -a -t 192.168.0.100:80 -r 192.168.0.102:80 -g
[root@lvs ~]# ipvsadm -Ln
测试:
[root@ens192 ~]# for i in {1..10}; do curl 192.168.116.201; done
arp欺骗
6.1 LVS 负载均衡规则配置
创建虚拟服务(VIP)
通过ipvsadm -A -t VIP:端口 -s 调度算法
定义对外服务的 VIP 及调度策略- 示例:
ipvsadm -A -t 172.25.254.11:80 -s rr
(TCP 服务,轮询调度)
- 示例:
关联真实服务器(RS)
用ipvsadm -a -t VIP:端口 -r RS_IP:端口 -m
添加后端节点,指定转发模式- 示例:
ipvsadm -a -t 172.25.254.11:80 -r 192.168.116.12:80 -m
(NAT 模式)
- 示例:
6.2 规则持久化(避免重启丢失)
保存当前规则到文件
ipvsadm-save -n > /mnt/ipvsadm.rule
(
-n
强制用 IP 而非主机名,文件路径可自定义)配置开机自动加载规则
- 方式 1:通过 systemd 服务(推荐)
systemctl enable --now ipvsadm.service # 启用服务并立即加载 ipvsadm-restore < /mnt/ipvsadm.rule # 手动从文件恢复规则(也可写进服务脚本)
- 方式 2:直接写入系统配置
cp /mnt/ipvsadm.rule /etc/sysconfig/ipvsadm # 覆盖默认规则文件 systemctl start ipvsadm # 启动服务加载规则
- 方式 1:通过 systemd 服务(推荐)
6.3 服务管理与状态校验
查看当前 LVS 规则
ipvsadm -Ln # 简洁列表(IP 形式展示,无主机名解析) ipvsadm -Lnv # 详细列表(含权重、连接数等)
监控负载统计
ipvsadm -Ln --stats # 查看连接数、流量统计,验证负载分发
调试与编辑
- 检查规则文件:
cat /mnt/ipvsadm.rule
- 编辑规则文件:
vi /mnt/ipvsadm.rule
(修改后需ipvsadm-restore
重新加载)
- 检查规则文件:
6.4 关键逻辑梳理
- 流程闭环:配置规则 → 保存持久化 → 服务自启 → 状态校验,确保 LVS 负载均衡稳定运行。
- 核心工具:
ipvsadm
负责规则增删改查,systemd
保障开机自动恢复,日志 / 统计命令辅助问题排查。
总结:用 ipvsadm
定义 LVS 负载规则,通过文件持久化 + systemd 服务保活,并用 ipvsadm -Ln
系列命令监控状态,完成负载均衡部署。
7.1 系统性能扩展方式
- Scale UP(向上扩展):增强单台设备性能来提升系统能力,比如给服务器升级高性能 CPU、更大内存等 。
- Scale Out(向外扩展):增加设备数量,通过调度分配解决多设备协作问题,常以集群(Cluster)形式实现。
7.2 集群(Cluster)
- 定义:为解决特定问题,将多台计算机组合成的 “单个系统”,让多台机器协同工作。
- 常见类型:
- LB(负载均衡集群,Load Balancing):多主机组成,每台承担部分访问压力,分担负载,比如 LVS、Nginx 负载均衡集群 。
- HA(高可用集群,High Availability):解决单点故障(SPOF,single Point Of failure)问题,保障服务持续可用。涉及指标:
- MTBF(Mean Time Between Failure,平均无故障时间):系统正常运行的平均时长。
- MTTR(Mean Time To Restoration/repair,平均恢复前时间 / 平均修复时间):系统出现故障后,到恢复正常的平均时长。
- 可用性公式:
A = MTBF / (MTBF + MTTR)
,值越接近 1 表示可用性越高,常以 99%、99.9% 等 “几个 9” 的形式体现服务水平。 - SLA(Service level agreement,服务等级协议):服务提供商和用户约定的服务性能、可用性等协定,达不到可能有惩罚,运维目标是达成 SLA 。同时要关注计划外停机时间(相对于计划内停机,更影响服务连续性 )。
- HPC(高性能计算集群,High - performance computing):属于国家战略资源,本课程不涉及。
7.3 分布式
- 常见应用方向:
- 分布式存储:如 Ceph、GlusterFs、FastDFS、MogileFs ,用于存储海量数据,把数据分散存到多台设备 。
- 分布式计算:如 hadoop、Spark ,将计算任务拆分到多台机器并行处理,加速计算。
- 典型业务场景:
- 分布式应用:按功能拆分服务,采用微服务架构,不同服务部署在不同节点 。
- 分布式静态资源:静态资源(如图片、CSS 等)存到不同存储集群,减轻业务服务器压力,提升访问效率 。
- 分布式数据和存储:用 key - value 缓存系统(如 Redis 集群 ),加速数据读写 。
- 分布式计算:针对特殊业务(如大数据分析 ),用 Hadoop 等集群并行计算。
集群和分布式的区别与联系
- 集群:
- 多台服务器部署同一业务系统,每台功能、数据、代码基本一致 。
- 靠增加单位时间处理任务数提升效率(比如多台服务器同时处理不同用户的同类请求 )。
- 某台服务器故障,其他可顶上,保障业务连续性(如负载均衡集群里某 RS 故障,负载均衡器调度请求到其他 RS )。
- 分布式:
- 一个业务拆分成多个子业务或由不同业务组成,多台服务器分别部署不同部分,功能、数据、代码有差异 。
- 靠缩短单个任务执行时间提升效率(把大任务拆小,多节点并行做 )。
- 某节点故障,对应子业务可能失败(如分布式电商系统中,订单子系统节点故障,可能无法下单 )。
- 大型网站常见模式:前端用负载均衡服务器(集群一部分 ),后端多台服务器组成集群处理同一业务;同时可能结合分布式,拆分不同功能模块部署,兼顾负载分担和功能拆分 。
简单来说,集群是 “多机干同活,容错顶得上”,分布式是 “多机干不同活,协同成整体”,大型系统常二者结合,既用集群扛量、保可用,又用分布式拆业务、提效率 。
8.1 ARP 欺骗(ARP Poisoning)
核心逻辑是:通过伪造 ARP 响应,让目标设备(如 lb01)的 ARP 缓存被 “毒化”,错误认为网关 MAC 是攻击者设备(lb02)的 MAC,导致网络流量被劫持或中断。
ARP 协议基础:
ARP(地址解析协议)作用是 “IP 地址 ↔ MAC 地址” 映射,设备通过 ARP 缓存表记录关联关系。正常情况下,lb01 访问网关(10.0.0.2 )时,会用正确的mac-gateway
通信。ARP 欺骗过程:
- 攻击者(lb02 中毒后)主动发送虚假 ARP 响应,宣称 “网关 IP(10.0.0.2)的 MAC 是 mac-lb02” 。
- lb01 收到后,更新 ARP 缓存,把网关 IP 与
mac-lb02
绑定 → 后续发往网关的流量,全被发往 lb02,导致 lb01 无法正常上网(流量被劫持或中断)。
危害延伸:
除了断网,ARP 欺骗还可能用于 “中间人攻击”—— 攻击者(lb02)转发 lb01 与网关的流量,窃取账号密码、篡改数据等,隐蔽性极强。
ARP(地址解析协议)用于将 IP 地址解析为对应的 MAC 地址
8.2 ARP 解析过程
可简单总结为 “一问一答” :
- 问(ARP 请求):主机要发数据,不知目标 MAC,就发广播问 “谁是目标 IP?求 MAC” 。
- 答(ARP 响应):目标主机收到后,单播回复自己的 MAC;其他主机不理会。
- 存(ARP 缓存):双方把对方 “IP - MAC” 存起来,下次直接用,不用再解析~
- 发送 ARP 请求广播:
主机 A 在局域网内发送一个 ARP 请求广播包,这个广播包中包含了主机 A 自己的 IP 地址(IP_A)、MAC 地址(MAC_A),以及它想要获取 MAC 地址的目标 IP 地址(IP_B) 。在以太网中,广播包的目的 MAC 地址是全 1 的广播地址(FF:FF:FF:FF:FF:FF),这意味着局域网内的所有设备都会收到这个 ARP 请求包。 - 其他设备接收并处理请求:
局域网内的其他设备(如主机 C、主机 D 等)收到 ARP 请求包后,会检查包中的目标 IP 地址。发现不是自己的 IP 地址,就会丢弃这个包。 - 目标主机回复 ARP 响应:
当主机 B 收到 ARP 请求包后,发现请求的目标 IP 地址是自己的 IP 地址(IP_B) ,就会提取出请求包中的主机 A 的 IP 地址(IP_A)和 MAC 地址(MAC_A),并将其存入自己的 ARP 缓存表中。然后,主机 B 会向主机 A 发送一个 ARP 响应包,这个响应包是单播包,其目的 MAC 地址是主机 A 的 MAC 地址(MAC_A),源 MAC 地址是主机 B 自己的 MAC 地址(MAC_B),包中包含了主机 B 的 IP 地址(IP_B)和 MAC 地址(MAC_B)。 - 源主机更新 ARP 缓存:
主机 A 收到主机 B 的 ARP 响应包后,会将主机 B 的 IP 地址(IP_B)和 MAC 地址(MAC_B)存入自己的 ARP 缓存表中。至此,主机 A 就获得了主机 B 的 MAC 地址,之后就可以使用这个 MAC 地址封装数据链路层帧,向主机 B 发送数据了。
8.3 ARP 缓存机制
为了减少 ARP 解析的开销,提高网络通信效率,每台主机都维护着一个 ARP 缓存表,用于存储 IP 地址和 MAC 地址的映射关系。ARP 缓存表中的条目都有一定的生存时间(TTL),超过这个时间,条目就会被自动删除。当主机再次需要与某个 IP 地址通信时,如果 ARP 缓存表中没有对应的条目,就会重新发起 ARP 解析过程。