LVS(Linux virtual server)
一.实验环境
主机名 | 角色 |
---|---|
server1 | 调度器(VS) |
server2 | 真实服务器1(RS) |
server3 | 真实服务器2(RS) |
server4 | 测试机 |
实验系统为rhel9.2
二.集群和分布式
1.系统性能扩展
a.向上扩展,既增强单个服务器性能,但是有物理上限
b.向外扩展,既增加设备数量,调度分配问题,Cluster集群,无上限,可以集群n台设备
2.集群Cluster
Cluster:集群为了解决某些问题将多台计算机组合形成的单个系统
一般分为3种
LB:负载均衡,单一主机只承担部分访问,降低单一服务器的负载压力
HA:高可用(High Availability),A为平均无故障时间和总运行时间和的比值
HPC:高性能计算机
3.分布式
分布式:一个业务被拆分为多个子业务,或者本身就是不同的业务,部署在多台服务器上。分布式中,每一台服务器实现的功能是有差别的,数据和代码也是不一样的,分布式每台服务器功能加起来,才是完整的业务
分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率,
三.lvs运行原理
1.简介
LVS:Linux Virtual Server,负载调度器,内核集成,章文嵩,阿里的四层SLB(Server LoadBalance)是基于LVS+keepalived实现
lvs官网:The Linux Virtual Server Project - Linux Server Cluster for Load Balancing
2.lvs集群体系结构
3.LVS概念
VS:Virtual Server
RS:Real Server
CIP:Client IP
VIP:Virtual serverIP VS外网的IP
DIP:Director IP VS内网的IP
RIP:Real Server IP
4.LVS类型
lvs-nat:修改请求报文的目标IP,多目标IP的DNAT
lvs-dr:操纵封装新的MAC地址
lvs-tun:在原请求IP报文之外新加一个IP首部
lvs-fullnat:修改请求报文的源和目标IP
a.nat模式
lvs-nat:
本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发
RIP和DIP应在同一个网段,使用私网IP;RS网关是DIP
支持端口映射,可修改请求报文的目标端口
请求和响应都由Director转发,容易形成系统瓶颈
nat模式数据逻辑
1.客户端发送访问请求,请求数据包中含有请求来源(cip),访问目标地址(VIP)访问目标端口(9000port)
2.VS服务器接收到访问请求做DNAT把请求数据包中的目的地由VIP换成RS的RIP和相应端口
3.RS1相应请求,发送响应数据包,包中的相应保温为数据来源(RIP1)响应目标(CIP)相应端口(9000port)
4.VS服务器接收到响应数据包,改变包中的数据来源(RIP1-->VIP),响应目标端口(9000-->80)
5.VS服务器把修改过报文的响应数据包回传给客户端
6.lvs的NAT模式接收和返回客户端数据包时都要经过lvs的调度机,所以lvs的调度机容易阻塞
注意在后面的实验中要清除掉全部的防火墙策略,不然会受到干扰导致实验失败
lvs的nat模式实验操作
实验设备结构
我们一共需要四台虚拟机,分别是一台lvs调度机,一台客户机,两台服务器
echo"net.ipv4.ip_forward=1">/etc/sysctl.d/ip_forward.conf
sysctl--system
2.lvs上安装ipvsamd,并开启服务
yum install ipvsadm -y
systemctl enable --now ipvsadm.service
3.给每一台虚拟机配好ip,这里客户机的ip模式为nat,lvs的VIP为nat模式,dip为host-only模式,两台rs虚拟机的rip均为host-only模式.
我为大家提供一个脚本,可以快速方便的为新加的网卡加入配置
#!/bin/bash
rm -rf /etc/NetworkManager/system-connections/$1.nmconnection
cat > /etc/NetworkManager/system-connections/$1.nmconnection <<EOF
[connection]
id=$1
type=ethernet
interface-name=$1
[ipv4]
address1=$2/24,172.25.254.255
method=manual
dns=114.114.114.114;
EOF
chmod 600 /etc/NetworkManager/system-connections/$1.nmconnection
nmcli connection reload
nmcli connection up $1
hostnamectl hostname $3
cat > /etc/hosts <<EOF
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
$2 $3
EOF
$1代表的是新网卡的名称,$2代表新网卡的IP,$3代表主机的新名称.在bin目录下创建一个.sh后缀的文件然后复制粘贴进去.wq保存退出以后
chmod +x /bin/文件名称
文件名称 ens36 192.168.1.2 hostname #示例,具体怎么写看自己的虚拟机
完成以后使用ip a s查看网卡是否成功启用,有设定的ip说明成功,然后和网段内其他ip互相ping看看是否互通,由于lvs比较特殊,两个ip所在端口都是网关,所以在使用脚本以后需要手动删除网关
vim /etc/NetworkManager/system-connections/ens33.nmconnection
vim /etc/NetworkManager/system-connections/ens36.nmconnection
进去之后把ip后面的删掉就好,出来以后nmcli重新启用网卡即可
4.在lvs中加入策略
ipvsadm -A -t 172.25.254.100:80 -s rr
ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.10:80
ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.10:80 -m
ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.20:80 -m
5.查看lvs策略
ipvsadm -Ln
此为两个权重相同的轮询调度策略
我们可以用客户机来测试lvs轮询的效果
6.在real server上部署apache的httpd
yum intsall httpd -y
systecmctl enable --now httpd
echo webserver1 192.168.0.10 > var/www/html/index.html #在rs1上
echo webserver2 192.168.0.20 > var/www/html/index.html #在rs2上
7.在客户端上curl172.25.254.100
for N in {1..10};do curl 172.25.254.100;done
8.修改策略的权重
ipvsadm -E -t 172.25.254.100:80 -s wrr
ipvsadm -e -t 172.25.254.100:80 -r 192.168.0.10:80 -m -w 2
ipvsadm -e -t 172.25.254.100:80 -r 192.168.0.20:80 -m -w 1
再利用curl来测试结果,我们发现每调度web1两次,就调度一次web2
9.保存策略
ipvsadm -Sn
10.删除策略
ipvsadm -C #删除所有策略
ipvsadm -d -t 172.25.254.100:80 -r 192.168.0.10:80 #删除单一策略
11.重新加载策略
ipvsadm -R < /etc/sysconfig/ipvsadm-config
ipvsadm -Ln
![](https://i-blog.csdnimg.cn/direct/ee0a55683ded45c980b94af29016c0cd.png)
LVS的dr模式实验操作
![](https://i-blog.csdnimg.cn/direct/a2438f38885047f282010690b344d2a5.png)
1.rs主机中使vip不对外响应
两台real server都需要做这个配置,如果你还没有删除刚才的配置,做完这一步你会发现刚才的curl172.25.254.100已经无法连接上了
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
2.给所有网卡配好配置,这里三台内网虚拟机的网关都是192.168.0.100,客户机网关为172.25.254.100.
客户端主机为nat模式
router的ens33(172.25.254.0)为nat模式,ens37(192.168.0.0)为host-only模式
三台内网的模式均为host-only
[root@lvs ~]# ip addr add dev lo 192.168.0.50/32
[root@webserver1 ~]# ip addr add dev lo 192.168.0.50/32
[root@webserver2 ~]# ip addr add dev lo 192.168.0.50/32
可以ip a s看一下,应为下图的状态就是正确的
ipvsadm -A -t 192.168.0.50:80 -s wrr
ipvsadm -a -t 192.168.0.50:80 -r 192.168.0.10:80 -g
ipvsadm -a -t 192.168.0.50:80 -r 192.168.0.20:80 -g
ipvsadm -Ln
for N in {1..10};do curl 192.168.0.50;done
5.lvs的调度算法
6.lvs持久链接
ipvsadm -AlE -tlulf service-address [-s scheduler] [-p [timeout]]默认360秒
在lvs调度器中设定
[root@lvs ~]# ipvsadm -E -f 6666 -s rr -p [3000]
[root@lvs ~]# ipvsadm -LnC