LVS的三种模式

78 篇文章 1 订阅

LVS的三种模式

LVS 集群的设备地址命名

  • CIP:Client IP,客户端 IP 地址

  • VIP:Virtual IP,LVS 面向用户请求的 IP 地址

  • DIP:Director IP,LVS 用户和后端服务器通信的 IP 地址

  • RIP:Real server IP,后端服务器用于和 LVS 通信的 IP 地址

NAT 网络地址转换

(Network address translation)

lvs-nat本质上就是多目标的DNAT(iptables)

lvs-nat模式通过修改请求报文的目标IP地址(同时可能会修改目标端口)至挑选出来的某RS的RIP地址实现转发
在这里插入图片描述
LVS-NAT 模型类似于 DNAT,工作机制与 DNAT 一样,当客户端请求的是集群服务时,LVS 修改请求报文的目标地址为 RIP,转发至后端的 RealServer,并修改后端响应报文的源地址为 VIP,响应至客户端。

LVS-NAT的特点:

  • RS和DIP应该使用私网地址,且RS的网关要指向DIP

  • 请求和响应报文都要经由director转发,所以配置时需要将director的转发功能开启,极高负载的场景中,director可能会成为系统性能瓶颈

  • 支持端口映射

  • RS可以使用任意OS

  • RS的RIP和Director的DIP必须在同一IP网络

NAT模式实现httpd负载均衡

名称网卡地址
DSDIP:192.168.101.200;VIP:192.168.101.100
RS(1)DIP:192.168.101.110;VIP:192.168.101.2
RS(2)DIP:192.168.101.210;VIP:192.168.101.2

关闭防火墙

[root@DR ~]# systemctl disable --now firewalld
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@DR ~]# setenforce 0

[root@RS1 ~]# systemctl disable --now firewalld
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@RS1 ~]# setenforce 0

[root@RS2 ~]# systemctl disable --now firewalld
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@RS2 ~]# setenforce 0

配置DR的临时IP

[root@DR ~]#  ifconfig ens33:0 192.168.101.100/24 up
[root@DR ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:27:fa:31 brd ff:ff:ff:ff:ff:ff
    inet 192.168.101.200/24 brd 192.168.101.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.101.100/24 brd 192.168.101.255 scope global secondary ens33:0
       valid_lft forever preferred_lft forever
    inet6 fe80::c4bc:49bf:b759:3272/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
[root@DR ~]# tail /etc/sysconfig/network-scripts/ifcfg-ens33 
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=c5c9eb7d-47c3-4b19-aa9c-e7c78db2c28a
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.101.200
NETMASK=255.255.255.0
GATEWAY=192.168.101.2     # 网关
DNS1=114.114.114.114

下载httpd并修改显示内容

[root@RS1 ~]# yum -y install httpd
[root@RS1 ~]# systemctl enable --now httpd
[root@RS1 ~]# echo "hello 192.168.101.210" > /usr/share/httpd/noindex/index.html
[root@RS1 ~]# systemctl restart httpd
[root@RS2 ~]# yum -y install httpd
[root@RS2 ~]# echo "hello 192.168.101.110" > /usr/share/httpd/noindex/index.html
[root@RS2 ~]# systemctl restart httpd

配置 RS1网关为DR网关

[root@RS1 ~]# tail /etc/sysconfig/network-scripts/ifcfg-ens33
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=ed299cc0-ef82-48a9-9f37-2a1639dae9f8
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.101.210
NETMASK=255.255.255.0
GATEWAY=192.168.101.2
DNS1=114.114.114.114

配置 RS2网关为DR网关

[root@RS2 ~]# tail /etc/sysconfig/network-scripts/ifcfg-ens33
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=1d3ba2cd-8e05-4e5f-a390-3b21e137e1d9
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.101.110
NETMASK=255.255.255.0
GATEWAY=192.168.101.2
DNS1=114.114.114.114

DR上配置 转发规则

[root@DR ~]# yum -y install ipvsadm

[root@DR ~]# vim /etc/sysctl.conf 
[root@DR ~]# sysctl -p
net.ipv4.ip_forward = 1

[root@DR ~]# vim /etc/sysctl.conf 
[root@DR ~]# sysctl -p
net.ipv4.ip_forward = 1
[root@DR ~]# ipvsadm -A -t 192.168.101.100:80 -s rr
[root@DR ~]# 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.101.100:80 rr
[root@DR ~]# ipvsadm -a -t 192.168.101.100:80 -r 192.168.101.210:80 -m
[root@DR ~]# ipvsadm -a -t 192.168.101.100:80 -r 192.168.101.110:80 -m
[root@DR ~]# ipvsadm -Sn > /etc/sysconfig/ipvsadm
[root@DR ~]# cat /etc/sysconfig/ipvsadm
-A -t 192.168.101.100:80 -s rr
-a -t 192.168.101.100:80 -r 192.168.101.110:80 -m -w 1
-a -t 192.168.101.100:80 -r 192.168.101.210:80 -m -w 1

检验

[root@DR ~]# curl http://192.168.101.100
hello 192.168.101.110
[root@DR ~]# curl http://192.168.101.100
hello 192.168.101.210

DR 直接路由模式

  • (Direct routing)lvs的默认模式(使用的都是同一个VIP)

  • lvs-dr模式通过修改请求报文的目标MAC地址进行转发

​ Director:调度器要配置VIP,DIP

​ RSs:所有的Real Server都要配置RIP,VIP
在这里插入图片描述

LVS-DR的特点:

​ 保证前端路由器将目标IP为VIP的请求报文发送给director,解决方案有以下三种:

  • 静态绑定

  • arptables

  • 修改RS主机内核的2个参数:

arp_announce:是否接收并记录别人的通告以及是否通告自己的mac地址给别人。

arp_announce有三个可选值,0,1,2,其意义如下:

0(default,默认值为0):通告自己所拥有的所有地址

​ 1:尽量不通告与自己不在同一个网段的地址,比如不通告2.0网段的地址给1.0网段,不通告3.0网段的地址给1.0网段等,但是是尽量不通告,有可能还是会通告的

​ 尽量避免不在该网络接口子网段的本地地址做出arp回应.

​ 当发起ARP请求的源IP地址是被设置应该经由路由达到此网络接口的时候很有用.

​ 此时会检查来访IP是否为所有接口上的子网段内ip之一.如果该来访IP不属于各个网络接口上的子网段内,那么将采用级别2的方式来进行处理.

​ 2:总是不通告与自己不在同一个网段的地址,比如不通告2.0网段的地址给1.0网段,不通告3.0网段的地址给1.0网段等,绝对不会通告

​ 对查询目标使用最适当的本地地址.在此模式下将忽略这个IP数据包的源地址并尝试选择与能与该地址通信的本地地址.

​ 首要是选择所有的网络接口的子网中外出访问子网中包含该目标IP地址的本地地址.

​ 如果没有合适的地址被发现,将选择当前的发送网络接口或其他的有可能接受到该ARP回应的网络接口来进行发送.

arp_ignore:是否响应arp请求

arp_ignore有9个可选值,0,1,2,3,4,5,6,7,8,其意义如下:

0(default,默认值为0):回应任何网络接口上对任何本地IP地址的arp查询请求

1:请求报文从哪个接口进入的且请求的目标地址就是此接口配置的地址才予以响应,否则不响应,只回答目标IP地址是来访网络接口本地地址的ARP查询请求

2:只回答目标IP地址是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的子网段内

3:不回应该网络接口的arp请求,而只对设置的唯一和连接地址做出回应

4-7:保留未使用

8:不回应所有(本地地址)的arp查询

    • RS的RIP可以使用私有地址,也可以使用公网地址

​ - - RS跟Director必须在同一物理网络中,中间不能有路由器相隔

​ - - 请求报文经由Director调度,但响应报文一定不能经由Director

​ - - 不支持端口映射

​ - - RS可以是大多数OS

​ - - RS的网关不能指向DIP

DR模式实现httpd负载均衡

实验配置信息

名称网卡地址
DSDIP:192.168.101.200;VIP:192.168.101.100
RS(1)DIP:192.168.101.110;VIP:192.168.101.100
RS(2)DIP:192.168.101.210;VIP:192.168.101.100

关闭防火墙

[root@DR ~]# systemctl disable --now firewalld
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@DR ~]# setenforce 0

[root@RS1 ~]# systemctl disable --now firewalld
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@RS1 ~]# setenforce 0

[root@RS2 ~]# systemctl disable --now firewalld
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@RS2 ~]# setenforce 0

RS1和RS2下载安装httpd修改内容来提供访问

[root@RS1 ~]# yum -y install httpd
[root@RS1 ~]# systemctl enable --now httpd
[root@RS1 ~]# echo "hello 192.168.101.210" > /usr/share/httpd/noindex/index.html
[root@RS1 ~]# systemctl restart httpd
[root@RS2 ~]# yum -y install httpd
[root@RS2 ~]# echo "hello 192.168.101.110" > /usr/share/httpd/noindex/index.html
[root@RS2 ~]# systemctl restart httpd

DR配置VIP

[root@DR ~]#  ifconfig ens33:0 192.168.101.100/24 up
[root@DR ~]#  ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:27:fa:31 brd ff:ff:ff:ff:ff:ff
    inet 192.168.101.200/24 brd 192.168.101.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.101.100/24 brd 192.168.101.255 scope global secondary ens33:0
       valid_lft forever preferred_lft forever
    inet6 fe80::c4bc:49bf:b759:3272/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

RS配置apr内核参数

[root@RS1 ~]# cat /etc/sysctl.conf   # 添加两行
net.ipv4.conf.all.arp_ignore = 1  # 将对应网卡设置为只回应目标IP为自身接口地址的ARP请求
net.ipv4.conf.all.arp_announce = 2 # 将ARP请求的源IP设置为ens33上的IP,也就是RIP

[root@RS1 ~]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2

[root@RS2 ~]# cat /etc/sysctl.conf   # 添加两行
net.ipv4.conf.all.arp_ignore = 1  # 将对应网卡设置为只回应目标IP为自身接口地址的ARP请求
net.ipv4.conf.all.arp_announce = 2 # 将ARP请求的源IP设置为ens33上的IP,也就是RIP

[root@RS2 ~]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2

RS上配置VIP

[root@RS1 ~]# ifconfig ens33:0 192.168.101.100/24 up
[root@RS1 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:39:72:e7 brd ff:ff:ff:ff:ff:ff
    inet 192.168.101.210/24 brd 192.168.101.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.101.100/24 brd 192.168.101.255 scope global secondary ens33:0
       valid_lft forever preferred_lft forever
    inet6 fe80::9384:81ed:87b3:c531/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
[root@RS2 ~]# ifconfig ens33:0 192.168.101.100/24 up
[root@RS2 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 00:0c:29:e0:e7:fa brd ff:ff:ff:ff:ff:ff
    inet 192.168.101.110/24 brd 192.168.101.255 scope global noprefixroute ens33
       valid_lft forever preferred_lft forever
    inet 192.168.101.100/24 brd 192.168.101.255 scope global secondary ens33:0
       valid_lft forever preferred_lft forever
    inet6 fe80::a481:4471:9402:58ac/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

DR上配置 转发规则

[root@DR ~]# yum -y install ipvsadm
ipvsadm -A -t 192.168.101.100:80 -s rr
[root@DR ~]# ipvsadm -a -t 192.168.101.100:80 -r 192.168.101.210:80 -g
[root@DR ~]# ipvsadm -a -t 192.168.101.100:80 -r 192.168.101.110:80 -g
[root@DR ~]#  ipvsadm -Sn
-A -t 192.168.101.100:80 -s rr
-a -t 192.168.101.100:80 -r 192.168.101.110:80 -g -w 1
-a -t 192.168.101.100:80 -r 192.168.101.210:80 -g -w 1

在这里插入图片描述

基于TUN的LVS负载均衡

LVS(NAT)模式的集群环境中,所有数据包的请求的回应的哦欧需要经过调度器处理,但是在TUN模式中,将NAT模式中的问题有所解决。因为数据包的请求包往往远远小于响应数据包的大小。因为响应数据包中有包含客户需要的具体数据所以,TUN的原理就是将请求与响应数据分离。,让调度器仅仅处理数据请求,让真实的服务器响应数据包直接返回给客户。

IP(隧道)是一种数据包分装技术,他可以经原始的数据包分装并添加新的包头(内容包括新的源地址及端口、目标地址及端口),从而实现将一个目标为调度器的vip地址的数据包分装,通过隧道转发给真实的后端服务器,通过将客户端发往调度器的原始数据包分装,并在其基础上添加新的数据包头(修改目标地址为调度器选择出来的真实服务的ip地址以及对应端口),lLVS(Tun)模式要求真实的服务器可以与外部网络连接,真实服务器在受到请求数据包后直接给客户端返回响应数据
在这里插入图片描述

  • RIP,DIP,VIP必须是公网地址

  • RS的网关不能指向DIP

  • 请求报文必须经由director调度,但响应报文必须不能经由director

  • 不支持端口映射

  • RS的OS必须支持隧道功能

lvs-fullnat:keepalived

  • director通过同时修改请求报文的目标地址和源地址进行转发
    lvs-fullnat的特点:

  • VIP是公网地址,RIP和DIP是私网地址,RIP与DIP无须在同一网络中

  • RS接收到的请求报文的源地址为DIP,因此要响应给DIP

  • 请求报文和响应报文都必须经由Director

  • 支持端口映射机制

  • RS可以使用任意OS

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值