目录
一、什么是LVS
二、LVS的核心思想
三、 LVS的优势
四、LVS的调度算法
4.1. LVS的调度算法类型
4.2. LVS静态调度算法
4.3. LVS动态调度算法
4.4.在4.15版本内核以后新增调度算法
五、LVS软件相关信息
六、ipvsadm命令
七、 LVS的NAT模式实验详解
7.1实验环境
7.2实验要求
7.3实验步骤
1.环境搭建
2. Lvs中打开内核路由功能
3.webserver1和webserver2配置
4.webserver1和webserver2下载httpd模块并写页面内容
5. LVS中测试,保证可以正常访问后端两台真实服务器
6. LVS中安装软件
7. LVS添加服务和算法规则(-s rr表示调度算法是:轮询算法)
8.客户机访问测试
7.4 nat模式数据逻辑
八、LVS的DR模式实验详解
8.1实验环境
8.2实验要求
8.3实验步骤
1.环境搭建
2.路由器开启内核路由功能
3.配置rs主机中使vip不对外响应(webserver1和webserver2)
4.在LVS主机中和rs主机中添加VIP
5.客户机测试
6.Wireshark抓包查看MAC地址变化
8.4 DR模式数据逻辑
九、LVS-火墙mark标记解决调度问题
9.1实验环境:
9.2实验要求:
9.3实验步骤
1.RS安装mod_ssl模块,让RS支持https
2.查看端口,确保端口都存在
3.LVS主机中为端口做标记
4.客户端访问测试
十、LVS的TUN模式(不常用了解一下)
10.1转发方式
10.2 TUN模式数据传输过程
10.3 TUN详解
十一、LVS的fullnet模式(了解)
11.1 fullnet模式简介
11.2 fullnet模式详解
一、什么是LVS
LVS(Linux Virtual Server)是一个开源的负载均衡软件项目,它是基于Linux操作系统的网络负载均衡解决方案。LVS通过将网络请求分发到不同的服务器上,以实现负载均衡和高可用性。
二、LVS的核心思想
LVS的核心思想是将前端的请求通过一个负载均衡器分发给多个后端服务器进行处理。负载均衡器可以使用多种技术实现,如IP负载均衡、NAT负载均衡和DR负载均衡。其中,IP负载均衡是LVS的核心功能,它通过将前端IP地址替换为负载均衡器的IP地址,然后根据负载均衡算法将请求转发给后端的真实服务器。
三、 LVS的优势
LVS的优势在于高性能、高可扩展性和高可用性,它可以实现请求的平衡分发,提高系统的处理能力和可用性。同时,LVS具有稳定性和可靠性,可以通过故障检测和故障转移机制,实现故障切换和容错处理。
四、LVS的调度算法
4.1. LVS的调度算法类型
ipvs scheduler:根据其调度时是否考虑各RS当前的负载状态被分为两种:静态方法和动态方法
静态方法:仅根据算法本身进行调度,不考虑RS的负载情况
动态方法:主要根据每RS当前的负载状态及调度算法进行调度Overhead=value较小的RS将被调度
4.2. LVS静态调度算法
1、RR:roundrobin 轮询 RS分别被调度,当RS配置有差别时不推荐
2、WRR:Weighted RR,加权轮询根据RS的配置进行加权调度,性能差的RS被调度的次数少
3、SH:Source Hashing,实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往 第一次挑中的RS,从而实现会话绑定
4、DH:Destination Hashing;目标地址哈希,第一次轮询调度至RS,后续将发往同一个目标地址的请 求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如:宽带运营商
4.3. LVS动态调度算法
原理:
主要根据RS当前的负载状态及调度算法进行调度Overhead=value较小的RS会被调度
1、LC:least connections(最少链接发)
适用于长连接应用Overhead(负载值)=activeconns(活动链接数) x 256+inactiveconns(非活 动链接数)
2、WLC:Weighted LC(权重最少链接) 默认调度方法Overhead=(activeconns x 256+inactiveconns)/weight
3、SED:Shortest Expection Delay,
初始连接高权重优先Overhead=(activeconns+1+inactiveconns) x 256/weight 但是,当node1的权重为1,node2的权重为10,经过运算前几次的调度都会被node2承接
4、NQ:Never Queue,第一轮均匀分配,后续SED 5、LBLC:Locality-Based LC,动态的DH算法,使用场景:根据负载状态实现正向代理
6、LBLCR:LBLC with Replication,带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重的复制 到负载轻的RS
4.4.在4.15版本内核以后新增调度算法
1.FO(Weighted Fai Over)调度算法:常用作灰度发布 在此FO算法中,遍历虚拟服务所关联的真实服务器链表,找到还未过载(未设置IP_VS_DEST_F OVERLOAD标志)的且权重最高的真实服务器,进行调度 当服务器承接大量链接,我们可以对此服务器进行过载标记(IP_VS_DEST_F OVERLOAD),那么vs调度 器就不会把链接调度到有过载标记的主机中。
2.OVF(Overflow-connection)调度算法基于真实服务器的活动连接数量和权重值实现。将新连接调度到权重值最高的真实服务器,直到其活动 连接数量超过权重值,之后调度到下一个权重值最高的真实服务器,在此OVF算法中,遍历虚拟服务相关 联的真实服务器链表,找到权重值最高的可用真实服务器。一个可用的真实服务器需要同时满足以下条 件:
未过载(未设置IP_VS_DEST_F OVERLOAD标志)
真实服务器当前的活动连接数量小于其权重值 其权重值不为零
五、LVS软件相关信息
- 程序包:ipvsadm Unit File: ipvsadm.service
- 主程序:/usr/sbin/ipvsadm
- 规则保存工具:/usr/sbin/ipvsadm-save
- 规则重载工具:/usr/sbin/ipvsadm-restore
- 配置文件:/etc/sysconfig/ipvsadm-config ipvs
- 调度规则文件:/etc/sysconfig/ipvsadm
六、ipvsadm命令
核心功能:
- 集群服务管理:增、删、改
- 集群服务的RS管理:增、删、改
- 查看
部分命令展示:
命令 | 描述 | 示例 |
---|---|---|
ipvsadm -A | 添加一个新的虚拟服务 | ipvsadm -A -t 192.168.1.100:80 -s rr |
ipvsadm -E | 修改已存在的虚拟服务 | ipvsadm -E -t 192.168.1.100:80 -s wrr |
ipvsadm -D | 删除虚拟服务 | ipvsadm -D -t 192.168.1.100:80 |
ipvsadm -a | 添加一个真实服务器到虚拟服务中 | ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.200 -m |
ipvsadm -e | 修改真实服务器的参数 | ipvsadm -e -t 192.168.1.100:80 -r 192.168.1.200 -g -w 10 |
ipvsadm -d | 从虚拟服务中删除真实服务器 | ipvsadm -d -t 192.168.1.100:80 -r 192.168.1.200 |
ipvsadm -L | 查看 IPVS 表 | ipvsadm -L -n |
ipvsadm -C | 清空 IPVS 表 | ipvsadm -C |
ipvsadm -S | 保存 IPVS 表到指定文件 | ipvsadm -S > /etc/sysconfig/ipvsadm |
ipvsadm -R | 从指定文件恢复 IPVS 表 | ipvsadm -R < /etc/sysconfig/ipvsadm |
如果想要了解更多的ipvsadm命令可以访问下面链接学习:
https://www.cnblogs.com/rushiyi/p/12425905.htmlhttps://www.cnblogs.com/rushiyi/p/12425905.html
七、 LVS的NAT模式实验详解
7.1实验环境
前提:因为ipvs的作用点是在PREROUTING和INPUT链之间,所以如果在prerouting中设定规则会干扰ipvs的工 作。所以在做lvs时要把iptables的火墙策略全清理掉。
1.使用母盘主机克隆四台红帽9机子。
2.两台作为真实服务器,一台作为LVS
负载调度器,一台作为客户端。
3.LVS负载调度器两张网卡,一张NAT,一张仅主机;NAT作为VIP连接客户端,仅主机作为DIP连接两台服务器,作为两台服务器的网关;NAT网卡在:172.25.254.0/24网段,IP地址是172.25.254.100/24;仅主机在192.168.0.0/24网段,IP地址是192.168.0.100。
4.两台真实服务器一张网卡,模式为仅主机,网段是192.168.0.0/24;webserver1的IP地址是192.168.0.10/24;webserver2的IP地址是192.168.0.20/24。
5.客户端一张网卡,模式为NAT模式,网段是172.25.254.0/24,IP地址是:172.25.254.200。
7.2实验要求
要求从客户端访问LVS
能做到负载均衡
第一次如果是webserver1
响应的,第二次就是webserver2
响应。
7.3实验步骤
1.环境搭建
LVS
主机两张网卡,一张NAT模式,一张仅主机模式。NAT作为VIP连接客户端,仅主机作为DIP连接两台服务器,作为两台服务器的网关。
NAT网卡在:172.25.254.0/24网段;仅主机在192.168.0.0/24网段,对应的IP配置如下图:
NAT:
仅主机:
2. Lvs
中打开内核路由功能
#查看打开内核路由功能的命令
[root@LVS ~]# sysctl -a | grep ip_forward
net.ipv4.ip_forward = 0 # 0表示关闭,1表示打开
net.ipv4.ip_forward_update_priority = 1
net.ipv4.ip_forward_use_pmtu = 0
#修改配置文件
[root@LVS ~]# vim /etc/sysctl.conf
[root@LVS ~]# cat /etc/sysctl.conf
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv4.ip_forward = 1
[root@LVS ~]# sysctl -p
net.ipv4.ip_forward = 1
3.webserver1
和webserver2
配置
webserver1:
#配置IP地址和网关,ipv4.method manual:表示为手动模式 connection.autoconnect yes:表示为自动连接
[root@webserver1 ~]# nmcli connection modify ens160 ipv4.addresses 192.168.0.10/24 ipv4.gateway 192.168.0.100 ipv4.method manual connection.autoconnect yes
#重启网卡
[root@webserver1 ~]#nmcli connection up ens160
webserver2:
#配置IP地址和网关,ipv4.method manual:表示为手动模式 connection.autoconnect yes:表示为自动连接
[root@webserver2 ~]# nmcli connection modify ens160 ipv4.addresses 192.168.0.20/24 ipv4.gateway 192.168.0.100 ipv4.method manual connection.autoconnect yes
#重启网卡
[root@webserver2 ~]#nmcli connection up ens160
4.webserver1
和webserver2下载httpd模块并写页面内容
webserver1:
[root@webserver1 ~]# yum install httpd -y
[root@webserver1 ~]# echo webserver1 192.168.0.10 > /var/www/html/index.html
[root@webserver1 ~]# cat /var/www/html/index.html
webserver1 192.168.0.10
webserver2:
[root@webserver2 ~]# yum install httpd -y
[root@webserver2 ~]# echo webserver1 192.168.0.20 > /var/www/html/index.html
[root@webserver2 ~]# cat /var/www/html/index.html
webserver1 192.168.0.20
注意:
在企业中两个服务器的页面应该是一致的,但是这里是实验环境,我们设不一致,方面我们观察实验结果。
5. LVS
中测试,保证可以正常访问后端两台真实服务器
[root@LVS ~]# curl 192.168.0.10
webserver1 192.168.0.10
[root@LVS ~]# curl 192.168.0.20
webserver2 192.168.0.20
6. LVS
中安装软件
7. LVS
添加服务和算法规则(-s rr
表示调度算法是:轮询算法)
8.客户机访问测试
[root@localhost ~]# curl 172.25.254.100
webserver1 192.168.0.10
[root@localhost ~]# curl 172.25.254.100
webserver2 192.168.0.20
[root@localhost ~]# curl 172.25.254.100
webserver1 192.168.0.10
[root@localhost ~]# curl 172.25.254.100
webserver2 192.168.0.20
7.4 nat模式数据逻辑
1.客户端发送访问请求,请求数据包中含有请求来源(cip),访问目标地址(VIP)访问目标端口 (9000port)
2.VS服务器接收到访问请求做DNAT把请求数据包中的目的地由VIP换成RS的RIP和相应端口
3.RS1相应请求,发送响应数据包,包中的相应保温为数据来源(RIP1)响应目标(CIP)相应端口 (9000port)
4.VS服务器接收到响应数据包,改变包中的数据来源(RIP1-->VIP),响应目标端口(9000-->80)
5.VS服务器把修改过报文的响应数据包回传给客户端
八、LVS的DR模式实验详解
8.1实验环境
1.母盘克隆五台红帽9机子
2.两台作为真实服务器,一台作为LVS
负载调度器,一台作为路由器,一台作为客户端
3.webserver1和webserver2环境配置和上个实验一样。
4.LVS只需一张仅主机的网卡,IP地址为:192..168.0.50;禁用上个实验NAT那张网卡。
5.路由器两张网卡,一张NAT模式,IP地址为:172.25.254.100,作为客户端的网关;一张仅主机连接内网,IP地址为:192.168.0.100,作为内网的网关。
6.客户端IP地址为:172.25.254.200,网关为:172.25.254.100.
8.2实验要求
要求从客户端访问LVS
能做到负载均衡,第一次如果是webserver1
响应的,第二次就是webserver2
响应。且服务器返回数据的时候是直接通过VIP
返回给客户端,不经过交换机这些。
8.3实验步骤
1.环境搭建
IP配置与上一个实验操作相同,这里不细说。参考上一个实验配置IP的方式,将实验环境搭建完成。LVS记得禁用网卡和内核路由功能。
LVS中禁用网卡的命令格式为:
nmcli device disconnect 网卡名
2.路由器开启内核路由功能
与上一个实验相同,在配置文件中加入命令即可。
3.配置rs
主机中使vip
不对外响应(webserver1和webserver2)
webserver1:
webserver2:
4.在LVS
主机中和rs
主机中添加VIP
在DR模式中,RS接收到访问请求后不需要回传给LVS调度器,直接把回传数据发送给client,所以RS和LVS上都要有vip
#配置环回网卡IP
[root@LVS ~]# ip a a 192.168.0.200/32 dev lo
rs主机配置相同,都是上面这一条命令。
注意:网段是/32,一定不要写错了,VIP要独立的应该网段。
5.客户机测试
[root@client ~]# curl 192.168.0.200
webserver2 192.168.0.20
[root@client ~]# curl 192.168.0.200
webserver2 192.168.0.20
[root@client ~]# curl 192.168.0.200
webserver1 192.168.0.10
[root@client ~]# curl 192.168.0.200
webserver2 192.168.0.20
[root@client ~]# curl 192.168.0.200
webserver2 192.168.0.20
[root@client ~]# curl 192.168.0.200
webserver1 192.168.0.10
6.Wireshark
抓包查看MAC地址变化
将自己所有主机的MAC地址记录一下,然后用抓包工具抓包查看一下,注意,抓的是内网的包。
8.4 DR模式数据逻辑
这也是前面要抓包的原因,因为DR模式在传递的时候IP层是不变的,IP地址都一样,改变的第二层MAC地址,所有只有通过抓包查看MAC地址的变化来观察原理。
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
九、LVS
-火墙mark标记解决调度问题
9.1实验环境:
1.在上一个实验的环境下继续完成实验。
9.2实验要求:
问题:以http和https为例,当我们在RS中同时开放80和443端口,那么默认控制是分开轮询的,这样我们就出 现了一个轮询错乱的问题 当我第一次访问80被轮询到RS1后下次访问443仍然可能会被轮询到RS1上
1.如果不做火墙mark标志,当客户端通过http
的80端口,和https
的443端口访问时,两次是后端同一台服务器发来的,如下所示:
[root@client ~]# curl 192.168.0.200; curl -k https://192.168.0.200
webserver1 192.168.0.20
webserver2 192.168.0.20
2.这是我们不想看见的,我们LVS
执行的算法是rr
轮询,要做到负载均衡,第一次http
如果是10主机发来的回复,那么第二次https
的应该是20主机发来的。这就是本次实验要实现的要求。
9.3实验步骤
1.RS
安装mod_ssl
模块,让RS
支持https
webserver1:
[root@webserver1 ~]# yum install mod_ssl -y
#一定要重启,不让不行
[root@webserver1 ~]# systemctl restart httpd
webserver2:
[root@webserver2 ~]# yum install mod_ssl -y
[root@webserver1 ~]# systemctl restart httpd
2.查看端口,确保端口都存在
[root@webserver1 ~]# netstat -lnupt | grep httpd
tcp6 0 0 :::80 :::* LISTEN 3855/httpd
tcp6 0 0 :::443 :::* LISTEN 3855/httpd
[root@webserver2 ~]# netstat -lnupt | grep httpd
tcp6 0 0 :::80 :::* LISTEN 3855/httpd
tcp6 0 0 :::443 :::* LISTEN 3855/httpd
3.LVS
主机中为端口做标记
#先清空规则
[root@LVS ~]# ipvsadm -C
[root@LVS ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
#为端口做标记 -A:添加;-D:删除
[root@LVS ~]# -t mangle -A PREROUTING -d 192.168.0.200 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 66
#基于标记定义集群服务
[root@LVS ~]# ipvsadm -A -f 66 -s rr
[root@LVS ~]# ipvsadm -a -f 66 -r 192.168.0.10 -g
[root@LVS ~]# ipvsadm -a -f 66 -r 192.168.0.20 -g
[root@LVS ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
FWM 66 rr
-> 192.168.0.10:0 Route 1 0 0
-> 192.168.0.20:0 Route 1 0 0
4.客户端访问测试
#-k:忽略https证书,不然访问不了
[root@client ~]# curl 192.168.0.200; curl -k https://192.168.0.200
webserver1 192.168.0.10
webserver2 192.168.0.20
[root@client ~]# curl 192.168.0.200; curl -k https://192.168.0.200
webserver1 192.168.0.10
webserver2 192.168.0.20
十、LVS的TUN模式(不常用了解一下)
10.1转发方式
不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而在原IP报文之外再封装一个IP首部 (源IP是DIP,目标IP是RIP),将报文发往挑选出的目标RS;RS直接响应给客户端(源IP是VIP,目标IP是CIP)
10.2 TUN模式数据传输过程
1.客户端发送请求数据包,包内有源IP+vip+dport
2.到达vs调度器后对客户端发送过来的数据包重新封装添加IP报文头,新添加的IP报文头中包含TUNSRCIP(DIP)+TUNDESTIP(RSIP1)并发送到RS1
3.RS收到VS调度器发送过来的数据包做出响应,生成的响应报文中包含SRCIP(VIP)+DSTIP(CIP)+port,响应数据包通过网络直接回传给client
10.3 TUN详解
如果想要了解更多可以访问一下链接:
https://www.cnblogs.com/luwei0915/articles/10488825.htmlhttps://www.cnblogs.com/luwei0915/articles/10488825.html
十一、LVS的fullnet模式(了解)
11.1 fullnet模式简介
fullnat:通过同时修改请求报文的源IP地址和目标IP地址进行转发
CIP --> DIP
VIP --> RIP
1.VIP是公网地址,RIP和DIP是私网地址,且通常不在同一IP网络;因此,RIP的网关一般不会指向DIP
2.RS收到的请求报文源地址是DIP,因此,只需响应给DIP;但Director还要将其发往Client
3.请求和响应报文都经由Director
4.支持端口映射
11.2 fullnet模式详解
如果想要了解更多可以访问一下链接:
https://blog.51cto.com/u_16099331/9937768https://blog.51cto.com/u_16099331/9937768