LVS实战演练

目录

一.LVS简介

<1>.工作原理

<2>.相关术语

<3>.lvs集群的常用转发类型

二.部署NAT模式集群实验

<1>.实验环境

1.调度器

2.真实服务器

3.客户端

<2>.实验配置

1.VS中启用内核路由器功能

2.RS装上http服务

3.VS安装ipvsadm软件

4.在RS上输入测试内容

5.在VS进行测试

6.在VS中添加调度策略

<3>.客户端测试

三.部署DR模式集群实验

<1>.实验环境

1.路由器

2.调度器

3.真实服务器

4.客户端

<2>.实验配置

1.路由器中启用内核路由器功能

2.RS主机中使vip不对外响应

3.在VS主机和RS主机添加vip(临时添加,关机重启后需要重新添加)

4.在VS中添加调度策略

<3>.测试

三.防火墙标签解决轮询错误

<1>.在RS1和RS2中安装mod_ssl并重启apache

<2>.在vs调度器中设定端口标签,人为80和443是一个整体

<3>.设定调度规则

<4>.测试

四.lvs持久化链接

<1>.设定调度规则

<2>.测试


一.LVS简介

LVS(Linux Virtual Server)是Linux虚拟服务器的简称,是一种基于Linux内核的开源负载均衡技术。

<1>.工作原理

LVS(Linux Virtual Server)的工作原理可以概括为通过负载均衡技术将客户端的请求分发到多个后端服务器上,以实现高可用性、高性能和可伸缩性。

<2>.相关术语

VS: Virtual Server ,负责调度

RS: RealServer ,负责真正提供服务

CIP: Client IP

VIP: Virtual serve IP VS外网的IP

DIP: Director IP VS内网的IP

RIP: Real server IP
访问流程: CIP <--> VIP == DIP <--> RIP

<3>.lvs集群的 常用转发类型

  • LVS-NAT(Network Address Translation):修改请求报文的目标IP地址,实现多目标IP的DNAT(Destination Network Address Translation)。
  • LVS-DR(Direct Routing):通过为请求报文重新封装一个MAC首部进行转发,源IP/PORT以及目标IP/PORT均保持不变,是LVS的默认模式,应用最广泛。
  • LVS-TUN(Tunneling):在原请求IP报文之外新加一个IP首部,实现两级IP的隧道逻辑转发。
  • LVS-FULLNAT:通过同时修改请求报文的源IP地址和目标IP地址进行转发,类似于LVS-NAT的增强版。

1. LVS-NAT

LVS-NAT是LVS集群中一种基于网络地址转换技术的负载均衡模式。它通过修改请求报文的目标IP地址和端口,将请求转发到后端真实服务器,并将响应报文中的源IP地址修改为虚拟服务器的IP地址,实现客户端和真实服务器之间的无缝通信。然而,由于所有请求和响应都必须经过LVS调度器,可能导致调度器成为系统瓶颈。

2. LVS-DR

LVS-DR模式是一种高效的负载均衡方式,它允许客户端直接与后端真实服务器通信,而不需要经过LVS调度器转发响应数据。在这种模式下,LVS调度器只负责接收客户端的请求,并根据负载均衡算法选择一个合适的真实服务器,然后将请求转发给该服务器。真实服务器处理请求后,直接将响应返回给客户端,而不需要经过LVS调度器。

3. LVS-TUN

LVS-TUN模式通过在网络层之上增加一个IP隧道,将客户端的请求封装在一个新的IP包中,然后转发给后端真实服务器。真实服务器处理完请求后,直接将响应返回给客户端,而不经过LVS调度器。这种方式使得LVS调度器成为无状态的,只需要处理请求的分发,而不必关心响应的返回,从而提高了系统的可扩展性和性能。

4. LVS-FULLNAT

LVS-FULLNAT模式与NAT模式类似,但它在处理请求和响应报文时都进行了源地址和目标地址的转换。在NAT模式下,只有请求报文的目标地址被转换为RS的地址,而响应报文则直接返回给客户端,无需再次转换。但在FULLNAT模式下,请求报文的源地址和目标地址都会被转换,响应报文在返回给客户端之前,其源地址和目标地址也会进行相应的转换。

二.部署NAT模式集群实验

<1>.实验环境

一台客户机、一台调度器、两台真实服务器

VMVare网络设置NAT模式子网IP为172.25.254.0,仅主机模式子网IP为192.168.0.0

1.调度器

VMVare设置eth0网卡为NAT模式,eth1为仅主机模式

XML 复制代码
[root@LVS ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection 
[connection]
id=eth0
type=ethernet
interface-namw=eth0

[ipv4]
address1=172.25.254.100/24,172.25.254.2
method=manual
dns=114.114.114.114;

[root@LVS ~]# cat /etc/NetworkManager/system-connections/eth1.nmconnection 
[connection]
id=eth1
type=ethernet
interface-namw=eth1

[ipv4]
address1=192.168.0.100/24
method=manual

2.真实服务器

VMVare设置eth0网卡为仅主机模式

XML 复制代码
[root@webserver1 ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
id=eth0
type=ethernet
interface-namw=eth0

[ipv4]
address1=192.168.0.10/24,192.168.0.100
method=manual
XML 复制代码
[root@webserver2 ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
id=eth0
type=ethernet
interface-namw=eth0

[ipv4]
address1=192.168.0.20/24,192.168.0.100
method=manual

3.客户端

VMVare设置eth0网卡为NAT模式

XML 复制代码
[root@client ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
id=eth0
type=ethernet
interface-namw=eth0

[ipv4]
address1=172.25.254.200/24,172.25.254.2
method=manual
dns=114.114.114.114;

<2>.实验配置

1.VS中启用内核路由器功能

XML 复制代码
[root@LVS boot]# echo "net.ipv4.ip_forward=1" > /etc/sysctl.conf
XML 复制代码
[root@LVS boot]# sysctl -p
net.ipv4.ip_forward = 1

2.RS装上http服务

XML 复制代码
[root@webserver1 ~]# yum install httpd -y

3.VS安装ipvsadm软件

XML 复制代码
[root@LVS boot]# dnf install ipvsadm -y

4.在RS上输入测试内容

XML 复制代码
[root@webserver1 ~]# echo webserver1 - 192.168.0.10 > /var/www/html/index.html
[root@webserver1 ~]# systemctl enable --now httpd
XML 复制代码
[root@webserver2 ~]# echo webserver2 - 192.168.0.20 > /var/www/html/index.html
[root@webserver2 ~]# systemctl enable --now httpd

5.在VS进行测试

XML 复制代码
[root@LVS boot]# curl 192.168.0.10
webserver1 - 192.168.0.10
[root@LVS boot]# curl 192.168.0.20
webserver2 - 192.168.0.20

6.在VS中添加调度策略

XML 复制代码
[root@LVS boot]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

[root@LVS boot]# ipvsadm -A -t 172.25.254.100:80 -s rr
[root@LVS boot]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.10:80 -m
[root@LVS boot]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.20:80 -m

[root@LVS boot]# 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.254.100:80 rr
  -> 192.168.0.10:80              Masq    1      0          0         
  -> 192.168.0.20:80              Masq    1      0          0   

<3>.客户端测试

XML 复制代码
[root@client ~]# for i in {1..10}
> do
> curl 172.25.254.100
> done
webserver2 - 192.168.0.20
webserver1 - 192.168.0.10
webserver2 - 192.168.0.20
webserver1 - 192.168.0.10
webserver2 - 192.168.0.20
webserver1 - 192.168.0.10
webserver2 - 192.168.0.20
webserver1 - 192.168.0.10
webserver2 - 192.168.0.20
webserver1 - 192.168.0.10

三.部署DR模式集群实验

<1>.实验环境

一台客户端、一台路由器、一台调度器、两台真实服务器

VMVare网络设置NAT模式子网IP为172.25.254.0,仅主机模式子网IP为192.168.0.0

1.路由器

VMVare设置eth0网卡为NAT模式,eth1为仅主机模式

XML 复制代码
[root@router ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection 
[connection]
id=eth0
type=ethernet
interface-namw=eth0

[ipv4]
address1=172.25.254.100/24,172.25.254.2
method=manual
dns=114.114.114.114;

[root@router ~]# cat /etc/NetworkManager/system-connections/eth1.nmconnection 
[connection]
id=eth1
type=ethernet
interface-namw=eth1

[ipv4]
address1=192.168.0.100/24
method=manual

2.调度器

VMVare设置eth1网卡为仅主机模式

XML 复制代码
[root@LVS ~]# cat /etc/NetworkManager/system-connections/eth1.nmconnection 
[connection]
id=eth1
type=ethernet
interface-namw=eth1

[ipv4]
address1=192.168.0.50/24,192.168.0.100
method=manual

3.真实服务器

VMVare设置eth0网卡为仅主机模式

XML 复制代码
[root@webserver1 ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection 
[connection]
id=eth0
type=ethernet
interface-namw=eth0

[ipv4]
address1=192.168.0.10/24,192.168.0.100
method=manual
XML 复制代码
[root@webserver2 ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection 
[connection]
id=eth0
type=ethernet
interface-namw=eth0

[ipv4]
address1=192.168.0.20/24,192.168.0.100
method=manual

4.客户端

VMVare设置eth0网卡为仅主机模式

XML 复制代码
[root@client ~]# curl 192.168.0.200
webserver2 - 192.168.0.20
[root@client ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection 
[connection]
id=eth0
type=ethernet
interface-namw=eth0

[ipv4]
address1=172.25.254.200/24,172.25.254.100
method=manual

<2>.实验配置

1.路由器中启用内核路由器功能

XML 复制代码
[root@router ~]# echo "net.ipv4.ip_forward=1" > /etc/sysctl.conf
XML 复制代码
[root@router ~]# sysctl -a | grep ip_forward
net.ipv4.ip_forward = 1
net.ipv4.ip_forward_update_priority = 1
net.ipv4.ip_forward_use_pmtu = 0

2.RS主机中使vip不对外响应

XML 复制代码
[root@webserver1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore      
[root@webserver1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 
[root@webserver1 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore 
[root@webserver1 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce 
XML 复制代码
[root@webserver2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore      
[root@webserver2 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 
[root@webserver2 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore 
[root@webserver2 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce 

3.在VS主机和RS主机添加vip(临时添加,关机重启后需要重新添加)

XML 复制代码
[root@LVS ~]# ip a a 192.168.0.200/32 dev lo
XML 复制代码
[root@webserver1 ~]# ip a a 192.168.0.200/32 dev lo
XML 复制代码
[root@webserver2 ~]# ip a a 192.168.0.200/32 dev lo

4.在VS中添加调度策略

XML 复制代码
[root@LVS ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

[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

[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  192.168.0.200:80 wrr
  -> 192.168.0.10:80              Route   1      0          0         
  -> 192.168.0.20:80  

<3>.测试

根据DR模式的工作原理,用wearshark抓包能明显看到实验结果,便于理解

XML 复制代码
[root@client ~]# for i in {1..10}
> do
> curl 192.168.0.200
> done
webserver2 - 192.168.0.20
webserver1 - 192.168.0.10
webserver2 - 192.168.0.20
webserver2 - 192.168.0.20
webserver1 - 192.168.0.10
webserver2 - 192.168.0.20
webserver2 - 192.168.0.20
webserver1 - 192.168.0.10
webserver2 - 192.168.0.20
webserver2 - 192.168.0.20

三.防火墙标签解决轮询错误

以 http 和 https 为例,当我们在 RS 中同时开放 80 和 443 端口,那么默认控制是分开轮询的,这样我们就出 现了一个轮询错乱的问题 。 当第一次访问 80 被轮询到 RS1 后下次访问 443 仍然可能会被轮询到 RS1 上。

<1>.在RS1和RS2中安装mod_ssl并重启apache

XML 复制代码
[root@webserver2 ~]# yum install mod_ssl -y
[root@webserver2 ~]# systemctl restart httpd

<2>.在vs调度器中设定端口标签,人为80和443是一个整体

XML 复制代码
[root@LVS ~]# iptables -t mangle -A PREROUTING -d 192.168.0.200 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 813

[root@LVS ~]# iptables -t mangle -nL
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
MARK       6    --  0.0.0.0/0            192.168.0.200        multiport dports 80,443 MARK set 0x32d

<3>.设定调度规则

XML 复制代码
[root@LVS ~]# ipvsadm -A -f 813 -s rr
[root@LVS ~]# ipvsadm -a -f 813 -r 192.168.0.10 -g
[root@LVS ~]# ipvsadm -a -f 813 -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  813 rr
  -> 192.168.0.10:0               Route   1      0          0         
  -> 192.168.0.20:0               Route   1      0          0  

<4>.测试

XML 复制代码
[root@client ~]# curl 192.168.0.200;curl -k https://192.168.0.200
webserver2 - 192.168.0.20
webserver1 - 192.168.0.10
[root@client ~]# curl 192.168.0.200;curl -k https://192.168.0.200
webserver2 - 192.168.0.20
webserver1 - 192.168.0.10
[root@client ~]# curl 192.168.0.200;curl -k https://192.168.0.200
webserver2 - 192.168.0.20
webserver1 - 192.168.0.10

四.lvs持久化链接

LVS(Linux Virtual Server)持久化连接是一种机制,用于确保来自同一客户端的请求被持续发送到同一台后端真实服务器(Real Server,简称RS),以保持会话的连续性和一致性。

<1>.设定调度规则

XML 复制代码
[root@LVS ~]# ipvsadm -E -f 813 -s rr -p
[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  813 rr persistent 360
  -> 192.168.0.10:0               Route   1      0          0         
  -> 192.168.0.20:0               Route   1      0          0  

<2>.测试

XML 复制代码
[root@client ~]# for i in {1..10}
> do
> curl 192.168.0.200
> done
webserver2 - 192.168.0.20
webserver2 - 192.168.0.20
webserver2 - 192.168.0.20
webserver2 - 192.168.0.20
webserver2 - 192.168.0.20
webserver2 - 192.168.0.20
webserver2 - 192.168.0.20
webserver2 - 192.168.0.20
webserver2 - 192.168.0.20
webserver2 - 192.168.0.20
相关推荐
单音GG7 分钟前
推荐一个基于协程的C++(lua)游戏服务器
服务器·c++·游戏·lua
安步当歌35 分钟前
【WebRTC】视频发送链路中类的简单分析(下)
网络·音视频·webrtc·视频编解码·video-codec
shitian081139 分钟前
用轻量云服务器搭建一个开源的商城系统,含小程序和pc端
服务器·小程序·开源
Biomamba生信基地1 小时前
Linux也有百度云喔~
linux·运维·服务器·百度云
米饭是菜qy1 小时前
TCP 三次握手意义及为什么是三次握手
服务器·网络·tcp/ip
yaoxin5211231 小时前
第十九章 TCP 客户端 服务器通信 - 数据包模式
服务器·网络·tcp/ip
new_abc1 小时前
Ubuntu 22.04 ftp搭建
linux·运维·ubuntu
flying robot2 小时前
RPM的使用
linux
鹿鸣天涯2 小时前
‌华为交换机在Spine-Leaf架构中的使用场景
运维·服务器·网络