LVS 负载均衡

目录

[LVS 体系结构](#LVS 体系结构)

[LVS 相关概念术语](#LVS 相关概念术语)

[lvs 集群常见类型](#lvs 集群常见类型)

实验一:

[LVS NAT模式](#LVS NAT模式)

[LVS NAT特性](#LVS NAT特性)

实验二:

[LVS DR模式](#LVS DR模式)

[LVS DR特性](#LVS DR特性)


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 相关概念术语

  1. VS: Virtual Server。负责调度。
  2. RS:Real Server。后端真实的工作服务器,负责真正提供服务。
  3. DS(Director Server):指的是前端负载均衡器节点,调度服务器,将负载分发到Real Server的服务器上。
  4. VIP:Virtual IP。虚拟 IP,向外部直接面向用户请求,作为用户请求的目标的IP地址。[ VS外网的IP ]
  5. DIP:Director IP Address。Director连接到Real Server的IP地址。主要用于和内部主机通讯。[ VS内网的IP ]
  6. RIP:Real IP Address。真实IP地址,(后端服务器)集群节点上使用的IP地址。
  7. 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_ignorearp_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

测试效果如下:

相关推荐
长弓聊编程8 分钟前
Linux系统使用valgrind分析C++程序内存资源使用情况
linux·c++
cherub.15 分钟前
深入解析信号量:定义与环形队列生产消费模型剖析
linux·c++
梅见十柒38 分钟前
wsl2中kali linux下的docker使用教程(教程总结)
linux·经验分享·docker·云原生
Koi慢热42 分钟前
路由基础(全)
linux·网络·网络协议·安全
传而习乎1 小时前
Linux:CentOS 7 解压 7zip 压缩的文件
linux·运维·centos
soulteary1 小时前
突破内存限制:Mac Mini M2 服务器化实践指南
运维·服务器·redis·macos·arm·pika
我们的五年1 小时前
【Linux课程学习】:进程程序替换,execl,execv,execlp,execvp,execve,execle,execvpe函数
linux·c++·学习
爱吃青椒不爱吃西红柿‍️1 小时前
华为ASP与CSP是什么?
服务器·前端·数据库
IT果果日记1 小时前
ubuntu 安装 conda
linux·ubuntu·conda
Python私教1 小时前
ubuntu搭建k8s环境详细教程
linux·ubuntu·kubernetes