一、lvs简介
"LVS"通常指的是 "Linux Virtual Server"(Linux虚拟服务器),这是一个开源的负载均衡解决方案,由章文嵩博士在1998年发起。LVS被设计用于创建高性能和高可用性的服务器集群,以处理大量的并发服务请求。
LVS的工作原理是将一组真实的服务器透明地连接起来,对外表现为一个虚拟的服务节点。当客户端向该虚拟节点发送请求时,LVS会根据配置好的调度算法将请求分发到后端的真实服务器上进行处理。这样可以有效提高系统的吞吐量、可靠性和可用性。
LVS支持多种调度算法,包括但不限于轮询(Round Robin)、最少连接(Least Connections)和目标地址散列(Destination Hashing)等。此外,LVS还可以与IPVS(IP Virtual Server)模块结合使用,后者提供了更高效的状态跟踪机制和更多的调度策略。
LVS广泛应用于各种场景,如Web服务器集群、数据库服务器集群以及其他需要高并发处理能力的应用程序中。
二、集群和分布式
2.1 集群CLUSTER
2.2 分布式
2.3 区别
三、lvs集群的类型
1、nat模式
1.1原理
![](https://i-blog.csdnimg.cn/direct/59f6c6d9fb6c4eff9b3e219954f857b1.png)
1.1.1运行逻辑
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 的调度机容易阻塞
1.1.2 NAT 模式的优缺点:
优点:
- 支持 Windows 操作系统;
- 支持端口映射,如 RS 服务器 PORT 与 VPORT 不一致的话,LVS 会修改目的 IP 地址和 DPORT 以支持端口映射;
缺点:
- RS 服务器需配置网关;
- 双向流量对 LVS 会产生较大的负载压力;
1.2 真机实验
1.2.1环境搭配
主机名 | ip | vip | 角色 |
lvs | 172.25.254.100 | 192.168.178.100 | lvs |
node1 | 192.168.178.10 | 测试机 | |
server1 | 172.168.178.1 GW 172.25.254.100 | null | |
server2 | 192.168.178.1 GW 172.25.254.100 | null |
1.2.1 配置命令
1、我们需要在lvs中启用内核路由功能
echo "net.ipv4.ip_forward=1" > /etc/sysctl.d/ip_forward.confsysctl --system
2、在lvs中安装ipvsadm
yum install ipvsadm -y
3、在lvs中添加调度策略
ipvsadm -A -t 172.25.254.100:80 -s rripvsadm -a -t 172.25.254.100:80 -r 192.168.0.101:80ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.101:80 -mipvsadm -a -t 172.25.254.100:80 -r 192.168.0.102:80 -m
4、查看调度策略
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.25.250.100:80 rr
-> 192.168.0.10:80 Masq 1 0 0
-> 192.168.0.20:80 Masq 1 0 0
5、保存策略
[root@lvs ~]# ipvsadm -Sn
-A -t 172.25.250.100:80 -s rr
-a -t 172.25.250.100:80 -r 192.168.0.10:80 -m -w 1
-a -t 172.25.250.100:80 -r 192.168.0.20:80 -m -w 1
[root@lvs ~]# cat /etc/sysconfig/ipvsadm
-A -t 172.25.250.100:80 -s rr
-a -t 172.25.250.100:80 -r 192.168.0.10:80 -m -w 1
-a -t 172.25.250.100:80 -r 192.168.0.20:80 -m -w 1
为临时的 需设置开机启动
[root@lvs ~]# systemctl enable --now ipvsadm.service
配置server1和server2
dnf install httpd -y
[root@rs1 ~]# echo welcome to RS1 > /var/www/html/index.html
[root@rs1 ~]# systemctl restart httpd
[root@rs2 ~]# echo welcome to RS2 > /var/www/html/index.html
[root@rs2 ~]# systemctl restart httpd
最后使用node1测试即可
2、DR模式
2.1 简介
LVS-DR 模式,Director Server 作为群集的访问入口,不作为网关使用,节点 Director Server 与 Real Server 需要在同一个网络中,返回给客户端的数据不需要经过 Director Server。为了响应对整个群集的访问,Director Server 与 Real Server 都需要配置 VIP 地址。
工作原理如下图所示:
2.2数据包流向分析
1、客户端发送请求到 Director Server,请求的数据报文(源 IP 是 CIP,目标 IP 是 VIP) 到达内核空间。
2、Director Server 和 Real Server 在同一个网络中,数据通过二层数据链路层来传输。
3、内核空间判断数据包的目标 IP 是本机 VIP,此时 IPVS 比对数据包请求的服务是否是集群服务,是集群服务就重新封装数据包。修改源 MAC 地址为 Director Server 的 MAC 地址,修改目标 MAC 地址为 Real Server 的 MAC 地址,源 IP 地址与目标 IP 地址没有改 变,然后将数据包发送给 Real Server。
4、到达 Real Server 的请求报文的 MAC 地址是自身的 MAC 地址,就接收此报文。数 据包重新封装报文(源 IP 地址为 VIP,目标 IP 为 CIP),将响应报文通过 lo 接口传送给物理 网卡然后向外发出。
5、Real Server 直接将响应报文传送到客户端。
2.3 LVS-DR 模式的特点
1、Director Server 和 Real Server 必须在同一个物理网络中。
2、Real Server 可以使用私有地址,也可以使用公网地址。如果使用公网地址,可以通过 互联网对 RIP 进行直接访问。
3、所有的请求报文经由 Director Server,但回复响应报文不能经过 Director Server。
4、Real Server 的网关不允许指向 Director Server IP,即不允许数据包经过 Director S erver。
5、Real Server 上的 lo 接口配置 VIP 的 IP 地址。
2.4 构建LVS-DR集群
主机
名
|
ip
|
vip
|
角色
|
client
|
172.25.254.10 vmware NAT
|
null
|
测试主机
|
router
|
NAT-eth0:172.25.254.100
,仅主机
-
eth1:192.168.0.10
|
null
|
路由器
|
lvs
|
192.168.0.200
,
GW 192.168.0.10
仅主机
|
lo:192.168.0.100
|
调度器
|
RS1
|
192.168.0.101
,
GW 192.168.0.10
仅主机
|
lo:192.168.0.100
|
web
服务器1
|
RS2
|
192.168.0.102, GW 192.168.0.10
仅主机
|
lo:192.168.0.100
|
web
服务器2
|
2.4.1 步骤
1、添加回环ip/vip
2、安装ipvasdm软件
[root@lvs ~]# dnf install ipvsadm -y
3、添加调度策略
[root@lvs ~]# ipvsadm -A -t 192.168.0.200:80 -s wrr
[root@lvs ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10:80 -g -w 1
[root@lvs ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20:80 -g -w 2
4、保存策略
[root@lvs ~]# ipvsadm -Sn > /etc/sysconfig/ipvsadm
[root@lvs ~]# cat /etc/sysconfig/ipvsadm
-A -t 192.168.0.200:80 -s wrr
-a -t 192.168.0.200:80 -r 192.168.0.10:80 -g -w 1
-a -t 192.168.0.200:80 -r 192.168.0.20:80 -g -w 2
[root@lvs ~]# systemctl restart ipvsadm
######################################################################################
-A -t 192.168.0.200:80 -s wrr
添加一个新的服务,服务的 IP 地址为 192.168.0.200 ,端口为 80 ,使用加权轮询(wrr)的调度算法
-a -t 192.168.0.200:80 -r 192.168.0.10:80 -g -w 1
为上述服务添加一个真实服务器,真实服务器的 IP 地址为 192.168.0.10 ,端口为 80 ,采用网关(-g)模式,权重为 1
-a -t 192.168.0.200:80 -r 192.168.0.20:80 -g -w 2
为上述服务再添加一个真实服务器,真实服务器的 IP 地址为 192.168.0.20 ,端口为 80 ,采用网关模式,权重为 2
######################################################################################
-g 模式指的是 DR(Direct Routing,直接路由)模式
在 DR 模式下:
客户端的请求到达 LVS 调度器后,调度器根据负载均衡算法选择后端的真实服务器。
调度器将请求数据包的目标 MAC 地址修改为所选真实服务器的 MAC 地址,然后直接将数据包发送到真实服务器所在的网络。
真实服务器处理完请求后,直接将响应数据包发送给客户端,而不再经过 LVS 调度器
5、设置内核参数
realserver1和realserver2
1、添加lo回环ip/VIP
ip addr add dev lo 192.168.0.200/32
2、 解决响应问题
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
3、web配置
4、客户机测试
[root@client ~]# curl 192.168.0.200
welcome to RS2
[root@client ~]# curl 192.168.0.200
welcome to RS1
[root@client ~]# curl 192.168.0.200
welcome to RS2
[root@client ~]# curl 192.168.0.200
welcome to RS2
[root@client ~]# curl 192.168.0.200
welcome to RS1
[root@client ~]# curl 192.168.0.200
welcome to RS2
#循环测试
[root@client ~]# for i in {1..10}
> do
> curl 192.168.0.200
> done
welcome to RS2
welcome to RS1
welcome to RS2
welcome to RS2
welcome to RS1
welcome to RS2
welcome to RS2
welcome to RS1
welcome to RS2
welcome to RS2
2.3 TUN模式
![](https://i-blog.csdnimg.cn/direct/a7f34d7e690b41af86b849cef8c09f62.png)
2.3.1 原理
(1) 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP 。
(2) PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
(3) IPVS比对数据包请求的服务是否为集群服务,若是,在请求报文的首部再次封装一层IP报文,封装源IP为为DIP,目标IP为RIP。然后发至POSTROUTING链。 此时源IP为DIP,目标IP为RIP
(4) POSTROUTING链根据最新封装的IP报文,将数据包发至RS(因为在外层封装多了一层IP首部,所以可以理解为此时通过隧道传输)。 此时源IP为DIP,目标IP为RIP
(5) RS接收到报文后发现是自己的IP地址,就将报文接收下来,拆除掉最外层的IP后,会发现里面还有一层IP首部,而且目标是自己的lo接口VIP,那么此时RS开始处理此请求,处理完成之后,通过lo接口送给eth0网卡,然后向外传递。 此时的源IP地址为VIP,目标IP为CIP
(6) 响应报文最终送达至客户端
2.3.2模式特点
-
集群节点不必位于同一个物理网络但必须都拥有公网 IP(或都可以被路由)
-
真实服务器不能将网关指向负载调度器
-
RIP 必须是公网地址
-
负载调度器只负责入站请求
-
不支持端口映射功能
-
发送方和接收方必须支持隧道功能
三、其他问题
1、防火墙轮询问题
iptables -t mangle -A PREROUTING -d $vip -p $proto -m multiport --dports $portl,$port2,..-i MARK --set-mark NUMBER
ipvsadm -A -f NUMBER [options]