lvs(linux virtual server)实例

一.lvs概述

1.1什么是lvs

LVS(Linux Virtual Server)是一个基于Linux操作系统的虚拟服务器技术,用于实现负载均衡和高可用性。LVS通过将客户端的请求分发到多台后端服务器上,从而提高整体服务的处理能力和可靠性。LVS主要有两个组件:IPVS(IP Virtual Server)和LVS-NAT、LVS-DR、LVS-TUN三种工作模式。

1.2lvs的优点

高性能:LVS工作在内核层,性能高效,能够处理大量并发请求。

高可用性:通过配置Keepalived等工具,LVS可以实现高可用性,确保服务的持续运行。

灵活性强:支持多种负载均衡算法和工作模式,适应不同的应用场景。

二.lvs架构

2.1lvs整体架构

LVS的整体架构主要包括负载均衡器(Load Balancer)、后端服务器(Real Server)和客户端三部分。客户端的请求首先到达负载均衡器,然后由负载均衡器根据一定的调度算法将请求转发到后端服务器进行处理,处理结果再返回给客户端。

2.2lvs工作模式

LVS支持三种主要的工作模式:

LVS-NAT(Network Address Translation):在该模式下,负载均衡器不仅需要修改请求报文的目标地址,还需要修改响应报文的源地址,适用于小规模集群。

LVS-DR(Direct Routing):在该模式下,负载均衡器只修改请求报文的目标MAC地址,而不修改IP地址,后端服务器直接将响应报文发回客户端,适用于大规模集群。

LVS-TUN(IP Tunneling):该模式通过IP隧道将请求转发到后端服务器,后端服务器直接将响应报文发回客户端,适用于地理位置分散的集群。

三.lvs调度算法

3.1调度算法类型

根据其调度时是否考虑各RS当前的负载状态被分为两种:静态方法和动态方法。静态方法:仅根据算法本身进行调度,不考虑RS的负载情况。动态方法:主要根据每RS当前的负载状态及调度算法进行调度。

3.2静态算法

  1. 轮询(Round Robin,RR):将请求依次分配给各个真实服务器,依次循环。

  2. 加权轮询(Weighted Round Robin,WRR):给每个真实服务器设置一个权重,根据权重的比例将请求分配给服务器。权重越高,分配到的请求越多。

3.目标地址散列(Destination Hashing, DH):根据请求的目标 IP 地址进行哈希运算,将请求分配到固定的服务器。

4.源地址散列(Source Hashing, SH):根据请求的源 IP 地址进行哈希运算,将请求分配到固定的服务器。

3.3动态算法

  1. 最少连接(Least Connections,LC):将新的请求分配给当前连接数最少的真实服务器。

  2. 加权最少连接(Weighted Least Connections,WLC):为真实服务器设置权重,综合考虑服务器的权重和当前连接数来分配请求。

  3. 基于局部性的最少连接(Locality-Based Least Connections,LBLC):主要考虑请求的目标 IP 地址,优先将请求分配给同一 IP 地址对应的真实服务器。

  4. 带复制的基于局部性最少连接(Locality-Based Least Connections with Replication,LBLCR):结合了 LBLC 和复制功能,对于目标 IP 地址相同的请求,如果对应的真实服务器没有活动连接,则可以在有活动连接的真实服务器中选择一个,并复制该连接。

四.lvs的nat模式

nat模式需要三个虚拟机完成实验。其中lvs需要两个网络适配器,其中一个为nat模式,一个为仅主机模式。而server1和server2均为仅主机模式。

配置ip

lvs主机

[root@lvs ~]# cat /etc/NetworkManager/system-connections/eth1.connection 
[connection]
id=eth1
type=ethernet
interface-name=eth1
 
[ipv4]
address1=192.168.0.100/24
method=manual

nmcli c reload
nmcli c up eth1

server1主机

[root@webserver1 ~]# cat /etc/NetworkManager/system-connections/eth0.connection 
[connection]
id=eth0
type=ethernet
interface-name=eth0
 
[ipv4]
address1=192.168.0.10/24,192.168.0.100
method=manual

nmcli c reload
nmcli c up eth0

server2主机

[root@webserver2 ~]# cat /etc/NetworkManager/system-connections/eth0.connection 
[connection]
id=eth0
type=ethernet
interface-name=eth0
 
[ipv4]
address1=192.168.0.20/24,192.168.0.100
method=manual

nmcli c reload
nmcli c up eth0

在lvs主机打开配置

vim /etc/sysctl.conf           
net.ipv4.ip_forwaed = 1               #在最后一行添加  
 
sysctl -p             #使配置生效

下载ipvsadm

yum install ipvsadm

在lvs主机中配置规则

ipvsadm -A -t 172.25.254.100:80 -s rr
ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.10 -m
ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.20 -m
 
ipvsadm -Ln
watch -n 1 ipvsadm -Ln --rate

分别在server1和server2中配置

yum install httpd -y        #都要下载httpd
 
echo webserver1-192.168.0.10 > /var/www/html/index.html        #server1中配置

 
echo webserver1-192.168.0.20 > /var/www/html/index.html         #server2中配置

结果

五.lvs的dr模式

lvs的dr模式需要五个虚拟机。其中客户端主机为nat模式。路由器主机需有两个网络适配器一个为nat模式,一个为仅主机模式。其它三个均为仅主机模式。

配置ip

client

[root@client ~]# cat /etc/NetworkManager/system-connections/eth0.connection 
[connection]
id=eth0
type=ethernet
interface-name=eth0
 
[ipv4]
address1=172.25.254.200/24,172.25.254.100
method=manual

nmcli c reload
nmcli c up eth0

router

[root@router ~]# cat /etc/NetworkManager/system-connections/eth0.connection 
[connection]
id=eth0
type=ethernet
interface-name=eth0
 
[ipv4]
address1=172.25.254.100/24,172.25.254.2
dns=114.114.114.114;
method=manual
 
 
[root@router ~]# cat /etc/NetworkManager/system-connections/eth1.connection 
[connection]
id=eth1
type=ethernet
interface-name=eth1
 
[ipv4]
address1=192.168.0.100/24
method=manual

nmcli c reload
nmcli c up eth0
nmcli c up eth1

配置lvs'主机(vip使用环回来创建)

[root@lvs ~]# cat /etc/NetworkManager/system-connections/eth0.connection 
[connection]
id=eth0
type=ethernet
interface-name=eth0
 
[ipv4]
address1=192.168.0.50/24,192.168.0.100
method=manual
 
 
nmcli connection reload
nmcli connection up eth0
 

[root@lvs ~]# ip addr add dev lo 192.168.0.200/32

配置server1主机(vip使用环回来创建)

[root@server1 ~]# cat /etc/NetworkManager/system-connections/eth0.connection
[connection]
id=eth0
type=ethernet
interface-name=eth0
 
[ipv4]
address1=192.168.0.10/24,192.168.0.100
method=manual

nmcli c reload
nmcli c up eth0


[root@server1 ~]# ip addr add dev lo 192.168.0.200/32

配置server2主机(vip使用环回来创建)

[root@server2 ~]# cat /etc/NetworkManager/system-connections/eth0.connection 
[connection]
id=eth0
type=ethernet
interface-name=eth0
 
[ipv4]
address1=192.168.0.20/24,192.168.0.100
method=manual

nmcli c reload
nmcli c up eth0

[root@server2 ~]# ip addr add dev lo 192.168.0.200/32

修改Linux内核参数。server1和server2上面都要做

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 

配置ipvsadm

在lvs主机上

ipvsadm -A -t 192.168.0.200:80 -s wrr
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10:80 -g -w 1
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20:80 -g -w 2

启用ip转发

在router上

vim /etc/sysctl.conf           
net.ipv4.ip_forward = 1     #在最后一行添加
 
ipvsadm -p

配置web服务

在server1和server2上配置

yum install httpd -y
 
echo 11111111 > /var/www/html/index.html        #server1中配置

 
echo 22222222 > /var/www/html/index.html         #server2中配置

测试结果

相关推荐
code bean27 分钟前
【C#基础】函数传参大总结
服务器·开发语言·c#
shelby_loo28 分钟前
通过 Docker 部署 WordPress 服务器
服务器·docker·容器
Hqst_Kevin35 分钟前
Hqst 品牌 H81801D 千兆 DIP 网络变压器在光猫收发器机顶盒中的应用
运维·服务器·网络·5g·网络安全·信息与通信·信号处理
前端-文龙刚39 分钟前
小程序给对象赋值(双向绑定)方法之一
服务器·小程序·apache
DREAM依旧44 分钟前
《深入了解 Linux 操作系统》
linux
阿赭ochre1 小时前
Linux环境变量&&进程地址空间
linux·服务器
Iceberg_wWzZ1 小时前
数据结构(Day14)
linux·c语言·数据结构·算法
秋已杰爱1 小时前
进程间关系与进程守护
运维·服务器
微尘81 小时前
C语言存储类型 auto,register,static,extern
服务器·c语言·开发语言·c++·后端
可儿·四系桜1 小时前
如何在多台Linux虚拟机上安装和配置Zookeeper集群
linux·服务器·zookeeper