1.Linux 虚拟服务器概述
Linux 虚拟服务器 (LVS) 是一组集成软件组件,用于在一组真实服务器之间平衡 IP 负载。LVS 在一对配置相同的计算机上运行:一台是活动的 LVS 路由器,另一台是备用 LVS 路由器。活动的 LVS 路由器有两个角色:
-
在真实服务器之间平衡负载。
-
检查每个真实服务器上服务的完整性。
备份 LVS 路由器监控活动 LVS 路由器,并在活动 LVS 路由器发生故障时接管该路由器。
1.1. 基本的 LVS 配置
1.2.LVS的基本概念
2.LVS的命令
-A # 添加-E # 修改 没有事先添加就不能修改-t #tcp 服务-u #udp 服务-s # 指定调度算法,默认为 WLC-p # 设置持久连接超时,持久连接表示在同一个时间段同一个来源的请求调度到同一 Realserver-f #firewall mask 火墙标记,是一个数字
-a # 添加 realserver-e # 更改 realserver-t #tcp 协议-u #udp 协议-f # 火墙 标签-r #realserver 地址-g #直连路由模式-i #ipip 隧道模式-m #nat模式-w # 设定权重-Z # 清空计数器-C # 清空 lvs 策略-L # 查看 lvs 策略-n # 不做解析--rate :输出速率信息
3.四种基本模式
3.1 net模式 网络地址转换
LVS的NAT模式工作原理是:客户端访问服务器,访问请求到达调度器,调度器通过网络地址转换,重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的Real Server;Real Server的响应包通过调度器时,报文的源地址被重写,再返回给客户,完成整个负载调度过程
对报文的目的地址进行改变
3.1.1准备环境
主机 | ip | 下载服务 |
client | 172.25.254.10/24 | 无 |
LVS | 172.25.254.100/24 192.168.132.100/24 | ipvsadm |
server1/RS1 | 192.168.132.101 gw:192.168.132.100 | httpd |
server2/RS2 | 192.168.132.102 gw:192.168.132.100 | httpd |
其中VIP就是我们的192.168.132.100
3.1.2 LVS的配置
echo "net.ipv4.ip_forward=1" >/etc/sysctl.d/ip_forward.conf
sysctl -p
yum install ipvsadm -y
ipvsadm -A -t 172.25.254.100:80 -s rr
ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.101:80 -m
ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.102:80 -m
ipvsadm -Ln
vim /etc/sysconfig/ipvsadm
ipvsadm -Sn >/etc/sysconfig/ipvsadm-config
systemctl restart ipvsadm.service
ipvsadm -R < /etc/sysconfig/ipvsadm-config
3.1.3 命令解释
echo "net.ipv4.ip_forward=1" >/etc/sysctl.d/ip_forward.conf #启用内核路由功能让172.25.254网段的内容能到192.168.132网段去
sysctl -p #刷新让上面功能生效
yum install ipvsadm -y
ipvsadm -A -t 172.25.254.100:80 -s rr #集群服务管理增加
ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.101:80 -m #集群服务的RS管理增加
ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.102:80 -m
ipvsadm -Ln #查看添加的Lvs策略
vim /etc/sysconfig/ipvsadm #创建ipvsadm
ipvsadm -Sn >/etc/sysconfig/ipvsadm-config #保存lvs策略
systemctl restart ipvsadm.service #重启服务
ipvsadm -R < /etc/sysconfig/ipvsadm-config #导入事先写好的配置
3.1.4 注意事项
网卡配置需要将两台RS也就是server服务器的网关指向我们的LVS服务器
vim /etc/sysconfig/ipvsadm #创建ipvsadm此文件必须创建否则服务起不来
3.1.5 运行过程![](https://i-blog.csdnimg.cn/direct/09ff11789fc44164a087c51556aca724.png)
3.1.6 web服务器配置
server1和server2配置一致
vim /etc/NetworkManager/system-connections/ens160.nmconnection
3.1.7 测试结果
3.2 DR模式 Direct Routing(直接路由)
DR模式意为Direct Routing(直接路由),是调度器与实际服务器都有一块网卡连在同一物理网段上的情况。 而LVS-DR的工作原理就是:通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址,源IP/PORT,以及目标IP/PORT均保持不变。
3.2.1准备环境
主机名 | ip | 服务 | VIP |
client | 172.25.254.10/24 | 客户端 | |
router | 172.25.254.100/24 192.168.132.10 | 路由转发 | |
lvs | 192.168.132.200/24 gw 192.168.132.10 | LVS | lo:192.168.132.100/32 或者添加网卡代替 |
RS1 | 192.168.132.101/24 gw 192.168.132.10 | web | lo:192.168.132.100/32 |
RS2 | 192.168.132.102/24 gw 192.168.132.10 | web | lo:192.168.132.100/32 |
3.2.2 router配置
echo "net.ipv4.ip_forward=1" >/etc/sysctl.d/ip_forward.conf
sysctl -p
3.2.3 LVS的配置
yum install ipvsadm -y
ipvsadm -A -t 172.25.254.100:80 -s rr
ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.101:80 -m
ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.102:80 -m
ipvsadm -Ln
vim /etc/sysconfig/ipvsadm
ipvsadm -Sn >/etc/sysconfig/ipvsadm-config
systemctl restart ipvsadm.service
ipvsadm -R < /etc/sysconfig/ipvsadm-config
ip addr add dev lo 192.168.132.100/32
3.2.4 web服务器配置
ip addr add dev lo 192.168.132.100/32
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
3.2.5命令解释
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
目的:在RS1和RS2中解决响应问题
arp_ignore和arp_announce参数分别有all,default,lo,eth0等对应不同网卡。当all和具体网卡的参数值不一致时,配置为较大值的生效。一般只需修改all和某个具体网卡的参数即可。
arp_ignore参数
arp_ignore参数的作用是控制系统在收到外部的arp请求时,是否要返回arp响应
0:响应任意网卡上接收到的对本机IP地址的arp请求(包括环回网卡上的地址),而不管该目的IP是否在接收网卡上。
1:只响应目的IP地址为接收网卡上的本地地址的arp请求。
2:只响应目的IP地址为接收网卡上的本地地址的arp请求,并且arp请求的源IP必须和接收网卡同网段。
3:如果ARP请求数据包所请求的IP地址对应的本地地址其作用域(scope)为主机(host),则不回应ARP响应数据包,如果作用域为全局(global)或链路(link),则回应ARP响应数据包。
4~7:保留未使用
8:不回应所有的arp请求
arp_announce参数
arp_announce的作用是控制系统在对外发送arp请求时,如何选择arp请求数据包的源IP地址。(比如系统准备通过网卡发送一个数据包a,要获取目的IP对应的MAC地址,就需要发送arp请求。arp请求的目的IP自然就是想要获取其MAC地址的IP,而arp请求的源IP是什么呢? 可能第一反应会以为肯定是数据包a的源IP地址,但这不一定,因为arp请求的源IP是可以选择的,控制这个地址如何选择就是arp_announce)arp_announce参数常用的取值有0,1,2。
0:允许使用任意网卡上的IP地址作为arp请求的源IP,通常就是使用数据包a的源IP。
1:尽量避免使用不属于该发送网卡子网的本地地址作为发送arp请求的源IP地址。
2:忽略IP数据包的源IP地址,选择该发送网卡上最合适的本地地址作为arp请求的源IP地址。
3.2.6 注意事项
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
需要写两个配置文件只写lo/arp_ignore不生效
lo接口必须是32位
3.2.7 运行过程
LVS
server2 和 server1同理
3.2.8 测试结果
3.3 TUN模式
LVS的Tun模式(隧道模式)是利用ip tunnel技术原理,在不改变原有的ip包头首部信息的基础上再封装一层ip首部信息,再利用路由的原理将请求转交给后端RS server。TUN模式的优点是DS和RS不需要在同一网段,可以实现不同网络之间的访问。相比LVS/DR模式,LVS/TUN对网络的消耗较大,因为要支持ip tunnel的开销
3.4 fullnet模式
fullnat:通过同时修改请求报文的源IP地址和目标IP地址进行转发
相比net模式多修改了源IP
4.算法
4.1.lvs静态调度算法
4.1.1 RR:roundrobin 轮询
RS分别被调度
![](https://i-blog.csdnimg.cn/direct/60ffc4ad6f464f63b5c73177863d4ec9.png)
![](https://i-blog.csdnimg.cn/direct/4b38604f163d4bc18dac6b823136fdc0.png)
4.1.2 WRR:Weighted RR
![](https://i-blog.csdnimg.cn/direct/378afdff94b34d8b916cd5affc191612.png)
![](https://i-blog.csdnimg.cn/direct/eec25323709046a499c5aa8f95248a65.png)
![](https://i-blog.csdnimg.cn/direct/a05bcb560d1b4a90831e0a0587122b6b.png)
4.1.3 SH:Source Hashing
![](https://i-blog.csdnimg.cn/direct/bb747ba943964847a2daf69f7edfdc07.png)
![](https://i-blog.csdnimg.cn/direct/aa035adc617444688df2c8ee3c7b9bd2.png)
4.1.4 DH:Destination Hashing
![](https://i-blog.csdnimg.cn/direct/efe763baa3a24b5fa28619af15567a9c.png)
![](https://i-blog.csdnimg.cn/direct/ab68fae5c3a7473d831483b921934e71.png)
4.2.lvs动态调度算法
主要根据RS当前的负载状态及调度算法进行调度Overhead=value较小的RS会被调度
4.2.1 LC:least connections(最少链接发)
![](https://i-blog.csdnimg.cn/direct/710ebf135f5a4951ae1c35faebd767a8.png)
4.2.2 WLC:Weighted LC(权重最少链接)
4.2.3 SED:Shortest Expection Delay
4.2.3 NQ:Never Queue
第一轮均匀分配,后续SED
4.2.5 LBLC:Locality-Based LC
动态的DH算法,使用场景:根据负载状态实现正向代理
4.2.6 LBLCR:LBLC with Replication
5.防火墙标签解决轮询错误
5.1.轮询规则中可能会遇到的错误
yum install mod_ssl -y
systemctl restart httpd #重启服务采用mod_ssl自带的加密
curl -k https://192.168.132.101
#两台RS都做
![](https://i-blog.csdnimg.cn/direct/9b72dabb4a27466dbbf308c3a0e625de.png)