目录
LVS是Linux virtual server的缩写,是一个高性能的、开源的负载均衡器,它运行于Linux操作系统之上,用于将网络请求分发给后端服务器集群中的服务器。
LVS简单工作原理为用户请求LVS VIP,LVS根据转发方式和算法,将请求转发给后端服务器,后端服务器接收到请求,返回给用户。
LVS 体系结构
LVS架构主要由三个部分组成:
1)负载均衡层:位于整个集群系统的最前端,由一台或多台负载调度器(Director Server)组成,LVS模块就安装在调度器上。
2)服务器群组层:由一组实际运行的应用服务器(Real Server)组成,可以是web服务器、mail服务器、DNS服务器、FTP服务器等。
3)数据共享存储层:为所有Real Server提供共享存储空间和内容一致性的存储区域,一般通过NFS网络文件系统或集群文件系统实现。
LVS 相关概念术语
- VS: Virtual Server。负责调度。
- RS:Real Server。后端真实的工作服务器,负责真正提供服务。
- DS(Director Server):指的是前端负载均衡器节点,调度服务器,将负载分发到Real Server的服务器上。
- VIP:Virtual IP。虚拟 IP,向外部直接面向用户请求,作为用户请求的目标的IP地址。[ VS外网的IP ]
- DIP:Director IP Address。Director连接到Real Server的IP地址。主要用于和内部主机通讯。[ VS内网的IP ]
- RIP:Real IP Address。真实IP地址,(后端服务器)集群节点上使用的IP地址。
- CIP:Client IP。客户端的IP地址。
访问流程:CIP VIP == DIP RIP
lvs 集群常见类型
按转发方式划分:
LVS-NAT(网络地址转换):LVS将请求报文中的目标地址和目标端口修改为选定到的真实服务器的IP和端口,从而实现报文的转发。
LVS-DR(直接路由):也称为Direct Routing,通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变。
LVS-TUN(隧道):不修改请求报文的IP首部,而在源IP报文之外再封装一个IP首部(源IP是DIP,目标IP是RIP),将报文发往挑选出的目标Real Server,Real Server直接响应给客户端(源IP是VIP,目标IP是CIP)。
LVS-FULLNAT:通过同时修改请求报文的源IP地址和目标IP地址进行转发。
实验一:
LVS NAT模式
NAT 模式双向流量都经过 LVS。
LVS NAT特性
- VIP和RIP不需要在同一个网段内;
- NAT的包的进出都需要经过LVS,所以LVS可能会成为一个系统的瓶颈问题。
-----------------------------------------------------------
lvs:设置两个网卡:eth0 172.25.254.100/24 NAT eth1 192.168.0.100/24 仅主机
webserver1: eth0 192.168.0.10/24 仅主机模式
webserver2 :eth0 192.168.0.20/24 仅主机模式
lvs:调度器
systemctl disable --now firewalld.service
vim /etc/sysctl.conf ##配置内核参数:net.ipv4.ip_forward = 1 启用IP转发
sysctl -p ##应用更改
yum install httpd -y
yum install ipvsadm -y ##安装工具包
:ipvsadm
是一个用于管理 Linux 虚拟服务器(IPVS)的工具,它允许系统管理员设置和管理负载均衡器。ipvsadm -A -t 172.25.254.100:80 -s rr ##添加虚拟服务
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
ipvsadm -Ln ##列出 Linux 虚拟服务器(IPVS)表中当前配置
systemctl restart httpd
webserver1: #webserver2类似
systemctl disable --now firewalld
yum install httpd -y
echo webserver1-192.168.0.10 >/var/www/html/index.html
systemctl restart httpd
在lvs上测试:
curl 192.168.0.10
curl 192.168.0.20
实验二:
LVS DR模式
DR 模式 LVS 逻辑比较简单,数据包通过直接路由方式转发给后端服务器,而且响应数据包是由 RS 服务器直接发送给客户端,不经过 LVS。
LVS DR特性
- 前端路由将目标地址为VIP报文统统发给Director Server;
- RS跟Director Server必须有一个网卡在同一个物理网络中;
- 所有的请求报文经由Director Server,但响应报文必须不能进过Director Server;
- 所有的real server机器上都有VIP地址。
-----------------------------------------------------------
router:路由器
NAT模式:172.25.254.100/24 仅主机模式:192.168.0100/24
systemctl disable --now firewalld.service
vim /etc/NetworkManager/system-connections/eth0.connection
vim /etc/NetworkManager/system-connections/eth1.connection
nmcli connection reload
nmcli connection up eth0
nmcli connection up eth1
vim /etc/sysctl.conf
sysctl -p
webserver1:web服务器1
仅主机:ip:192.168.0.10;gateway:192.168.0.100
systemctl disable --now firewalld.service
vim /etc/NetworkManager/system-connections/eth0.connection
nmcli connection reload
nmcli connection up eth0
route -n
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
【arp_ignore
和arp_announce
是与ARP(地址解析协议)相关的内核参数】ip addr a 192.168.0.200/32 dev lo
nmcli connection reload
webserver1 和 webserver2 解决响应问题:
webserver2:web服务器2
仅主机:ip:192.168.0.20;gateway:192.168.0.100
systemctl disable --now firewalld.service
vim /etc/NetworkManager/system-connections/eth0.connection
nmcli connection reload
nmcli connection up eth0
route -n
##解决响应问题
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
ip addr a 192.168.0.200/32 dev lo ##将IP地址添加到回环接口
nmcli connection reload
lvs:调度器
仅主机:ip:192.168.0.50/24;lo:192.168.0.200/32
systemctl disable --now firewalld.service
vim /etc/sysconfig/network-scripts/ifcfg-eth1 #lvs环境我用的RedHat7版本
nmcli connection reload
nmcli connection up eth1
ip addr a 192.168.0.200/32 dev lo
nmcli connection reload
ipvsadm -A -t 192.168.0.200:80 -s wrr
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20:80 -g -w 2
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10:80 -g -w 1
systemctl restart httpd
client:测试主机
NAT:ip:172.25.254.200/24;gateway:172.25.254.100
systemctl disable --now firewalld.service
测试效果如下: