LVS集群

LVS集群LVS1.LVS介绍LVS工作模式1.LVS介绍LVS,LinuxVirtualServerLVS是章文嵩博士发起的自由软件项目,它的官方站点是http://www.linuxvirtualserver.org。LVS工作在内核空间,实现TCP/IP协议群的四层路由,在Linux2.4内核以前,使用LVS时必须要重新编译内核以支持LVS功能模块,但从Linux2.4内核以后已经完全内置了LVS的各个功能模块,无需给内核打任何补丁,可以直接使用LVS提供的各种功能。LVS采用三层结构:调度器、

大家好,又见面了,我是你们的朋友全栈君。

1. LVS介绍

LVS,Linux Virtual Server
LVS是章文嵩博士发起的自由软件项目,它的官方站点是http://www.linuxvirtualserver.org。LVS工作在内核空间,实现TCP/IP协议群的四层路由,在Linux2.4内核以前,使用LVS时必须要重新编译内核以支持LVS功能模块,但从Linux2.4内核以后已经完全内置了LVS的各个功能模块,无需给内核打任何补丁,可以直接使用LVS提供的各种功能。

LVS采用三层结构:调度器、服务器池、共享存储,结构如下图:
在这里插入图片描述
负载调度器(load balancer/Director):由一台或多台负载调度器组成,主要作用类似一个路由器,将用户请求分发给服务器池上的real server;
服务器池(server pool/Realserver):一组真正执行客户请求的服务器,执行的服务一般有WEB、MAIL、FTP和DNS等。
共享存储(shared storage):为服务器池提供一个共享的存储区,能使得服务器池拥有相同的内容,提供相同的服务。

LVS需要在内核的TCP/IP协议栈对数据流进行过滤筛选,这就需要有内核的模块来支持,而这样的过滤转发规则又是由用户进行定义的,我们可以认为LVS是两段式的架构,在内核空间中工作的是”ipvs”,而在用户空间中工作的,用来定义集群服务规则的是”ipvsadm”。
  
LVS集群类型相关术语:
在这里插入图片描述

2. LVS工作模式

  • LVS/NAT模式
  • LVS/TUN模式
  • LVS/DR模式
  • FULLNAT模式

LVS/NAT模式
在这里插入图片描述

①.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP(客户端IP),后面统称为CIP),目标地址为VIP(负载均衡器前端地址,后面统称为VIP)。

②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将客户端请求报文的目标地址改为了后端服务器的RIP地址并将报文根据算法发送出去。

③.报文送到Real Server后,由于报文的目标地址是自己,所以会响应该请求,并将响应报文返还给LVS。

④.然后lvs将此报文的源地址修改为本机并发送给客户端。

注意:

在NAT模式中,Real Server的网关必须指向LVS,否则报文无法送达客户端

特点:

1、NAT 技术将请求的报文和响应的报文都需要通过 LB 进行地址改写,因此网站访问量比较大的时候 LB 负载均衡调度器有比较大的瓶颈,一般要求最多之能 10-20 台节点

2、只需要在 LB 上配置一个公网 IP 地址就可以了。

3、每台内部的 realserver 服务器的网关地址必须是调度器 LB 的内网地址。

4、NAT 模式支持对 IP 地址和端口进行转换。即用户请求的端口和真实服务器的端口可以不一致。

优点:

集群中的物理服务器可以使用任何支持TCP/IP操作系统,只有负载均衡器需要一个合法的IP地址。

缺点:

扩展性有限。当服务器节点(普通PC服务器)增长过多时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包的流向都经过负载均衡器。当服务器节点过多时,大量的数据包都交汇在负载均衡器那,速度就会变慢!

LVS/TUN模式
在这里插入图片描述
①.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP。

②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将在客户端请求报文的首部再封装一层IP报文,将源地址改为DIP,目标地址改为RIP,并将此包发送给RS。

③.RS收到请求报文后,会首先拆开第一层封装,然后发现里面还有一层IP首部的目标地址是自己lo接口上的VIP,所以会处理次请求报文,并将响应报文通过lo接口送给eth0网卡直接发送给客户端。

注意:

需要设置lo接口的VIP不能在共网上出现。

总结:

1.TUNNEL 模式必须在所有的 realserver 机器上面绑定 VIP 的 IP 地址

2.TUNNEL 模式的 vip ——>realserver 的包通信通过 TUNNEL 模式,不管是内网和外网都能通信,所以不需要 lvs vip 跟 realserver 在同一个网段内

3.TUNNEL 模式 realserver 会把 packet 直接发给 client 不会给 lvs 了

4.TUNNEL 模式走的隧道模式,所以运维起来比较难,所以一般不用。

优点:

负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户。所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,就能处理很巨大的请求量,这种方式,一台负载均衡器能够为很多RS进行分发。而且跑在公网上就能进行不同地域的分发。

缺点:

隧道模式的RS节点需要合法IP,这种方式需要所有的服务器支持”IP Tunneling”(IP Encapsulation)协议,服务器可能只局限在部分Linux系统上。

LVS/DR模式
在这里插入图片描述
①.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP。

②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将客户端请求报文的源MAC地址改为自己DIP的MAC地址,目标MAC改为了RIP的MAC地址,并将此包发送给RS。

③.RS发现请求报文中的目的MAC是自己,就会将次报文接收下来,处理完请求报文后,将响应报文通过lo接口送给eth0网卡直接发送给客户端。

注意:

需要设置lo接口的VIP不能响应本地网络内的arp请求。

总结:

1、通过在调度器 LB 上修改数据包的目的 MAC 地址实现转发。注意源地址仍然是 CIP,目的地址仍然是 VIP 地址。

2、请求的报文经过调度器,而 RS 响应处理后的报文无需经过调度器 LB,因此并发访问量大时使用效率很高(和 NAT 模式比)

3、因为 DR 模式是通过 MAC 地址改写机制实现转发,因此所有 RS 节点和调度器 LB 只能在一个局域网里面

4、RS 主机需要绑定 VIP 地址在 LO 接口(掩码32 位)上,并且需要配置 ARP 抑制。

5、RS 节点的默认网关不需要配置成 LB,而是直接配置为上级路由的网关,能让 RS 直接出网就可以。

6、由于 DR 模式的调度器仅做 MAC 地址的改写,所以调度器 LB 就不能改写目标端口,那么 RS 服务器就得使用和 VIP 相同的端口提供服务。

7、直接对外的业务比如WEB等,RS 的IP最好是使用公网IP。对外的服务,比如数据库等最好使用内网IP。

优点:

和TUN(隧道模式)一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端。与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器。

DR模式的效率很高,但是配置稍微复杂一点,因此对于访问量不是特别大的公司可以用haproxy/nginx取代。日1000-2000W PV或者并发请求1万一下都可以考虑用haproxy/nginx。

缺点:

所有 RS 节点和调度器 LB 只能在一个局域网里面。

FULLNAT模式

无论是 DR 还是 NAT 模式,不可避免的都有一个问题:LVS 和 RS 必须在同一个 VLAN 下,否则 LVS 无法作为 RS 的网关。

这引发的两个问题是:

1、同一个 VLAN 的限制导致运维不方便,跨 VLAN 的 RS 无法接入。

2、LVS 的水平扩展受到制约。当 RS 水平扩容时,总有一天其上的单点 LVS 会成为瓶颈。

Full-NAT 由此而生,解决的是 LVS 和 RS 跨 VLAN 的问题,而跨 VLAN 问题解决后,LVS 和 RS 不再存在 VLAN 上的从属关系,可以做到多个 LVS 对应多个 RS,解决水平扩容的问题。

Full-NAT 相比 NAT 的主要改进是,在 SNAT/DNAT 的基础上,加上另一种转换,转换过程如下:

在这里插入图片描述
在包从 LVS 转到 RS 的过程中,源地址从客户端 IP 被替换成了 LVS 的内网 IP。

内网 IP 之间可以通过多个交换机跨 VLAN 通信。

当 RS 处理完接受到的包,返回时,会将这个包返回给 LVS 的内网 IP,这一步也不受限于 VLAN。

LVS 收到包后,在 NAT 模式修改源地址的基础上,再把 RS 发来的包中的目标地址从 LVS 内网 IP 改为客户端的 IP。

Full-NAT 主要的思想是把网关和其下机器的通信,改为了普通的网络通信,从而解决了跨 VLAN 的问题。采用这种方式,LVS 和 RS 的部署在 VLAN 上将不再有任何限制,大大提高了运维部署的便利性。

总结
1.FULL NAT 模式也不需要 LBIP 和 realserver ip 在同一个网段; full nat 跟 nat 相比的优点是:保证 RS 回包一定能够回到 LVS;因为源地址就是 LVS–> 不确定

2.FULL NAT 因为要更新 sorce ip 所以性能正常比 nat 模式下降 10%

三种工作模式比较
在这里插入图片描述

3. 配置NAT模式和DR模式httpd负载均衡

LVS-NAT模式配置httpd负载均衡
三台服务器分别配置了对应的本地静态地址DIP和RIP,且在一个内网中。
DR有两块网卡,一块IP是内网的DIP,另一块IP是公网IP的VIP
RS的网关指向DIP

环境说明

系统平台 主机名 IP 需要安装的服务
rhel-8.2 DR 192.168.8.137(DIP)
192.168.137.131(VIP)
ipvsadm
rhel-8.2 RS-1 192.168.8.129 httpd
rhel-8.2 RS-2 192.168.8.130 httpd
//DR这台主机需要两块网卡,一块IP作为内网的DIP,另一块作为公网IP的VIP
[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: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:b9:12:52 brd ff:ff:ff:ff:ff:ff
    inet 192.168.8.137/24 brd 192.168.8.255 scope global dynamic noprefixroute ens160
       valid_lft 1170sec preferred_lft 1170sec
    inet6 fe80::a53a:d8ca:5571:35c8/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: ens224: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:b9:12:5c brd ff:ff:ff:ff:ff:ff
    inet 192.168.137.131/24 brd 192.168.137.255 scope global dynamic noprefixroute ens224
       valid_lft 1170sec preferred_lft 1170sec
    inet6 fe80::9759:683e:6bb5:f766/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
[root@DR ~]# 

//RS-1网关指向DR
[root@RS-1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens160 
TYPE="Ethernet"
BOOTPROTO="static"
NAME="ens160"
DEVICE="ens160"
ONBOOT="yes"
IPADDR=192.168.8.129
PREFIX=24
GATEWAY=192.168.8.137
DNS1=114.114.114.114

[root@RS-1 ~]# 
[root@RS-1 ~]# ifdown ens160 ;ifup ens160 
成功停用连接 "ens160"(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/1)
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/4)

[root@RS-1 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.8.137   0.0.0.0         UG    100    0        0 ens160
192.168.8.0     0.0.0.0         255.255.255.0   U     100    0        0 ens160
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0
[root@RS-1 ~]# 

//RS-2网关指向DR
[root@RS-2 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens160 
TYPE="Ethernet"
BOOTPROTO="static"
NAME="ens160"
DEVICE="ens160"
ONBOOT="yes"
IPADDR=192.168.8.130
PREFIX=24
GATEWAY=192.168.8.137
DNS1=114.114.114.114

[root@RS-2 ~]# ifdown ens160 ;ifup ens160 
Connection 'ens160' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/1)
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)

[root@RS-2 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.8.137   0.0.0.0         UG    100    0        0 ens160
192.168.8.0     0.0.0.0         255.255.255.0   U     100    0        0 ens160
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0
[root@RS-2 ~]# 

DR上开启IP转发

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

DR上配置LVS-NAT的转发机制

//LVS依赖于ipvsadm来进行配置,所以我们首先先安装ipvsadm
[root@DR ~]# yum -y install ipvsadm

[root@DR ~]# ipvsadm -At 192.168.137.131:80 -s rr
[root@DR ~]# ipvsadm -at 192.168.137.131:80 -r 192.168.8.129:80 -m
[root@DR ~]# ipvsadm -at 192.168.137.131:80 -r 192.168.8.130:80 -m
[root@DR ~]# 

//保存配置信息并查看规则
[root@DR ~]# ipvsadm -Sn > /etc/sysconfig/ipvsadm
[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.137.131:80 rr
  -> 192.168.8.129:80             Masq    1      0          0         
  -> 192.168.8.130:80             Masq    1      0          0         
[root@DR ~]# 

RS上安装httpd并启动

[root@RS-1 ~]# yum -y install httpd
[root@RS-1 ~]# echo 'this is RS-1' > /var/www/html/index.html
[root@RS-1 ~]# systemctl restart httpd

[root@RS-2 ~]# yum -y install httpd
[root@RS-2 ~]# echo 'this is RS-2' > /var/www/html/index.html
[root@RS-2 ~]# systemctl restart httpd

验证效果
在这里插入图片描述
在这里插入图片描述
LVS-DR模式配置httpd负载均衡

LVS服务器配置要点

LVS是被编译进内核中,主要分为两部分ipvs和ipvsadm,ipvs是LVS软件核心,是运行在LB上的,这是个基于ip层的负载均衡;ipvsadm是用户空间的集群管理工具。

要想起到负载均衡效果,那么所有请求报文必须发往LVS服务器(DS),然后DS根据指定算法分发到后端服务器上,因此DS必须配置VIP地址,VIP是与公网client通信地址,这样DS才能接受到请求报文进行分发。

一定要先设置好内核参数在配置VIP,如果先配置VIP,VIP配置好后会立即通告给所有人,而修改内核参数就是为了不通告

LVS-DR模式的注意情况:

DR的VIP 和 RS 必须在同一个网段,不然广播后所有的包都会丢掉: 提前确认LVS/硬件LB 是什么模式,是否需要在同一个网段 所有的RS都必须绑定VIP的IP地址,否则RS收到package后发现dst 不是自己的IP,所有包都会丢掉。 RS处理完包后直接把package 通过dst IP 发送给 client ,不通过LVS/迎接IP 了这样的LVS /VIP 效率会更高一点。

//DR上配置IP
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens160 
TYPE="Ethernet"
BOOTPROTO="static"
NAME="ens160"
DEVICE="ens160"
ONBOOT="yes"
IPADDR=192.168.8.137
IPADDR1=192.168.8.100
PREFIX=24
GATEWAY=192.168.8.2
DNS1=114.114.114.114

[root@localhost ~]# 
[root@localhost ~]# ifdown ens160 ;ifup ens160 
成功停用连接 "ens160"(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/2)
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/3)


RS上配置arp内核参数

//两台RS都需做此操作。 添加下列两行内容
[root@RS-1 ~]# vim /etc/sysctl.conf 
[root@RS-1 ~]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
[root@RS-1 ~]# 

[root@RS-2 ~]# vim /etc/sysctl.conf 
[root@RS-2 ~]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
[root@RS-2 ~]# 

RS上配置VIP

一定要先设置好内核参数在配置VIP,如果先配置VIP,VIP配置好后会立即通告给所有人,而修改内核参数就是为了不通告

DR服务器的网卡的IP:192.168.8.100作为VIP

[root@RS-1 network-scripts]# vim ifcfg-ens160
IPADDR1=192.168.8.100
[root@RS-1 ~]# ifdown ens160 ;ifup ens160 

[root@RS-2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens160
IPADDR1=192.168.8.100
[root@RS-2 ~]# ifdown ens160 ;ifup ens160 

DR上配置LVS-DR转发规则

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

[root@DR ~]# ipvsadm -A -t 192.168.8.100:80 -s rr
[root@DR ~]# ipvsadm -a -t 192.168.8.100:80 -r 192.168.8.129:80 
[root@DR ~]# ipvsadm -a -t 192.168.8.100:80 -r 192.168.8.130:80 
[root@DR ~]# ipvsadm -Sn > /etc/sysconfig/ipvsadm
[root@DR ~]# ipvsadm -Sn
-A -t 192.168.8.100:80 -s rr
-a -t 192.168.8.100:80 -r 192.168.8.129:80 -g 
-a -t 192.168.8.100:80 -r 192.168.8.130:80 -g 
[root@DR ~]# systemctl enable --now ipvsadm.service

RS上安装httpd并启动

[root@RS-1 ~]# yum -y install httpd
[root@RS-1 ~]# echo 'RS-1' > /var/www/html/index.html
[root@RS-1 ~]# systemctl restart httpd

[root@RS-2 ~]# yum -y install httpd
[root@RS-2 ~]# echo 'RS-2' > /var/www/html/index.html
[root@RS-2 ~]# systemctl restart httpd

在这里插入图片描述
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/163765.html原文链接:https://javaforall.net

(0)
上一篇 2022年7月24日 下午4:00
下一篇 2022年7月24日 下午4:00


相关推荐

  • 贪吃蛇–[纯C实现]–[一步一步的讲解]–【有音乐】

    贪吃蛇–[纯C实现]–[一步一步的讲解]–【有音乐】目录一、游戏说明1.1游戏按键说明1.2计分系统二、游戏运行2.1游戏效果展示2.2一个报错的纠正2.3游戏代码三、游戏框架构建3.1游戏界面的大小3.2蛇头和蛇身3.2.1蛇头3.2.2蛇身3.3标记游戏区3.3.1存储游戏区的各个位置是什么3.3.2用宏来使某些数字具有特殊意义3.4菜单栏的设置四.隐藏光标的设置4.1光标信息的结构体成员4.2隐藏光标的实现4.3GetStdHandle函数使用介绍4.4…

    2025年9月13日
    7
  • Kimi发布全新Agent模式“OK Computer”

    Kimi发布全新Agent模式“OK Computer”

    2026年3月12日
    2
  • 机器学习之有监督学习,无监督学习,半监督学习

    机器学习之有监督学习,无监督学习,半监督学习文章目录前言有监督学习无监督学习半监督学习前言机器学习是数据分析和数据挖掘的一种比较常用,比较好的手段从有无监督的角度,可以分为三类:有监督学习无监督学习半监督学习有监督学习用已知某种或某些特性的样本作为训练集,以建立一个数学模型,再用已建立的模型来预测未知样本,此种方法被称为有监督学习,是最常用的一种机器学习方法。是从标签化训练数据集中推断出模型的机器学习任务问:有监督学习的…

    2022年5月28日
    60
  • mysql创建视图步骤_MySQL创建视图的详细步骤

    mysql创建视图步骤_MySQL创建视图的详细步骤MySQL 创建视图的详细步骤发布时间 2020 05 2217 40 50 来源 51CTO 阅读 143 作者 三月下面讲讲关于 MySQL 创建视图的详细步骤 文字的奥妙在于贴近主题相关 所以 闲话就不谈了 我们直接看下文吧 相信看完 MySQL 创建视图的详细步骤这篇文章你一定会有所受益 1 视图概述 视图是从一个或多个表导出来的表 它是一种虚拟存在的表 并且表的结构和数据都依赖基本表 2 创建视图的语法

    2026年3月17日
    1
  • 大三的时候,看了这些Java面试题【附答案】,我进华为了「建议收藏」

    如果要进大厂,算法、底层、项目经验都要刷,猛哥以后会给大家更新各种面试题……前面,我们已经整理Spring、设计模式、数据结构和算法的面试题:插入文章昨天小伙伴给我说看了面试题,拿到了京东的offer,大家继续努力呀。转存失败重新上传取消如果你想进大厂,一定要有非常明确的信念:我必须进去!一定进去!别犹豫犹豫的,整天自我否定,总有人要赢,赢得人为什么不是为呢???我非常欣赏衡水中学的教学模式,我们普通人没有别的逆袭方式,就是努力,就是干!!

    2022年4月9日
    62
  • datagrip2021激活码【2021.10最新】

    (datagrip2021激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~6EK6WKOHUX-eyJsaWNlbnNlSWQiOi…

    2022年3月28日
    379

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号