LVS集群的NAT模式和DR模式

LVS简介

LVS(Linux Virtual Server)是一个用于负载均衡的开源软件项目,旨在通过集群技术实现高性能、高可用的服务器系统。它运行在Linux操作系统上,并且可以利用内核级的资源来提高性能和稳定性。

LVS 体系结构

LVS架构

主要由三个部分组成

1)负载均衡层:位于整个集群系统的最前端,由一台或多台负载调度器(Director Server)组成,LVS模块就安装在调度器上。

2)服务器群组层:由一组实际运行的应用服务器(Real Server)组成,可以是web服务器、mail服务器、DNS服务器、FTP服务器等。

3)数据共享存储层:为所有Real Server提供共享存储空间和内容一致性的存储区域,一般通过NFS网络文件系统或集群文件系统实现。

lvs概念


VS:Virtual Server
RS:Real Server
CIP:Client IP
VIP: Virtual serve IP VS外网的IP
DIP: Director IP VS内网的IP
RIP: Real server IP
访问流程: CIP <--> VIP == DIP <--> RIP

lvs集群的类型

lvs-nat: 修改请求报文的目标IP,多目标IP的DNAT

lvs-dr: 操纵封装新的MAC地址 lvs-tun: 在原请求IP报文之外新加一个IP首部

 lvs-fullnat: 修改请求报文的源和目标IP

NAT模式

工作流程:
1. 客户端client发送访问请求,请求数据包中含有请求来源( cip ),访问目标地址( VIP )访问目标端口
2.lVS 服务器接收到访问请求做D NAT 把请求数据包中的目的地址 VIP 换成 RS 的 RIP 和相应端口
3.RS1 相应请求,发送响应数据包,包中的相应的数据来源( RIP1 )响应目标( CIP )相应端口
4.lVS 服务器接收到响应数据包,改变包中的数据来源( RIP1-->VIP ) , 响应目标端口( 9000-->80 )
5.lVS 服务器把修改过报文的响应数据包回传给客户端
nat模式的缺点:lvs 的 NAT 模式接收和返回客户端数据包时都要经过 lvs 的调度机,所以 lvs 的调度机容易阻塞

环境准备:

LVS主机(两块网卡一个nat模式 一个仅主机)

[root@LVS ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection 
[connection]
id=eth0
type=ethernet
interface-name=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-name=eth1
 
[ipv4]
address1=192.168.0.100/24,
method=manual

                        
在lvs中打开内核路由功能并关闭防火墙

[root@lvs ~]# systemctl stop firewalld

[root@lvs ~]# sysctl -a | grep ip_forward
net.ipv4.ip_forward = 0
net.ipv4.ip_forward_update_priority = 1
net.ipv4.ip_forward_use_pmtu = 0

[root@lvs ~]# vim /etc/sysctl.conf

net.ipv4.ip_forward = 1

[root@lvs ~]# sysctl -p
net.ipv4.ip_forward = 1

两台web主机上的配置

web1 

[root@web1 ~]# dnf install -y httpd

[root@web1 ~]# echo web1 - 192.168.0.10 > /var/www/html/index.html
[root@web1 ~]# systemctl enable httpd --now

web2

[root@web1 ~]# dnf install -y httpd

[root@web1 ~]# echo web1 - 192.168.0.10 > /var/www/html/index.html
[root@web1 ~]# systemctl enable httpd --now

测试

[root@lvs ~]# curl 192.168.0.10

web1 - 192.168.0.10

[root@lvs ~]# curl 192.168.0.20

web2 - 192.168.0.20

安装ipvsadm,添加策略

[root@lvs ~]# dnf install -y ipvsadm

[root@lvs ~]# ipvsadm -A -t 192.168.0.100:80 -s wrr  

[root@lvs ~]# ipvsadm -a -t 192.168.0.100:80 -r 172.25.254.10:80 -m 

[root@lvs ~]# ipvsadm -a -t 192.168.0.100:80 -r 172.25.254.20:80 -m

[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.100:80 wrr
  -> 192.168.0.10:80              Masq    1      0          0         
  -> 192.168.0.20:80              Masq    1      0          0 

测试:
[root@client ~]# for i in {1..10}
> do
> curl 192.168.0.200
> done
web1 - 192.168.0.10
web2 - 192.168.0.20
web2 - 192.168.0.20
web1 - 192.168.0.10
web2 - 192.168.0.20
web2 - 192.168.0.20
web1 - 192.168.0.10
web2 - 192.168.0.20

DR模式

DR:Direct Routing,直接路由,LVS默认模式,应用最广泛,通过为请求报文重新封装一个MAC首部进行 转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源 IP/PORT,以及目标IP/PORT均保持不变

环境准备

Client:nat模式,CIP为172.25.254.200,网关为172.25.254.100
Router:nat模式,VIP为172.25.254.100,仅主机模式,DIP为192.168.0.100,开启内核路由功能
LVS:仅主机模式,DIP为192.168.0.50 VIP为192.168.0.200 在回环上配置 网关为192.168.0.100

web1:仅主机模式,RIP为192.168.0.10,VIP为192.168.0.200,在回环上配置

web2:仅主机模式, RIP为192.168.0.20,VIP为192.168.0.200,在回环上配置

LVS主机:
[root@LVS ~]# vim /etc/NetworkManager/system-connections/eth1.nmconnection 
[connection]
id=eth1
type=ethernet
interface-name=eth1
 
[ipv4]
address1=192.168.0.50/24,192.168.0.100
method=manua

router配置

[root@router ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection 
[connection]
id=eth0
type=ethernet
interface-name=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-name=eth1
 
[ipv4]
address1=192.168.0.100/24,
method=manual

启用内核路由

[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

[root@router ~]# vim /etc/sysctl.conf

net.ipv4.ip_forward = 1

Client配置:

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

web1配置:

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

[root@webserver1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore 
[root@webserver1 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore 
[root@webserver1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 
[root@webserver1 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce 

[root@webserver1 ~]# ip a a 192.168.0.200/32 dev lo

web2配置:


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

[root@webserver2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore 
[root@webserver2 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore 
[root@webserver2 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 
[root@webserver2 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce 

[root@webserver2 ~]# ip a a 192.168.0.200/32 dev lo

LVS配置:
[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@client ~]# for i in {1..10}
> do
> curl 192.168.0.100
> done
web1 - 192.168.0.10
web2 - 192.168.0.20
web2 - 192.168.0.20
web1 - 192.168.0.10
web2 - 192.168.0.20
web2 - 192.168.0.20
web1 - 192.168.0.10
web2 - 192.168.0.20

  • 22
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值